昔の最近の出来事(2023.01)

2023/01/31

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

東京都コロナ感染者。新規は 4862人。

unexpandという半角スペースをタブ文字に変換するコマンドがありますが、「--first-only」 というオプションがあるのを知りました。このオプションを付けると行頭から続く半角スペース列が タブ文字への変換対象になります。インデントに関するスペースだけを対象にしたい場合に良い感じに 変換できる場合がありそうです。

2023/01/30

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

東京都コロナ感染者。新規は 1818人。

調べ事をして終了。

2023/01/29

昼過ぎ起床。寝すぎ。

掃除したり洗濯したり。

東京都コロナ感染者。新規は 3427人。

Emacsで矩形選択した文字列を「M-|」(shell-command-on-region)でコマンドラインに食わせてみると 意図通りに矩形領域の文字列が渡っているというのを知ったり。矩形選択か通常選択かで対応する 文字列が取り出せているようだったのでどうやってるんだ?と思って調べてみました。 どうやら「(funcall region-extract-function nil)」という関数呼び出しを実行すると 現在の選択に合わせて加工された文字列が返る事が判りました。
で、以前 矩形領域の文字列を取得する方法が判らないまま 今に至っていた 拙作のggltr-modeに組み込んでみたり。ちゃんと矩形領域の文字列が渡って 翻訳結果が得られるようになりました。

ggltr矩形翻訳テスト

これで 日本語以外の行コメント文を読むのが少し楽になりそうです🙂。 そんな訳で放流してみます(ggltr-mode_230129a.tar.xz)。御参考まで。

2023/01/28

起きたら午後もいい時間。寝すぎ。

東京都コロナ感染者。新規は 4515人。

Emacs29のgitブランチ。 一時はtree-sitter関連の更新が激しく行われていたのですが、ここ数日は静かになってきた気がしたりも。 src/treesit.cが追加されたのは2022年3月みたいなのですが、 lisp/progmodes/c-ts-mode.elが追加されたのは2022年11月上旬のようでした。Emacs29のブランチが生成されたのは 2022年11月下旬だったのですが、以降大荒れだったように思います。個人的にはmasterブランチで 激しい更新が起こるのは別に良いと思いますが リリースに向けたブランチで起こるのはどうなのだろう?とは思ったりも。 締め切りが見えないと整わないというのは あるあるなのかも知れませんが。

マクロ。Emacsでマクロと言われると「キーボードマクロ」を連想するのですが、ソフトによって指すものが違う 場合があります。例えばTeraTermでのマクロは操作手続きをファイルに記しておいてスクリプト的に実行するものを指します。 また、ソフトやプログラム言語によっては手続きを 関数の様に定義したものを指す場合もあります。 ある塊に名前を付けたり実行したりというニュアンスを指すのに便利な言葉ですが、 万人が同じ意味で使っているとは限らないのは注意する必要があるのかもとは思ったりも。 ところで、「マクロ言語」 というWikipediaの記述にある「Emacsのマクロ」という言い方には違和感を覚えます。

2023/01/27

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

東京都コロナ感染者。新規は 4297人。

そういえば bashスクリプトを実行中に書き換えると意図しない挙動になる事があるとされています。 ファイルから逐次読み出ししながら実行するという仕組みによるものみたいです。 で、思ったのですが今のご時世でもファイルから逐次読み出ししながら実行する必要があるのかしら? もっと言うとオンメモリで動くんじゃダメなのか?と思わなくもありません。 動かしながら書き換えたコードにシームレスに移行できるような事はそもそも期待していないのだとすれば、 実行中のプロセスが影響を受けないようになっていて困る人は居ないんじゃないかなぁ?と思ったりも。

2023/01/26

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

東京都コロナ感染者。新規は 5061人。

Web巡回して終了。

2023/01/25

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

東京都コロナ感染者。新規は 5934人。

調べ事して終了。

2023/01/24

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

東京都コロナ感染者。新規は 7306人。

全然関係無い流れで watch というコマンドの存在を知りました。例えば「watch -n 1 'date'」で 1秒おきにdateコマンドを実行するという感じになります。ほぅ....

2023/01/23

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

東京都コロナ感染者。新規は 2677人。

Web巡回して終了。

2023/01/22

昼前起床。

掃除したり洗濯したり。

東京都コロナ感染者。新規は 5110人。

dlang-ts-mode。何気に 何もない所から関数を書き始めてみたところ、 インデントが機能しない場面があるなぁ?と思ったり。どうやら関数の本体を記す際に「{」に対応する 「}」が無いとブロックとして認識されず、tree-sitterの構文木がエラーした状態になっていて、 インデントが機能しないという流れになるようです。 カーソル位置より手前の行のインデントだけを見て現在行のインデント位置を決める方法ならば、 作成中なので構文としては完成していない状態でもうまく動くと思いますが、tree-sitterを使うとそういう訳にもいかないみたいです。 理由は判ったけど「融通が利かないなぁ」という感想を抱いてしまいます。一方的な人間の都合ですけど😓。

という訳で、electric-pair-modeもしくは electric-pair-local-modeで閉じ括弧を自動挿入するモードと 合わせて使うのが良さそうです。 個人的に「自動的に閉じ括弧を入れるのは良いけどそれを C-fでスキップするのが面倒(閉じ括弧を入力するのと手間が変わらない)」と 思っていたのですが、自動で挿入されているのは気にせず「}」を入力すれば二重に「}}」とはならないみたい。 結果的に全然入力補助になっていないので何が便利なのか判らなかったのですが、tree-sitterを使う場面では意味があるという感じです。 なんだか機械の都合を機械で補う感じになっている感はありますが😓。

2023/01/21

昼前起床。

東京都コロナ感染者。新規は 6607人。

dlang-ts-mode。Phobosのソースコードを適当に選んで表示してみると、TANEは使った事の無い ややこしい記述が多くて色が付かない所があったり。ぼちぼち足していく感じで。

そういえば bashコマンドラインで存在しないコマンドを実行したとき、

$ ./xxx
bash: ./xxx: No such file or directory

$ echo $?
127

てな感じになります。メッセージはbashのものっぽいですが、終了コードの127は誰が返しているのだろう?と思ったり。 man bash の「EXIT STATUS」の項に以下のように記されていました。

       If  a command is not found, the child process created to execute it re‐
       turns a status of 127.  If a command is found but  is  not  executable,
       the return status is 126.

Google翻訳
       コマンドが見つからない場合、それを実行するために作成された子プロセスは
       127 のステータスを返します。コマンドが見つかったが実行可能でない場合、
       返されるステータスは 126 です。

fork/execモデルでは、fork()で子プロセスとして生成された後 exec()に失敗するという事で forkされたbashがメッセージを出力しているって事なのでしょう。なる。 fork/execモデルの事が解っていないいないと「それを実行するために作成された子プロセス」が 何の事だか分からないかも知れませんが。
ただし、bashの場合はこうしているという事だと思うので、自分で書いたプログラムだったり使用するプログラム言語 やライブラリ実装によって 事情は変わってくるのかなと思います。

2023/01/20

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

東京都コロナ感染者。新規は 6603人。

dlang-ts-mode。もうちょいなんとかならないかと思う所があるのですが今あるものでは難しそう。 lisp/treesit.el内で定義されている treesit-simple-indent-presets にパターンを追加するのはOKなのだろうか?

2023/01/19

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

東京都コロナ感染者。新規は 7719人。

dlang-ts-mode。手持ちのD言語コードをインデントし直して確認してみた範囲では良さげな感じになったような気も。 ただ、いわゆるK&Rスタイル のインデントは問題無いのですが、いわゆるGNUスタイルやBSD/オールマン・スタイル にするには追加の仕掛けを入れる必要があるみたい。

2023/01/18

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

東京都コロナ感染者。新規は 9187人。

*-ts-modeのインデントルール。static ifのインデントはあーでもないこーでもないって弄っていたら else if と似た感じ(同じではない)で反応する事を発見しました。何故うまくいくのかはやっぱりよく分かってませんが😓。

tree-sitterのインデントルールを書いていて、ifでも色々あるのを再認識しました。


見た目の記述が同じでも意味が違うので、インデントルールはそれぞれ記す必要があるようです。なんか大変。

2023/01/17

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

東京都コロナ感染者。新規は 11120人。

そういえば、ニュースとかで中国の春節による21億人の大移動みたいな話が出ているようですが、 中国の人口って20億人超えているんだっけ?と思ったり。調べてみると 2022年で 約14億人って事なので 20億人を超えているって事では無いみたい。てことは、何かしらの延べ人数か?とも思ったのですが、 全員動いても14億人なのだから、なにをどう勘定すれば21億人って値が出てくるのかよくわからんなぁ? とは思ったりも。

*-ts-modeのインデントルール。static ifが所望のインデントになっていなかったり。 tree-sitterを使わないモードでも所望の感じになっていなかったのですが、そちらはd-modeから足りない部分を 移植して対応してました(以前のメモ1,メモ2)。 tree-sitterではどうしたものやら。

2023/01/16

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

東京都コロナ感染者。新規は 4433人。

*-ts-modeのインデントルール。if文のぶら下がりですがなぜかこれでうまくいくというパターンを見つけました😓。
--indent-rulesの中に「((match "else" "if") parent-bol 0)」という条件を入れると 「else if()」が認識されたのですが、そういう用途のものなのかはよく判ってません😓。ともかく、以下のような感じで 意図通りのインデントになるようだったのでひとまずこれで。

  if(a==1) b=1;
  else if(a==2) b=2;
  else if(a==3) b=3;
  else b=0;

  if(a==1)
    b=1;
  else
    if(a==2)
      b=2;
    else
      if(a==3)
        b=3;
      else
        b=0;

  if(a==1){
    b=1;
  }else if(a==2){
    b=2;
  }else if(a==3){
    b=3;
  }else{
    b=0;
  }

ところで、tree-sitter-* の方をちょっと変えられてしまうとインデントが全く機能しなくなりそうですが(実際なる)、 追従できるのだろうか?🤔
勝手に抱いていたのは tree-sitterで生成した構文木は 言語によらず同じフォーマットで生成されるので、色付けプログラム(ここでは xxx-ts-mode のELISPの事)の共通化が図れるのかなぁ? と思った訳ですが、全然そういう感じでは無さげです。気まぐれで変更されると困るだろうなぁとは思ったりも。

2023/01/15

昼前起床。

掃除したり洗濯したり。

東京都コロナ感染者。新規は 8269人。

*-ts-modeのインデントルール。if文のぶら下がりがどうにもうまくゆかず。 例えば、C言語では以下のようにインデントされるのですが、

  if(a==1) b=1;
  else if(a==2) b=2;
  else b=0;

現在 実験中のD言語モードでは以下のようにインデントされます。

  if(a==1) b=1;
    else if(a==2) b=2;
      else b=0;

tree-sitter parse での構造はC言語の場合は以下のように出力されるようです。

     1        (if_statement [7, 2] - [9, 11]
     2          condition: (parenthesized_expression [7, 4] - [7, 10]
     3            (binary_expression [7, 5] - [7, 9]
     4              left: (identifier [7, 5] - [7, 6])
     5              right: (number_literal [7, 8] - [7, 9])))
     6          consequence: (expression_statement [7, 11] - [7, 15]
     7            (assignment_expression [7, 11] - [7, 14]
     8              left: (identifier [7, 11] - [7, 12])
     9              right: (number_literal [7, 13] - [7, 14])))
    10          alternative: (if_statement [8, 7] - [9, 11]
    11            condition: (parenthesized_expression [8, 9] - [8, 15]
    12              (binary_expression [8, 10] - [8, 14]
    13                left: (identifier [8, 10] - [8, 11])
    14                right: (number_literal [8, 13] - [8, 14])))
    15            consequence: (expression_statement [8, 16] - [8, 20]
    16              (assignment_expression [8, 16] - [8, 19]
    17                left: (identifier [8, 16] - [8, 17])
    18                right: (number_literal [8, 18] - [8, 19])))
    19            alternative: (expression_statement [9, 7] - [9, 11]
    20              (assignment_expression [9, 7] - [9, 10]
    21                left: (identifier [9, 7] - [9, 8])
    22                right: (number_literal [9, 9] - [9, 10])))))

そして こちらの tree-sitter-d では以下のようになるようです。

     1          (if_statement [26, 2] - [28, 15]
     2            (if [26, 2] - [26, 4])
     3            (if_condition [26, 4] - [26, 10]
     4              (binary_expression [26, 5] - [26, 9]
     5                (equal_expression [26, 5] - [26, 9]
     6                  (identifier [26, 5] - [26, 6])
     7                  (int_literal [26, 8] - [26, 9]))))
     8            consequence: (scope_statement [26, 11] - [26, 15]
     9              (expression_statement [26, 11] - [26, 15]
    10                (expression_list [26, 11] - [26, 14]
    11                  (assignment_expression [26, 11] - [26, 14]
    12                    (identifier [26, 11] - [26, 12])
    13                    (int_literal [26, 13] - [26, 14])))))
    14            (else [27, 4] - [27, 8])
    15            alternative: (scope_statement [27, 9] - [28, 15]
    16              (if_statement [27, 9] - [28, 15]
    17                (if [27, 9] - [27, 11])
    18                (if_condition [27, 11] - [27, 17]
    19                  (binary_expression [27, 12] - [27, 16]
    20                    (equal_expression [27, 12] - [27, 16]
    21                      (identifier [27, 12] - [27, 13])
    22                      (int_literal [27, 15] - [27, 16]))))
    23                consequence: (scope_statement [27, 18] - [27, 22]
    24                  (expression_statement [27, 18] - [27, 22]
    25                    (expression_list [27, 18] - [27, 21]
    26                      (assignment_expression [27, 18] - [27, 21]
    27                        (identifier [27, 18] - [27, 19])
    28                        (int_literal [27, 20] - [27, 21])))))
    29                (else [28, 6] - [28, 10])
    30                alternative: (scope_statement [28, 11] - [28, 15]
    31                  (expression_statement [28, 11] - [28, 15]
    32                    (expression_list [28, 11] - [28, 14]
    33                      (assignment_expression [28, 11] - [28, 14]
    34                        (identifier [28, 11] - [28, 12])
    35                        (int_literal [28, 13] - [28, 14]))))))))

いくつか違いはあるのですが、構文のツリー構造としてみると違いは無いようにも思えます。


「consequence:」や「alternative:」をどうやって見ているのだろうと思って lisp/*.elや lisp/progmodes/*.elを grep してみたのですが、見てそうな所が無くてよく判らないまま。見ていない可能性も無くはありませんが、 見ないと thenの下なのか elseの下なのか区別が付かないように思います。
C言語の方ができているのと、C言語もD言語もtree-sitterのparseによるツリー構造はトポロジカルにほぼ同じという点から、 D言語でも同じ事ができるハズと考えられるのですが 何故うまくいかないのやら。

どうやってデバッグするのかよく判らないので、書き換えながら反応するかしないかで意味を汲み取ってみている のですが、カーソル位置がどのノードに位置しているのかを調べる手段があれば何故反応しないのか?とかが 判るのかなぁ?とは思ったりも。

カーソル位置のノードを調べる事ができるっぽいのが分かったり。 「(treesit-node-at (point))」で現在のカーソル位置のノードが返り、それを引数とするように 「(treesit-node-parent (treesit-node-at (point)))」で親ノードが調べられるっぽい。 ちょっと試してみたのですが、なんか思ったのと違う感じがしたりも?🤔

2023/01/14

昼頃起床。

東京都コロナ感染者。新規は 10727人。

D言語モード。ts-modeのインデントルールを既存のモードと lisp/treesit.el からどういう事をやってるのか観察してみたり。 少し掴めてきたようなそうでもないような。

色付けを追加していて、文脈をちゃんと見ていると色の決定がなかなかできない場合があるのだなぁと思ったり。 例えばD言語の クラスを書くような場合、

class TestClass {
  int x

とまで記したところで、x が変数なのかメソッドなのかはまだ決定できません。この後に「(」が来ればメソッドと決定でき、 「;」か「=」が来れば変数と決定できます。予約語に色を付けるのに比べると 変数や関数に色を付けるのは難しい というのに納得したりも。

2023/01/13

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

東京都コロナ感染者。新規は 11241人。

D言語モード。ts-modeでのインデントは掴めず。

2023/01/12

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

東京都コロナ感染者。新規は 13427人。

D言語モード。色付けはなんとかなりそうな気がしてきたのですが、インデントがどうにも思い通りにならず。 c-ts-modeと同じじゃないか?と思うようなものでもなぜか同じ動きにならず。うーむ🤔

Emacs29ブランチでの機能凍結のアナウンスが出ていた模様 (Feature freeze on the emacs-29 release branch)。 先日Emacs-29の更新量が静まったなと思ったのですがそういう事でしたか。 目標通りに行ければ 29.0.90は2月初めに出る感じかな?と思ったりも。

2023/01/11

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

東京都コロナ感染者。新規は 16772人。

D言語モード。一番単純そうなリストに指定したキーワードに色を付けるのがなぜかエラーで動かなかったり。 どうやら文字列で例えば「"return"」と指定していたのを 「(return)」みたいに記す必要があるみたい。 ELISPだと要素が一つのシンボルのリストみたいな書き方になってしまって、見た目がなんだか訳が分からなくなりそうです😓

2023/01/10

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

東京都コロナ感染者。新規は 7462人。

Emacsのプログラム言語モード。xxx-modeとxxx-ts-modeのハイブリッドというのはできないのだろうか?と思ったり。 例えば 色付けはxxx-ts-modeで行い、インデントはxxx-modeで行うとかその逆とか。 xxx-ts-modeでxxx-modeを100% カバーできていれば問題無いところなのですが、 D言語を解釈する tree-sitter-dは 他と違っててインデントに対応しようとするにはtree-sitter-dの方をどうにかしなくては ならないケースがありそうなのがなんとも....

なんかよく見てみると、ビルドしたのは違う tree-sitter-d だった模様。 現在 二つの tree-sitter-d のプロジェクトが存在していて、 一つはこちらもう一つはこちらで、 これまで試していたのは前者の方でした。 インデント対応するにはどうにかしなくてはならないと思っているのは前者の方だった訳ですが、 後者の方だと tree-sitter parse を実行した結果を見た感じなんとかなりそう。 問題は 前者向けに動くように弄っていた dlang-mode.elは 後者だとエラーします。 という訳で treesit-query-validate 関数を使ってデバッグする所からやり直しが必要そう🥺

2023/01/09

AM中に起床。

掃除したり。

東京都コロナ感染者。新規は 8199人。

先日 Emacs29本体のアップデートを行ったのですが、どうにもならなかった D言語のtreesitterによるインデントが 何故かうまく動くようになっていたり。具体的には先日の if_statementのぶら下がりの インデントが何もしてないのですが上手く動くようになってました。扱い方が判らない...😓

2023/01/08

AM中に起床。

東京都コロナ感染者。新規は 15124人。

先日来ていた tree-sitterのCygwinパッケージを使って Emacs29をビルドしてみたり。特に問題無くtree-sitter有効でビルドできました。

Emacs29のブランチが少し更新量が静まった気がしたので野良ビルドベースをアップデートしてみたり。 これまで29系にブランチする前の29.0.50だったのですが 29.0.60になってました。 パッチはorg-mode関連で微妙にリジェクトされたのですが手で直して対応。それ以外のIMEパッチなどは大丈夫そう。 ビルドも問題無さそうでいきなりズッコケたりはしなさそう。

dlang-ts-mode。29.0.50のcsharp-modeをベースに dlang-ts-mode向けに色付けの方法を足していたのですが、 29.0.50では何故かバッファの再描画がうまく働かない事があり、ある行数を越えた所から色が付かなかったりしてました。 今日時点のcsharp-modeをマージしてみたところ、色付けが行われないという事象が起こらなくなりました。 csharp-mode以外にもsrc/treesit.cも更新されているので、何が原因だったかは分かりませんが。

Emacsのediff3 を使ってみました。多分ほぼ初めて使う感じです。3つのファイルの差分を抽出する diff3というコマンドがありますが、 差分結果の表示が難解すぎてTANEには読めません😅。ediff3では3つのファイルを並べて表示されるので どこの差分か分かりやすい上、例えば ファイルA,B,Cのうち BからCにコピーするといったマージ作業もできるので便利でした。 とは言え、2つのファイルの差分をマージするのがほとんどなので、ediff3 を使う場面はなかなか無いかも知れません。

何気にc-ts-modeの表示確認をしてみたのですが、なんだか以前よりも 色が付かなくなっているようです。

Emacs29.0.50 c-ts-mode Emacs29.0.60 c-ts-mode

左が前回試した時のc-ts-mode、右が今回試したc-ts-mode。雰囲気的にはデグってるんじゃないか?と思ったりも。

2023/01/07

昼過ぎ起床。寝すぎ。

東京都コロナ感染者。新規は 19630人。

D言語でのtreesitterのインデントルール。反応のさせ方が少し分かったような。でもEmacs29の lisp/progmodes/*-ts-mode.el とは 反応のさせ方が違っててこれで良いのかよく判らず。

どうやってもインデントがうまくいかない所があったので、C言語向けのtree-sitter-cと パースの違いを見てみたところ 全然違うというのが判りました。 結論から言うと、今のD言語向けのtree-sitter-dでは所望のインデントも色付けも完全にはできなさそうです。 例えば if_statementでの ぶら下がりインデントはどうしようも無い感じに思ったりも。 これではインデント対応できるような気がしないのだけれど、これを使ってインデント対応しているテキストエディタってあるのかしら?🤔

tree-sitterのCygwinパッケージが来た模様 ([ANNOUNCEMENT] tree-sitter 0.20.7-1)。 野良でビルドしなくても良くなりそうです。

2023/01/06

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

東京都コロナ感染者。新規は 20720人。

D言語でのtreesitterの色付け。一部思い通りにならない所があるのですがそれっぽい感じになってきたようなそうでもないような。 それよりもインデントルールの方が何を書いてもうまく反応しなくてなんだこれ?って感じになってます🤔

2023/01/05

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

東京都コロナ感染者。新規は 20735人。

D言語でのtreesitterの色付け。分かってきたようなそうでもないような。

2023/01/04

AM中に起床。今日まで休み。社会復帰が辛くなりそう。

東京都コロナ感染者。新規は 10554人。

そういやPS4向けのゲームで数十円~300円前後の価格帯のゲームが出ているのですが、 あれってどういうルートで発売しているのだろう?と思ったりも。 多分一番最初に見たのはこれ。 少し調べてみるとこちら(記事1)の記事からその事情が判ったような気も。 最近はこちら(記事2)の記事にあるように こんなのでも買う人居るの?みたいな既にゲームではない感じのものでも トロフィー目的需要があるらしい (因みにThiGamesのやつは先月PS4で出るようになったみたい)。 作る側にも言い分はあるようですが、現状を見る限り 記事1の方にもあるように審査料の防波堤は重要だったのかも知れません。 置く時間に応じてお金がかかる出店料を取るとフルプライスのゲームにも影響が出てしまう事を考えると、 入口でふるいをかけるのは合理的なのかも知れません。

2023/01/03

AM中に起床。

東京都コロナ感染者。新規は 9628人。

拙作のsysmonを動かしているとプロセスサイズが大きくなる件。 image-flushを入れてみたバージョンでも、一晩放置するとやっぱりプロセスサイズは大きくなってました。 24時間経たずに100MB→3GBとかになるので ちょっと許容できないな....🤔

思い当たる節が無いので、Cygwinを3.4.3から3.3.6にダウングレードしてみたところ プロセスサイズの増加は収まったり。 一度は無実としたけれどやっぱりCygwinだったか😓。まぁ、これまで 1ヵ月に近いレベルで立ち上げっぱなしで問題無かったものが 数日で変になったら思い当たる点はそんなにいくつも無いって感じだったかも知れません。
それにしても、こういうのってどうやって調べるのが良いのかなぁ?と思ったりも。 32bitだとメモリサイズ的な都合で もっと早く変な事に気づくのかも知れません。加えて仕組み的にシステムのメモリを食いつくす 事も無い(4GBの壁は超えられない)と思われます。64bitだとシステムメモリが食いつくされてから気づく感じになる事もあり得る訳で、 それだと手遅れになる事もあるんじゃないかなぁ?と思うわけです。

そういや sysmonでは SVG描画とテキスト描画を切り替えられますが、テキスト描画の表示がなんか変だなぁ?と思ったり。 グラフのプロットに「▉」(U+2589)というUnicode文字を使っていたのですが、フォント設定を弄った影響で描画フォントが変わってしまい、 半角英数の文字幅と合わなくなっていたようです。SVG描画があるのでまぁいいかとも思ったのですが、 .emacsに以下のように記して、周辺の記号含めてフォント指定をリセットしてみたり。

  (mapcar
   #'(lambda (charcode)
       (set-fontset-font "fontset-default" charcode '("" . "iso10646-1")))
   '(#x2580 #x2581 #x2582 #x2583 #x2584 #x2585 #x2586 #x2587 #x2588 #x2589 #x258A #x258B #x258C #x258D #x258E #x258F #x2590))

うまく設定されていればいちいちリセットしなくても大丈夫かも知れません😅。御参考まで。

2023/01/02

AM中に起床。

東京都コロナ感染者。新規は 7537人。

去年末の12月28日にCygwinを3.3.6から3.4.3にアップデートしたのですが、なんかちょっと怪しくないか?と思ったりも。 というのも、普段使いのEmacs(28.2の野良ビルド)は立ち上げっぱなしにしているのですが、 特に変わった事はしていないつもりなのにプロセスサイズが7.7GBになっていたり。 Cygwinの3.4.xはMailingListのアーカイブで見ていて 少し怪しい雰囲気だったので直ぐには入れなかったのですが、 落ち着いた感じがしたので入れてみました。何かしらメモリリークしている?🤔 気づいた時点で emacs-uptimeは「4 days, 20 hours」って所だったので、もう少し観察してみよう。

って記した数分後に3.3GBになってたり。そういや拙作のggltr-modeを実行 した時に何やら固まるなぁ?と思ったのですが、どうやら翻訳を実行したらメモリを爆食いしているっぽい。 ggltr実行直後に再び7.7GBまでプロセスが成長し、GCの働きによって(?)緩やかにメモリが解放されていくようです。 巨大プロセスになったEmacsは起動したままにして、普段使いのをもう一つ立ち上げ直してプロセスが成長するのか見てみる事に。

毎秒メモリ量が変わっている所から、どうやら拙作のsysmon に連動しているようだったり。SVGでの描画を行うとちょっとずつプロセスサイズが増えているようです。 sysmonだけを終了させたところ しばらくするとプロセスサイズが縮んで、7.7GBだったプロセスが730MBくらいになりました(それでも大きいですが😓)。 buffer-disable-undoしているのでバッファ自体がメモリを抱えたままになる感じではないと思うのですが、 どういう事が起こっているのかもう少し調べてみる必要はあるかも知れません。 あと、やっぱりggltrを実行すると 730MBだったプロセスが 8GBにリバウンドしてしまったので変になっているのは確かなのかも。 という訳でCygwinのアップデートは関係無いかも知れません。疑ってすみません。

不滅のあなたへの再放送を観ていた流れで、「たんけんぼくのまち」の当時映像の再放送をやってたのを見たり。 今だと チョーさんは声優として知っている人の方が多いかも知れません。副音声のコメンタリーで見たのですが、当時の話で 自転車は近所のおじさんから借りていたとか、犬が苦手なのはライバルだから(→チョーさんを演じているのは長嶋茂さん、 また"チョーさん"は当時の長嶋茂雄の愛称でもあり、"ワンちゃん"は王貞治の愛称という流れから) みたいな話とか面白かったです。 ところで、高価だった放送用テープを上書きで再利用していたため NHKの昔の番組は失われているようです。 NHK番組発掘プロジェクト (参考Wikipedia) で 家庭用VTR(ビデオ)で残っていたものを発掘しているようですが、昔の映像画質が非常に悪いのはこのことにも関係するようです。

拙作のsysmonを動かしているとプロセスサイズが大きくなる件。 SVG描画モードではじわじわ増えていきますが、テキスト描画モードだと増えないという事が判りました。 毎秒 SVG画像を生成しては捨てるという事になるのですが ガベージコレクタに任せると 増えたり減ったり振動する為、 前の画像を image-flush って関数で意図的に無効化するようにしてみたところ、プロセスサイズの細かい増減は無くなるものの 増えるのには変わりなしという動きになっているようです。

更に反応を調べてみたところ、関数image-flushのオプション引数でフラッシュ対象とするframe指定が行えるのですが、 全ての既存フレームでフラッシュするようにしたところ、メモリ増加が抑えられるような気も?...そうでもないかも...一晩放置してみるか。

2023/01/01

あけましておめでとうございます。今年もよろしくお願い致します🙂

AM中に起床。

東京都コロナ感染者。新規は 9186人。

そういや干支の絵文字を見ていて これも日本のものなのか?と思ってみたら、 東洋では大体同じものらしいというのを知りました(干支のWikipedia)。 ほぅ....。因みに今年は日本では兎ですが、タイやベトナムは猫なのだそうな。 日本では猫は鼠に騙されてレースに参加できなかったため選外になったって話がありますが、 逆にタイやベトナムはどういう理由で猫になっている(もしくは兎ではない)のだろうか?と思ったりも。

ぐうたら過ごして終了。去年末からずっと孤独のグルメの再放送を見ているような気がしたり😅


TOP PREV