昔の最近の出来事(2020.08)

2020/08/31

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

東京都コロナ感染者。新規は100人。月曜だしな。

あまりの眠さに急速停止。

2020/08/30

AM中に起床。

掃除したり洗濯したり。

東京都コロナ感染者。新規は148人。日曜と月曜はこんな感じかも。

IME制御の続き。
一昨日の C-s(isearch-forward)の時の IMEが強制的にOFFになる問題について、メールで別の対応案を教えていただきました。 ミニバッファを離れるときに 関数 w32-ime-exit-from-minibuffer で強制的に IMEをOFFにしてしまうコードがあったようで、全バッファIME状態同期モード (変数 w32-ime-buffer-switch-p を nilに設定する)の時は実行しないようにする という案です。これにより「 *Minibuf-1*」を特別扱いするコードが不要になると同時に、 先日の「6. ミニバッファを抜けて元のバッファのウインドウに戻るとIMEはOFFになっている。」 の問題も同時に解決されました。という訳で、関数 w32-ime-mode-line-update がミニバッファ に居る時には IME状態表示更新が作用しないへの対応と組み合わせる事で、 どのバッファに居ても隙無くIME状態の同期表示が行われるようになった気が。

$ diff -u w32-ime.el.tane.orig w32-ime.el
--- w32-ime.el.tane.orig        2020-08-11 22:01:01.142510200 +0900
+++ w32-ime.el  2020-08-30 12:22:10.330841100 +0900
@@ -113,11 +113,17 @@
                   (not (equal current-input-method "W32-IME")))
              (ime-force-off nil)
              (run-hooks 'w32-ime-off-hook))))))
-    (progn
-      (dolist (win (window-list))
-       (with-current-buffer (window-buffer win)
-         (w32-ime-mode-line-update))))
-    ))
+    (let ((ime-state (ime-get-mode)))
+      (dolist (frame (frame-list))
+       (dolist (win (window-list frame))
+         (with-current-buffer (window-buffer win)
+           (cond
+            ((and (not ime-state)
+                  current-input-method)
+             (deactivate-input-method))
+            ((and ime-state
+                  (not current-input-method))
+             (activate-input-method "W32-IME")))))))))

 (defun w32-ime-set-selected-window-buffer-hook (oldbuf newwin newbuf)
   (w32-ime-sync-state newwin))
@@ -128,16 +134,19 @@
 (defun w32-ime-mode-line-update ()
   (if (featurep 'w32-ime)
       (progn
-        (cond
-         (w32-ime-show-mode-line
-          (unless (window-minibuffer-p (selected-window))
-            (setq w32-ime-mode-line-state-indicator
-                  (nth (if (ime-get-mode) 1 2)
-                       w32-ime-mode-line-state-indicator-list))))
-         (t
-          (setq w32-ime-mode-line-state-indicator
-                (nth 0 w32-ime-mode-line-state-indicator-list))))
-        (force-mode-line-update))
+       (cond
+        (w32-ime-show-mode-line
+         (if (or
+              (not w32-ime-buffer-switch-p)
+              (and w32-ime-buffer-switch-p
+                   (not (window-minibuffer-p (selected-window)))))
+             (setq w32-ime-mode-line-state-indicator
+                   (nth (if (ime-get-mode) 1 2)
+                        w32-ime-mode-line-state-indicator-list))))
+        (t
+         (setq w32-ime-mode-line-state-indicator
+               (nth 0 w32-ime-mode-line-state-indicator-list))))
+       (force-mode-line-update))
     ))

 (defun w32-ime-init-mode-line-display ()
@@ -183,7 +192,8 @@
     (define-key global-map [kanji] 'ignore)))

 (defun w32-ime-exit-from-minibuffer ()
-  (deactivate-input-method)
+  (when w32-ime-buffer-switch-p
+    (deactivate-input-method))
   (when (<= (minibuffer-depth) 1)
     (remove-hook 'minibuffer-exit-hook 'w32-ime-exit-from-minibuffer)))

もうしばらく使ってみよう。

VMwareのFedoraでソフトウェアアップデートを確認したらEmacs-27.1が来ていたり。 何の準備も無くアップデートしてみたのですが色々ダメな感じに。 Anthyはやっぱり対応無しになっててエラーします。
以前、イマイチどう書き換えれば 良いのか判らなかったのでそのままになっていましたが、誰か直していないかな? と思って検索してみたところ、OpenBSDのPortsにemacs-27.1ではエラーする旨のログメッセージと、 それを直した差分がCVSリポジトリに登録されているようです (参考, パッチの差分)。この差分ではバッククォート の修正だけですが、関数 process-kill-without-query を process-query-on-exit-flag に書き換える必要もあります。

$ diff -b -u anthy.el.old anthy.el | lv | cat
--- anthy.el.old        2013-11-01 16:05:41.000000000 +0900
+++ anthy.el    2020-08-30 14:43:49.932416700 +0900
@@ -161,11 +161,11 @@

 ;; From skk-macs.el From viper-util.el.  Welcome!
 (defmacro anthy-deflocalvar (var default-value &optional documentation)
-  (` (progn
-       (defvar (, var) (, default-value)
-        (, (format "%s\n\(buffer local\)" documentation)))
-       (make-variable-buffer-local '(, var))
-       )))
+  `(progn
+     (defvar ,var ,default-value
+       ,(format "%s\n\(buffer local\)" documentation))
+     (make-variable-buffer-local ',var)
+     ))

 ;; buffer local variables
 (anthy-deflocalvar anthy-context-id nil "コンテキストのid")
@@ -745,7 +745,7 @@
        (if anthy-agent-process
            (kill-process anthy-agent-process))
        (setq anthy-agent-process proc)
-       (process-kill-without-query proc)
+       (process-query-on-exit-flag proc)
        (if anthy-xemacs
            (if (coding-system-p (find-coding-system 'euc-japan))
                (set-process-coding-system proc 'euc-japan 'euc-japan))

バイトコンパイルもでき、エラー無く動くようです。さすがOpenBSD。

Fedoraの方をEmacs27対応してみたり。メインで使っている訳ではないので site-lispとか色々散らかってしまってましたがひとまず 脱cl依存対応 まで完了。

そういえば、この日以来、EmacsのIME設定は w32-ime-buffer-switch-pをnilに設定しているのですが、tにしても使えるものなのだろうか? と思ったり。ちょっとだけ tで試したものの、term+描画とIME入力中の衝突問題は 勝手に直っていたりする事は無さげ。あと、IME-ONの状態で C-x o (other-window) を 実行したとき、C-xは入力されるのですが、oはIMEに食われてしまって「お」を入力 しようとしてしまいます。あれ?こんなんだっけ?と思ったのですが、 少し前に記した「ウインドウを切り替える際にIMEを一旦OFFにする癖が付いていた」 その理由はこれだったかも?と思ったり。 w32-ime-buffer-switch-pがnilの場合はIMEがONの状態で C-xを入力すると 一旦IMEがOFFになり、続く o がIMEに食われる事が無いようになっているようです。 全く気付いていませんでしたが、確かにウインドウを切り替える時にあまり IMEの状態を気にしなくなってたなぁ?とは思ったりも。

2020/08/29

昼頃起床。

東京都コロナ感染者。新規は247人。なんか高止まっている感じがしてきたかも。

昨日付けでSAI2の新しいのが来ていたり。お疲れ様です。バグ修正がメインの模様。

IME制御の続き。昨日のでもまだダメだ......

  1. フレームが一つの状態にする。
  2. 任意の表示されているバッファでIMEをONにする。
  3. IME-ONの状態で C-x C-r(find-file-read-only) とか、ミニバッファを開くようなコマンドを実行する。
  4. ミニバッファに居る間 IMEのON/OFFを切り替える事はできるけど他のウインドウのインジケーターが更新されない。
  5. ミニバッファではIMEの状態は見えないけどON/OFFは切り替えられててマルチバイト文字のファイル名も入力できる。
  6. ミニバッファを抜けて元のバッファのウインドウに戻るとIMEはOFFになっている。

C-s(isearch-forward) と似たような物かと思ったのですがそうでは無いっぽい。 ミニバッファに居る間も 全てのウインドウやバッファのリストは取得できるのですが、 どうやらミニバッファに居る間は 関数 selected-window はフレーム内の如何なるバッファで 実行してもミニバッファのウインドウが返ってくるみたい。この為、 関数 w32-ime-mode-line-update はミニバッファのウインドウには作用しないので、 表示が更新されないというのが直接の原因の模様。

最初に「フレームが一つの状態にする」という条件が入っていますが、 フレームが違えば 関数 selected-window はミニバッファじゃないウインドウになっている為、 関数w32-ime-mode-line-update を追加する事でモードラインの更新ができるみたい。 でも、関数 select-window を使ってウインドウを切り替えてしまうと無限ループの状態に 陥るようで、今のところ手は無し。

IME制御の続き。もう少し調べてみた所、関数 w32-ime-mode-line-update では 関数 selected-window を実行して 返ってきたウインドウがミニバッファを表示している時には モードラインの更新は行わないという動きになってましたが、 如何なるウインドウでもモードラインを更新するようにしてみた所、所望の 動作になってみたり。ただし、C-x C-r(find-file-read-only) でミニバッファを 開いた場合はIME-ONのままファイルを開いたり C-g でキャンセルしてミニバッファを 抜けるとIMEが強制的にOFFになります(最初に挙げた6.の動き)。でも、ここはもう諦め。 一応ミニバッファに居る状態でもインジケータを表示しているウインドウがあれば IMEの状態が見て判るようになったので、目で見て確認してもらう方向で。 先日の「 *Minibuf-1*」だけ特別扱いしているのも関数 w32-ime-mode-line-update の変更によりついでに解消されないか?と思ったのですがダメでした。 これでもう少し使ってみる事にしよう。

2020/08/28

AM中に起床。本日お休み。

AM中に散髪に。ちょうど帰り着いてし少しすると雨が降ってきたり。セーフ。

東京都コロナ感染者。新規は226人。安倍首相が辞意を表明した話でTVはどの局もコロナに興味無しな感じ。

そういやシェルから使うCUIベースのコマンドのカラー表示について思った事。 gitの生コマンドで「git log」みたいなのを実行すると、~/.gitconfig とかに書かれたページャに渡して表示されます。 この時、特に断りが無ければカラー表示されるのでページャもカラーエスケープ コードを表示できるように「pager = less -R -S -i」みたいなのを記しています。 パイプ渡しで「git log | ....」とかする場合は自動的にカラーエスケープコードは 無しで渡されます。もしパイプ渡しでもカラーエスケープコードを出力する場合は 「git log --color | ....」とかやれば良い感じです。
で、ls や diff コマンドにもオプション --color で意図的にカラーエスケープ コードの出力を制御できるのですが、イマイチ気が利いてないない感じに思ったりも。

コマンド --color指定無し→tty --color指定無し→pipe --color → tty --color → pipe
git カラーESC有り カラーESC抑止 カラーESC有り カラーESC有り
ls カラーESC抑止 カラーESC抑止 カラーESC有り カラーESC有り
diff カラーESC抑止 カラーESC抑止 カラーESC有り カラーESC抑止

gitの場合 --colorオプションを指定していなければ--color=auto 相当で、 --colorだけの場合は --color=always 相当になります。 この動きの場合、ターミナルがカラー表示できない場合を除いて多くの 場面で邪魔になるような事は無いように思います。 一方 ls の場合、 --color指定しないとttyではカラーにならず、--color 指定するとpipeに変えたときには邪魔になるという事で、ちょっとイマイチな 反応に思います。diffの場合、--colorを付けないとttyでもカラーにならず、 --colorを付けても pipeに繋ぐと抑止されるので--color=alwaysを 指定しなければなりません。pipeに繋いでページャを使って色付きで見ようと思うとなんか 面倒臭く感じました。しかも表示がちょっと怪しい。 それにしても、こんなに色々バリエーションが発生する?

IME制御の続き。あぁ、肝心な8/26に引っかかってた問題の事を忘れてた。

  1. 任意の表示されているバッファでIMEをONにする。
  2. IME-ONの状態でC-s(isearch-forward)を実行しIME-ONで何か文字列を入れる。
  3. サーチに成功しても文字列が見つからなくても IMEが強制的にOFFになる。

どうやらIMEをONにしたままisearch-forwardを実行して、 "日本語文字列を入力すると"(ここ重要)、「 *Minibuf-1*」 という新たなミニバッファが生成されるようです。ところが、このミニバッファは IMEやcurrent-input-methodが OFF状態になっているようで、 このミニバッファがvisibleになった瞬間に? このミニバッファのIMEの状態を 他のバッファと合わせようとした結果?? IMEがOFFになる??? という感じみたいです。 何やら急にvisibleなバッファになるというのがタチが悪く、 関数 w32-ime-sync-state 内で実行している 関数window-listの 実行では得られない(まだウインドウ表示されていないから?)ので、IMEの状態を 同期できない感じになってしまってます。

先日の CPUの使用率が高くなる全てのバッファのcurrent-input-methodを IME状態に 同期させる方法だと一見うまくいくのですが、Emacsを起動して一番最初の isearch-forward の実行だけ IMEが強制的にOFFになる現象が起こります。 2回目以降は新しいミニバッファが存在し続ける為、そのうちIME状態と同期されるという感じ。 えー?面倒臭い。

起動直後に予め「 *Minibuf-1*」というバッファを作っておいて、IMEの状態を合わせておけば 大丈夫っぽい。という訳で、関数 w32-ime-sync-state を

(defun w32-ime-sync-state (window)
  (if w32-ime-buffer-switch-p
      (progn
        (with-current-buffer (window-buffer window)
          (let* ((frame (window-frame window))
                 (ime-state (ime-get-mode)))
            (cond
             ((and (not ime-state)
                   (equal current-input-method "W32-IME"))
              (ime-force-on nil)
              (run-hooks 'w32-ime-on-hook))
             ((and ime-state
                   (not (equal current-input-method "W32-IME")))
              (ime-force-off nil)
              (run-hooks 'w32-ime-off-hook))))))
    (let ((ime-state (ime-get-mode)))
      (let ((minbuf1 (get-buffer-create " *Minibuf-1*")))
        (with-current-buffer minbuf1
          (cond
           ((and (not ime-state)
                 current-input-method)
            (deactivate-input-method))
           ((and ime-state
                 (not current-input-method))
            (activate-input-method "W32-IME")))
          ))
      (dolist (frame (frame-list))
        (dolist (win (window-list frame))
          (with-current-buffer (window-buffer win)
            (cond
             ((and (not ime-state)
                   current-input-method)
              (deactivate-input-method))
             ((and ime-state
                   (not current-input-method))
              (activate-input-method "W32-IME")))))))))

のような感じで「 *Minibuf-1*」だけ特別扱いにしてみたのですが.......ぐむむ、なんか負けた気がする(^^; そもそも「 *Minibuf-1*」がどのタイミング生成されているのかも判らないし、 IME以外で使用する要件があるのかもよく判っていませんし、常に「 *Minibuf-1*」を対象にして良いのかも 判りません。 そして、関数 kill-buffer で削除してもゾンビのように復活する気持ち悪い バッファになってしまっています(^^;とは言え、しかたないのでこれで少し使ってみる事にします。

そういや以前、 「 色素薄子さんが本当に色素薄すぎでAmazonでも掴まえられないというお話」 という話を知ったのですが、特定の要件だけ特別扱いのコードを入れると、 後になって「なんでこれ必要なんだっけ?」って思うし、削るとすぐ変になるのが 判ればいいのですが、特定の条件を満たさないと変にならない場合は地雷化してしまうのが困ります。

2020/08/27

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

東京都コロナ感染者。新規は250人。木曜だしな。

感染拡大するのは感染防止対策ができてないから。 経路不明の割合が相変わらず高いままですが、 これと23区内の飲食店の時短営業延長とは何か関係があるのだろうか?

スウェーデンで集団免疫獲得? スウェーデンの人口は 外務省のページ によると1022万人みたい。人口密度は計算すると 約23人/km^2のようです。 首都はストックホルムで人口は市人口で約96万人、 Wikipedia の市域の面積から人口密度を計算すると約4600人/km^2となるようです。 以前調べた通り、東京都の特別区(いわゆる23区) の人口は約960万人で人口密度は約15000人/km^2でした。 東京都って一国に匹敵するくらい人が居るって事を日本人はあまり認識してないようにも感じます。
さておき、本当に集団免疫なのかなぁ?という気がします。東京都に比べるとぱっと見の人口密度は 低いので、恐らくソーシャルディスタンスの体感距離感が大分違うんじゃ なかろうか?という気も。感染確率は距離に対して指数的に下がるように思いますので、 極単純に、人と人の物理的な距離が普段から遠いんじゃないの?みたいな話なんじゃないのかなぁ? もし集団免疫で言うのなら、アメリカなどは既に獲得してなければ変じゃないか?と思います。

世界マップ でスウェーデンを見てみると、感染者数の累計が8/27時点で86,891人ってなってて、 先ほどの人口の割合では 0.85% の人が感染しているもしくは感染していた という感じみたい。東京都は 8/27時点で 累積感染者数は20,096人のようなので、 東京都の人口1392万人の割合では0.14% の人が感染しているもしくは感染していたという事で、 スウェーデンの方が6倍感染経験者が多いとは言えると思います。 でも、アメリカの人口は 3.282億人で8/27時点で累積感染者数は528万113人になってて、 割合では 約1.61% の人が感染経験者となります。しかしアメリカは集団免疫で感染者が 減ってるという感じには見えません。やっぱりスウェーデンで集団免疫を獲得しているというのは 気のせいじゃなかろうか?と思う訳です。

IME制御の続き。これで行こうかなと思ったのですが、一つ気づいた事があり 確認してみるとイマイチな気がしてきたので思い直したり。
件の制御部をピンポイントで抜粋すると、一旦以下のようなコードにしようと思いました。

    (let ((ime-state (ime-get-mode)))
      (dolist (buf (buffer-list))
        (with-current-buffer buf
          (if ime-state
              (activate-input-method "W32-IME")
            (deactivate-input-method)
            ))))

問題の本質は 関数ime-get-mode で得られるIMEの状態と、 このコードでは見えませんが 変数 current-input-method の値を一致させる ように制御させないと、表示と実際のステートとが食い違ってしまっていて キーを押したのに反応しなかったように見えたりするという事でした。 変数 current-input-method はバッファローカル変数となっている為、 前述コードでは全てのバッファに対して関数ime-get-modeで得られた値 と同じになるように、間接的ではありますが 関数 activate-input-method と 関数 deactivate-input-method で current-input-methodの値を 変更するというコードになっています。
で、何に気づいたかと言うと、本物お仕事で普段使いしているときにもバッファを 数百個のオーダーで開く事があるという所(開き過ぎだろは却下。それは自分でもそう思ってるので(^^;)。 切り替えがもっさりするとイヤかもと思った次第です。で、一応1000個くらいまでは 試してみたのですが、もっさりする所まではいかない模様。しかし、上記コードは 関数 w32-ime-sync-state の中に組み込まれるのですが、 この関数は定期的に実行されていて ほっとくだけでCPUを使っています。 負荷は見える感じではないのですが、IMEの状態をトグルするキーを押しっぱなし にすると、1CPU分を100% 使ってしまえるくらいの負荷にはなるようです。

で、実は以下のようなコードも貰っていました。

    (let ((ime-state (ime-get-mode)))
      (dolist (frame (frame-list))
        (dolist (win (window-list frame))
          (with-current-buffer (window-buffer win)
            (cond
             ((and (not ime-state)
                   current-input-method)
              (deactivate-input-method))
             ((and ime-state
                   (not current-input-method))
              (activate-input-method "W32-IME")))))))

表示されているウインドウに紐づけられるバッファに対してだけ、 関数 ime-get-mode で得られる状態と 変数 current-input-method の 値とが一致しないときに current-input-method を修正するように 関数 activate-input-method と 関数 deactivate-input-method で 更新するというものです。こちらのコードでIMEのトグルキーを押しっぱなし にした所 1CPU分の半分ちょいくらいまでしか負荷がかからなかったので、 やっぱこっちが良い気がしてきました。

元々一つしかない状態をあちこちにコピーで持っているで、 それを如何なる場合も状態一致するように制御した方が副作用が無いと考えた訳ですが、 性能に影響する場合はそうも言ってられないなぁと思い直した感じです。 そもそもあちこちでコピーを持たずに一つのものを どこからでも参照する ようにすれば良いのですが、なんかうまくいきませんでした。 具体的には current-input-method をバッファローカル変数からグローバル 変数に変えれば良いと思った訳ですが 関数 kill-local-variable を使っても グローバル変数になる感じはせず。

2020/08/26

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

東京都コロナ感染者。新規は236人。ちょっとずつ減ってる方向っぽい。

昨日のIME制御の続き。ちょっと引っかかる部分があったのですが、 再度別案をメールでいただき、それを使えばまとまるじゃんと思って まとめてみたり。詳細は明日記す。

2020/08/25

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

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

感染拡大するのは感染防止対策ができてないから。 そういや、冬になったらコロナに加えてインフルエンザが蔓延する事を 心配している人が居るようですが、コロナ感染対策はインフルエンザ感染対策には ならないのだろうか?空気中を漂う時間の違いとかはあるかも知れませんが、 鼻や口から入ってくる事を見ても、人からうつるという点では同じなんじゃ ないの?と思います。 調べてみると こちらのページ を見つけました。コロナ感染防止との違いは全く無いように思えます。 コロナ感染防止ができているという条件下で、インフルエンザと同時に 蔓延する事なんて本当に起こり得るのでしょうか?

Emacsの雑記」 に置いてあるIMEパッチのIMEコントロールを行うw32-ime.elについて、 改善のご提案を頂きました。IMEとIM(current-input-method)の値が 食い違う可能性があるのを解消するというもので、確かに、二つの異なる バッファ(buffer-Aとbuffer-B)をウインドウ分割で表示した状態から

  1. カレントバッファをbuffer-AにしてIME-OFFの状態から開始。
  2. buffer-AでIMEをONにする。
  3. 「C-x o」でbuffer-Bのウインドウに切り替える。
  4. 全バッファ同期のモードではbuffer-BでもIME-ONになっているので日本語入力が可能。
  5. buffer-Bで適当に日本語文字を入れた後で IMEをOFFにすると、一回はOFFに失敗して インジケータの表示が切り替わらず、日本語入力のままとなる。 もう一度 IMEをOFFにしようとすると今度はインジケータの表示が切り替わり、 英数半角入力となる。

一つのバッファでの編集だったり、ウインドウを切り替えるときに IMEをONのまま切り替えずに一旦OFFにすれば多分気づかないと思います。 何かしらの理由で、ウインドウを切り替える際はIMEを一旦OFFにする癖が 付いていたのですが、時々そうしないときがあって、その場合に「ん?押し損ねた?」 と気のせい扱いしていました(^^;
ご提案いただいた方法を試してみたのですが、IME-ONのまま例えば C-s (isearch-forward)で ミニバッファに切り替わり、検索文字を入れたりサーチしたあとミニバッファから戻ると IMEが強制的にOFFになるようで、ちょっと思った感じにならない場合があるようだけどなんでだ? という状況です。 ついでに、マルチフレームの時に表示が同期していないなぁ?というのに今頃気づきました(^^;

2020/08/24

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

東京都コロナ感染者。新規は95人。月曜というのもありそうですが、全国的に少ない気も。

調べ事。何か変なんだけどどう変なのかがまとまらず。

2020/08/23

AM中に起床。

掃除したり洗濯したり。

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

感染拡大するのは感染防止対策ができてないから。 それにしてもまぁまぁ長いことコロナの話はされていますが、 今だに「何言ってんの?」って思うような主張をしている人が居る のは何故なんだ?と思う事があります。なんだかよく判りませんが、 割と専門家と呼ばれる人が思い付きで好き勝手な言っている感じがする為か、 あまり統一した見解が無いように感じる事があります。これだけ専門家と呼ばれる人達が 居るにも関わらず、訳が判らない感じになっているのは何故なんだ?と 思わなくもありません。「専門家」ではなく「専門家っぽい人(専門家ではない)」 なんじゃないか?と思えてきます。
結局、全員が感染防止対策を行うしかないのですが、原因が判明している ダメだった例とかもあまり挙がって来ないし、限られた人数の集団感染が 起こったのに感染源や感染した理由など(例えば「感染予防が不十分だった」は 原因の具体的な説明という観点では情報が無いのと同じと思います)、 肝心な所がさっぱり判らないのばかりです。謝罪は要らないので ちゃんと原因(うつった理由、具体的に何が足りなかったなど)を 追及した結果を公開して欲しいものです。

エアコンの温度設定と実際の温度。 今年の初めにエアコンのリプレース が行われ、0.5℃単位で温度設定ができるタイプになりました。 で、夏になって使ってて気づいたのですが、意外とエアコンの設定温度と温湿計による 室温の差があるようです。冬の時は設定温度に対して、室温は少し高めになって いました。夏も同じ感じで、設定温度に対して室温は少し高めになるようです。 なので、27℃に設定にしているのに暑いと感じる場合がありました。 また、時間帯(エアコンに時計は付いていないので時刻に反応してる訳ではない思いますが) によって設定温度は一定でも室温は変わるようで、例えば午前だと設定温度通りに 冷やしにかかってくるようですが、午後だと設定温度よりも室温は高めの まま維持されていたりするようです。あと、温度は同じでも湿度によって 感じる暑さが変わる為、28℃なのになんか暑いとか、30℃なのにそうでもない とかありました。なので、実際に暑いと感じるか否か、実測した温度と湿度を 見て、エアコンの設定温度を決めるのが良いみたい。

今更ですが熱中症ってなんなんだ?と思ったり。冬にお風呂で長い時間浸かってて 熱中症になったなんて聞いたことありませんし、 サウナで熱中症になるとかも聞いたことがありません。高々30℃そこそこの 温度で熱中症になるものなのだろうか?
こちらのページ によると、「熱中症とは暑い環境で生じる健康障害の総称」なのだそうな。 それぞれの症状が起こるメカニズムは こちらのページ に記されていました。塩分が必要な理由は「熱けいれん」への対策ということみたい。 これを見る限り、温度(と湿度)が高い空間で運動を行って体温が下げられない状況に 陥ると発症するという感じみたいです。
こちらのページに 「暑さ指数(WBGT)」という指数について説明があります。何を思ったのか 単位が「℃」なので勘違いしそうなのですが気温の事ではありません。 また、暑さ指数の計測方法はあるようですが一般人が計るのは無理っぽいので、 ざっくりと気温との相関で見るしかないようです。それによると 「暑さ指数 + 3℃=気温」くらいが目安のようです。ただし、湿度の占める割合が大きい ようで、エアコンの件で記した「28℃なのに暑い」という感覚にかかっている ように思います。さておき、これを見る限り気温が28~31℃で 運動などすれば熱中症になる危険があると読めます。感覚的にも運動すればまぁそうだろうね とは思いますが、夜に寝てて熱中症になるってのは、その部屋の温度や湿度って 一体どういう状況よ?と思わざるを得ません。物理的には体温よりも高い室温 じゃないと放熱が追い付かないって状況にはならないハズですが。

2020/08/22

AM中に起床。

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

感染拡大するのは感染防止対策ができてないから。 職場感染の定義。飲み会してたは職場感染なのか?

野良ビルドしたgslib無しImageMagickを組み込んでEmacsをビルドしてみる事に。 ImageMagickは散らからないように、新規のディレクトリ /usr/local/imagemagick をprefixにして以下のような感じでmake installしてみたり。

$ ./configure --prefix=/usr/local/imagemagick --with-rsvg
$ make -j8
$ make install

実際は後で気づいたのですが、Emacsに組み込んだ時にいわゆるrebase問題(child_info_fork::abort: ...) を食らいました。この為、(これで合っているのかイマイチよく判らないのですが) 以下のような感じでrebaseしてみました。

$ cd /usr/local/imagemagick/bin
$ find . -name '*dll' | rebase -n -s -4 -T -

rebaseのヘルプには 「rebase [-b BaseAddress] [-o Offset] [-48dOsvV] [-T [FileList | -]] Files...」 って出るので、引数にファイルを並べれば良いのかと思った訳ですが、それだと引数が 足りないって怒られます。いちいち-Tでリスト渡しする(-はstdinからの読み込み) 必要があるみたい。

続いてEmacsのビルド。これも後で気づいたのですが、 先ほどインストールしたImageMagickにPATHを通しておきます。/usr/binよりも前にしておきます。

$ PATH="/usr/local/imagemagick/bin:$PATH"

Emacsの configure実行とmakeは以下のような感じ。ImageMagickのincludeパスや ライブラリパスは環境変数で指定する必要があるようです。make にV=1を指定する事で、 ImageMagick向けのパスが変更されている事が一応確認できます。

$ IMAGEMAGICK_LIBS=" -L/usr/local/imagemagick/lib -lMagickWand-7.Q16HDRI -lMagickCore-7.Q16HDRI" IMAGEMAGICK_CFLAGS=" -I/usr/local/imagemagick/include/ImageMagick-7 -fopenmp -DMAGICKCORE_HDRI_ENABLE=1 -DMAGICKCORE_QUANTUM_DEPTH=16" ./configure --prefix=/usr --with-w32 --with-imagemagick
$ make -j8 V=1

先日追加した、JP2をimagemagick-types-inhibitに 追加する設定を.emacsから削除します。

;; (add-to-list 'imagemagick-types-inhibit 'JP2)
;; (imagemagick-register-types)
(add-to-list 'auto-mode-alist '("\\.jp2$" . image-mode))
(setq image-use-external-converter t)

これで、./src/emacs.exe でローカル起動して JP2ファイルを読み込むと ずっこける事無く表示されて、modelineに「Image[imagemagic]」と表示されました。

で、/usr/bin にemacs-w32として置いてみて普段使い起動して、再度JP2ファイル の表示を試みた所、Segfault。あれぇ~~~~~??
lddで調べてみたところ、
$ ldd ./src/emacs.exe | grep cygMagick
        cygMagickCore-7.Q16HDRI-7.dll => /usr/local/imagemagick/bin/cygMagickCore-7.Q16HDRI-7.dll (0x2c770000)
        cygMagickWand-7.Q16HDRI-7.dll => /usr/local/imagemagick/bin/cygMagickWand-7.Q16HDRI-7.dll (0x2c3c0000)

$ ldd /usr/bin/emacs-w32.exe | grep cygMagick
        cygMagickCore-7.Q16HDRI-7.dll => /usr/bin/cygMagickCore-7.Q16HDRI-7.dll (0x64f40000)
        cygMagickWand-7.Q16HDRI-7.dll => /usr/bin/cygMagickWand-7.Q16HDRI-7.dll (0x64a60000)

$ diff -s ./src/emacs.exe /usr/bin/emacs-w32.exe
ファイル ./src/emacs.exe と /usr/bin/emacs-w32.exe は同一です

てな感じ。あぁ、.exeと同じディレクトリにある.dllを優先して読み込むのか.... って、/usr/bin/cygMagick*.dllを入れ替える以外に方法無いじゃん(^^; 仕方なく、元のファイルをリネームして、野良ビルドした /usr/local/imagemagick/bin/*.dllを /usr/bin/. にコピーしたところ、JP2ファイルの表示は できました。でも、再ビルドする前のemacs-w32バイナリでも表示できるようになり、 即ち、ImageMagickのDLLを置き換えれば Emacsの再ビルドは必要無かったという結果に(^^; ちぇっ。

所で、Cygwinパッケージのemacs-w32は--without-imagemagickでビルド されているようで、設定すれば JP2は外部コンバートを使って表示するようです (modelineに Image[image-convert]と表示されている)。 しかし、BMPは何故か外部コンバートが適用されず、バイナリを表示しようと しました。今更ですがこれはこれで何故なんだ?という疑問が湧いてきたりも。

ImageMagickを--with-gslibでビルドするとずっこけるのを調べてみたり。 デバッグにあたってハマったのは、 ./utilities/magick.exe をgdb上で実行 しても止められずなんで?ってなりました。どうやら ./utilities/.libs/magick.exe の方を調べなくてはなりませんでした。Libtoolうぜぇ。 で、gdbで実行してずっこけが起こった所でバックトレースを見てみると。

Thread 1 "magick" received signal SIGSEGV, Segmentation fault.
0x51231ec6 in opj_calloc () from /usr/bin/cyggs-9.dll
(gdb) where
#0  0x51231ec6 in opj_calloc () from /usr/bin/cyggs-9.dll
#1  0x5124cfcd in opj_create_decompress () from /usr/bin/cyggs-9.dll
#2  0x6599411c in ReadJP2Image (image_info=0x800ab380, exception=0x8003a770) at coders/jp2.c:321
#3  0x656d39ca in ReadImage (image_info=0x80096ca8, exception=0x8003a770) at MagickCore/constitute.c:553
#4  0x010d969a in DisplayImageCommand (image_info=0x80096ca8, argc=2, argv=0x80091f98, wand_unused_metadata=0x63a9fc, exception=0x8003a770) at MagickWand/display.c:488
#5  0x0113737c in MagickCommandGenesis (image_info=0x800926e8, command=0x4014a8 <DisplayImageCommand>, argc=2, argv=0x63cc00, metadata=0x0, exception=0x8003a770)
    at MagickWand/mogrify.c:191
#6  0x00401320 in MagickMain (argc=2, argv=0x63cc00) at utilities/magick.c:149
#7  0x0040140c in main (argc=3, argv=0x63cbfc) at utilities/magick.c:180

という感じだったり。何故か途中からcyggs-9.dll内に突入している? 「coders/jp2.c:321」にブレークポイントを設定して止めた後ステップ実行すると、

Thread 1 "magick" hit Breakpoint 1, ReadJP2Image (image_info=0x800ab380, exception=0x8003a770) at coders/jp2.c:321
321           jp2_codec=opj_create_decompress(OPJ_CODEC_JP2);
(gdb) l
316         jp2_codec=opj_create_decompress(OPJ_CODEC_JPT);
317       else
318         if (IsJ2K(sans,4) != MagickFalse)
319           jp2_codec=opj_create_decompress(OPJ_CODEC_J2K);
320         else
321           jp2_codec=opj_create_decompress(OPJ_CODEC_JP2);
322       opj_set_warning_handler(jp2_codec,JP2WarningHandler,exception);
323       opj_set_error_handler(jp2_codec,JP2ErrorHandler,exception);
324       opj_set_default_decoder_parameters(&parameters);
325       option=GetImageOption(image_info,"jp2:reduce-factor");
(gdb) s

Thread 1 "magick" received signal SIGSEGV, Segmentation fault.
0x51231ec6 in opj_calloc () from /usr/bin/cyggs-9.dll

てな感じで即Segfault。なんで?
関数 opj_create_decompress() はOpenJPEGの関数のようなので、バックトレース にあるように/usr/bin/cyggs-9.dllには含まれていないと思われ......本当か? と思い、/usr/bin/cyggs-9.dllをobjdumpしてみた所、

$ objdump -x /usr/bin/cyggs-9.dll | grep opj_create_decompress
        [3768] opj_create_decompress

あれぇ?含まれてるなぁ? そして./MagickCore/.libs/cygMagickCore-7.Q16HDRI-7.dll を見てみると

$ objdump -x ./MagickCore/.libs/cygMagickCore-7.Q16HDRI-7.dll | grep -B11 opj_create_decompress | less

        DLL Name: cyggs-9.dll
        vma:  Hint/Ord Member-Name Bound-To
        49fed4   2512  gsapi_delete_instance
        49feec   2513  gsapi_exit
        49fefc   2515  gsapi_init_with_args
        49ff14   2517  gsapi_new_instance
        49ff2c   2521  gsapi_revision
        49ff40   2523  gsapi_run_string
        49ff54   2533  gsapi_set_stdio
        49ff68   3768  opj_create_compress
        49ff80   3769  opj_create_decompress   ★★★★★★
--
:

ってなってて、確かにcyggs-9.dllの中にある opj_create_decompress()を 実行しそうな雰囲気を醸し出しています。

再度 --with-gslib を付けずにImageMagickをビルドしなおして、objdumpで 見てみると、

$ objdump -x ./MagickCore/.libs/cygMagickCore-7.Q16HDRI-7.dll | grep -B11 opj_create_decompress | less
        vma:  Hint/Ord Member-Name Bound-To
        473774      3  lzma_auto_decoder
        473788     18  lzma_code
        473794     24  lzma_easy_encoder
        4737a8     26  lzma_end

 00470118       00470878 00000000 00000000 0047670c 00471674

        DLL Name: cygopenjp2-7.dll
        vma:  Hint/Ord Member-Name Bound-To
        4737b4     37  opj_create_compress
        4737cc     38  opj_create_decompress   ★★★★★★
--
:

てな感じで、cygopenjp2-7.dllの中にあるopj_create_decompress()を 実行する感じになってました。なんとなく理由は判ってきたのですが、 これ どうすれっての。
個人的には共有ライブラリはこういう事があるので面倒臭いです。 動かないのに比べれば実行ファイルが大きいのは些細な事だと思うのですよね.....

--with-gslib を付けなくてもPostScriptファイルを表示する事はできるっぽい。 Webを検索してみると 「ImageMagick 'convert' program broken, error in cyggs-9.dll x86_64/release/ghostscript/libgs9/libgs9-9.27-1.tar.xz」と いうスレッドがあって、似た話が挙がっていたようです。 updateが変になってるみたいな流れから最終的にGraphicsMagickを 使えばイケたよって話になって、ImageMagickが壊れてる事については放置状態に なっているようです。

2020/08/21

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

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

感染拡大するのは感染防止対策ができてないから。 東京都の感染拡大はピークを過ぎたという言い方。なぜ自然現象感覚なのかは 判りませんが、下がっているのであれば今レベルの行動様式を続ければいずれゼロになる という事。結局、再拡大させない為には新規感染者数が減っても今と同じかそれ以上の防止対策の継続が必要。 あと、未だに我慢感覚を持っているのであればそろそろ慣れるべきに思います。 我慢とか言っているうちはまだ習慣化できていないと考えられます。 新しい生活様式とはそれが普通になる事。我慢感覚でやってると続けられないと思います。

ImageMagicをビルドしてみたり。OpenJPEGのdevelopパッケージを入れて ビルドしてみたところ、一応 JPEG2000も表示できたり。Cygwinパッケージの ImageMagickが壊れているという事か?
パッケージと同じサポートとなるように、入っていなかったdevelopパッケージを 入れてビルドしてみたり。一応 helpメッセージ上のサポートは同じになったり。 で、JPEG2000ファイルを表示しようとしたらコアダンプしたり。なんか再現する模様。 ライブラリを追加する事で発症するバグという事か?
ひとまず簡単に付け/外しができるconfigureオプションを操作してみた所、 網にかかったので、組み合わせを確認してみたり。結果は以下のような感じに。

--with-rsvg --with-gslib : Result
   none         none     : OK
   yes          none     : OK
   none         yes      : Aborted(core dump)
   yes          yes      : Aborted(core dump)

単純に --with-gslib に連動している模様。

2020/08/20

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

東京都コロナ感染者。新規は339人。いつもの木曜日。

マスクやアルコール消毒製品の転売禁止の規制解除へ (参考記事)。 んー?当面規制したままで良くね?解除する事に何か意味があるのだろうか?

2020/08/19

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

東京都コロナ感染者。新規は186人。まだ横ばいか。

感染拡大するのは感染防止対策ができてないから。 接触通知アプリの運用。保健所からの登録番号発行ができていないとか。 未だにバグもあるみたいだし。 以前も書きましたが、結局、システム の部品として信用できないのは人という事か。

2020/08/18

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

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

感染拡大するのは感染防止対策ができてないから。 クラスター事例集 という文書の存在を知ったり。最近の事例ではない気もしますが、 基本は変わらないかも知れません。むしろ最近のは無いのだろうか?という気も。 ただ、「三密を避ける」を「外なら大丈夫」と変換するのは誤った認識なのですが、 正しく認知されていないような気も。

接触通知アプリ。このような記事 を知ったのですが、え?接触した日付は判るのに時間は判らないの?と思ったり。 これでは疑わしい範囲が全然絞れないと思います。なんか気が利いていないなぁ?感 しかしない。今の感染経路不明の多さから考えても、心当たりが多すぎて特定できない という理由なのだろうと想像すると、折角接点が判る唯一の手掛かりかも知れないのに この時間解像度じゃ全然ダメだ。

先日jasperを入れたので野良ビルドしたGraphicsMagickでもJPEG2000フォーマットが 読めるバイナリをビルドできたり。でも、GraphicsMagickをCygwinパッケージインストール してしまったので、特に用事も無くなったり(^^; そういや今更気づいたのですが、 OpenJPEGではなくて jasperを使っているんだなとは思ったりも。 以前、OpenJPEGを使ってみたときは、 なんでもかんでもメモリ上のバッファで処理しようとしててイマイチな感じ だったのですが、今もあまり変わらない感じなのだろうか?

2020/08/17

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

東京都コロナ感染者。新規は161人。単なるお盆休み進行のような。

感染拡大するのは感染防止対策ができてないから。 沖縄の感染拡大の要因って結局なんだったんだ?とは思ったりも。 勿論入口は県外からの感染者だとは思いますが、ある意味閉鎖されたエリアなので、 感染自体はエリアの中に閉じて起こったと考えられます。 結果的に拡大しているって事は感染防止が足りないとも言える訳ですが、 どのような感じの対策を行っていたのか? 全体的に脇が甘かったのか? どういう所が甘かったのか?というのが気になります。例えば、岩手県民が沖縄県民の 感染対策の対応を見てどのような感想を持つか?は興味がある所です。

先日のGraphicsMagickですが、ソースコードからビルドしようと作業用ディレクトリを 掘っていると既に前バージョンの為に掘ってたり(^^; ビルドしたファイルの日付は 2013/4/11だったので大分前の話なのですが、全くその存在を覚えていない所を 見ると、ビルドはできたが何かしらの理由で使う事無く忘れてしまったという事か? さておきjasperを入れてなかったのでJPEG2000フォーマットを読めるバイナリになっておらず、 結局Cygwinパッケージインストールしてみる事に。そしてImageMagickも7にしてみて Emacsをビルドする所からやり直し。
まずImageMagick 7でのEmacsビルドは問題なさげ。でも、JPEG2000のファイルを 読み込むとSegfaultするのは変わらず。displayコマンドでもSegfaultするので ImageMagickの問題は7でも解決していなさげ。で、外部のコンバータを使って 表示したいのですが、元々組み込みのImageMagickで表示できる体の設定になっていた ので、ImageMagickを使わないようにする設定と、外部コマンドでの変換を有効にする設定が 必要なようです。結果、次のようなのを.emacsに追加しました。

(add-to-list 'imagemagick-types-inhibit 'JP2)
(imagemagick-register-types)
(add-to-list 'auto-mode-alist '("\\.jp2$" . image-mode))
(setq image-use-external-converter t)

外部コマンドにはGraphicsMagickのgmコマンドの他にいくつか使用可能な ようです(lisp/image/image-converter.el 内の変数 image-converter--converters 参照)。 ただ、ウインドウのサイズが変わると動的にサイズも変更されるのですが、 それらが全て外部コマンドで行われる為か、少し突っかかる感じがあるようです。

2020/08/16

AM中に起床。

掃除したり。

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

感染拡大するのは感染防止対策ができてないから。 そういや島根県のクラスター。寮だからって事でなんとなく納得されている感が あるのですが、ちゃんと調べた結果なのだろうか?と思ったりも。 そもそも二人部屋で80人以上に広がるとは思えないのですが。また、風呂が共同とか 言ってしまうと、温泉施設やプールだってダメだろって事になりかねないと思えます。 なんか適当な憶測でうやむやにしている感じがしてなりません。

感染防止徹底宣言ステッカーを掲示している店でのクラスター発生についても、 感染対策はできていたという保健所の見解があるようですがほんまかいな? と思ったりも。結果として従業員が全員感染していた訳ですから、 「感染対策は行っていた」では感染した原因の説明にはなっていないと思います。 恐らく原因がうやむやなので、これまでの事例を元に「どうせやってなかったんでしょ?」 って勝手に想像されてしまうのだろうと思われます。

Emacs27では clってパッケージが非奨励になってて、 使用しているELISPがあると起動時にメッセージが出ます。 cl-libを使うのが最近の流儀らしいのですが、そもそもclに依存しているのが どのELISPなのか判らないなぁ?と思っていたのですが、次のようなのを スクラッチバッファとかで実行すれば調べられる模様。

(progn
  (require 'loadhist)
  (file-dependents (feature-file 'cl)))

おおかたは /usr/share/emacs/site-lisp にインストールしたELISPなので あまり多くは無い感じなのですが、どうやって直すものなのかよく判らんなぁ? と思ったり。
ひとまず一つだけ試しに「(require 'cl)」を「(require 'cl-lib)」に してバイトコンパイルしてみたところ、特にエラーも無く読み込みも でき、依存リストからも消えたたのでこれで良いのか?という感じに。 でも、それだけだとダメなのがありました。

  (defstruct ...) → (cl-defstruct ...)
  (case ...) → (cl-case ...)
  (incf ...) → (cl-incf ...)
  (count ...) → (cl-count ...)
  (copy-list ...) → (cl-copy-list ...)
  (loop ...) → (cl-loop ...)      #書き換えが必要なのかよく判らなかったけど数が少なかったので一応
  (return ...) → (cl-return ...)  #同上

全部書き換えを行った後、起動時の警告メッセージは出なくなり、 依存検査のELISPを実行すると 「(error "cl is not a currently loaded feature")」ってエラー するようになります(^^; ひとまずクリーンになったのでこれで様子見。 ただ、実際に書き換えを行ってみた訳ですが、バイトコンパイル時には何もエラーせず、 実行してみたら怒られる場合がありました。あと、何をどう書き換えれば良いのかが 判りません。例えば defsubst は cl-defsubst に書き換えが必要なのか否かとか。
以前にも書きましたが、 インタープリタのプログラム言語でコード書き換えが必要になるような 文法やライブラリの変更って本当に必要なんですかね?

d-modeが壊れていたのを直したり。

--- d-mode.el.orig      2013-12-18 23:29:36.000000000 +0900
+++ d-mode.el   2020-08-16 13:35:59.218072400 +0900
@@ -145,7 +145,7 @@

 (c-lang-defconst c-block-prefix-disallowed-chars
   ;; Allow ':' for inherit list starters.
-  d (set-difference (c-lang-const c-block-prefix-disallowed-chars)
+  d (cl-set-difference (c-lang-const c-block-prefix-disallowed-chars)
                                 '(?:)))

 ;;----------------------------------------------------------------------------

使ってみたら動かないの辛い。でも新しいのを入れれば良いだけだったかも。

何気にJPEG2000フォーマットのファイルをEmacs 27.1で表示してみたらSegfaultしたり。 どうやらImageMagickのライブラリ内でずっこけているようで、displayコマンド (ImageMagickのX-Windowのビュア)でも同様にSegfaultする模様。 そういや画像ファイルを外部のコンバータを使って表示するのってどうやってるんだ? というのを調べていたらlisp/image/image-converter.el の中でgmってコマンドを 使うコードがあるのを知ったり。 GraphicsMagick ってのがあるらしい。Cygwinのパッケージにあるもの?と思って見てみたら どうやら存在している模様。と思ったところで、CygwinのImageMagickに 7.0.xが来てたり。うーん、アップデートすると--with-imagemagickでビルドしてる Emacsが変な事になりそうな予感。

2020/08/15

昼過ぎ起床。寝すぎ。

東京都コロナ感染者。新規は385人。減らんなぁ。

感染拡大するのは感染防止対策ができてないから。 家庭内での感染の割合が増えているといいますが、 以前述べた通り、家庭内感染は二次感染だと思います。 そして外からの持ち込みが減らない限り家庭内感染は減らないと考えられます。 割合で見てしまうと相対的に会食や会社内感染が減っているように見えるのが 良くないのですが、絶対数で減っていないのであればそこが原因と考えられます。 それよりも、数的には感染経路不明の方をなんとかする必要があるかも知れませんが。

ホテルが抗体検査キット無償配布って記事。 抗原検査じゃなくて抗体検査だよね? 意味無いと思います。てか単なるお金の無駄遣い。

Emacsでアクセサリを表示してみたくなった」 内のアクセサリを一部更新しました(bijin-tokei, emneko, sysmon)。 先日のマルチフレームで表示が変になる事があるのを 修正したつもりです。マルチフレームで使う事が無ければ多分関係ありません。 ご参考まで。

Emacs27になったので svg-clock が使えるようになったのですが、拙作のアクセサリアプリと同様にマルチフレーム で表示サイズが変になる事があったのでパッチしてみました。ついでにカーソルの 点滅が邪魔だったので、カーソル表示も無しにしています。ご参考まで。

--- svg-clock.el.orig   2020-01-23 01:26:51.000000000 +0900
+++ /usr/share/emacs/site-lisp/svg-clock.el     2020-08-13 21:20:11.565809300 +0900
@@ -157,7 +157,7 @@
 (defun svg-clock--window-size ()
   "Return maximal size for displaying the svg clock."
   (save-excursion
-    (let  ((clock-win (get-buffer-window "*clock*")))
+    (let  ((clock-win (get-buffer-window "*clock*" t)))
       (if clock-win
           (let* ((coords (window-inside-pixel-edges clock-win))
                  (width (- (nth 2 coords) (nth 0 coords)))
@@ -196,7 +196,7 @@
   (when clock-handle
     (let* ((marker (svg-clock-handle-marker clock-handle))
            (buf (marker-buffer marker))
-           (win (get-buffer-window buf))
+           (win (get-buffer-window buf t))
            (ovl (svg-clock-handle-overlay clock-handle)))
       (if (and (buffer-live-p buf)
                (not (eq (overlay-start ovl)
@@ -259,6 +259,7 @@
   (interactive)
   (switch-to-buffer (get-buffer-create "*clock*"))
   (let ((inhibit-read-only t))
+    (setq cursor-type nil)
     (buffer-disable-undo)
     (erase-buffer)
     (svg-clock-insert size foreground background nil no-seconds no-face)

2020/08/14

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

東京都コロナ感染者。新規は389人。減らんなぁ。

感染拡大するのは感染防止対策ができてないから。 「感染防止徹底宣言ステッカー」を掲示している店でクラスター感染が発生した という事で、ステッカーを掲示している店が本当に対策ができているかを チェックする事になったらしい。
認証と言っても自己申請なので、実際には従っていないという可能性もあり得るのですが、 ある仕組みを入れればちゃんと対応せざるを得ない状況にできるんじゃないか?と思ったりも。
まず、ステッカーを掲示する意味があるか否かについて。組み合わせとして考えると、

  1. 感染予防対策をしていなくて、ステッカーも掲示していない。
  2. 感染予防対策をしているが、ステッカーを掲示していない。
  3. 感染予防対策をしていないのに、ステッカーを掲示している。
  4. 感染予防対策をしていて、ステッカーも掲示している。

の4通りがあります。 以前述べた通り、ステッカーを掲示しないメリットは無いと考えられます。 何故なら、実際に感染予防をしてるか否かに関係無く、ステッカーを掲示していない時点で 掲示しているよりも感染可能性の確率が高いと思われる(判断されてしまう)からです。 だとすると、感染予防対策をしているのであれば、意思表示としてステッカーを掲示 すれば良い訳で、わざわざ掲示しない事でお客の心象を悪くする必要は無いと考えられます。 問題は、3.をどう考えるかですが、ここである仕組みを入れます。 以前知った通り、登録店舗は地図登録される (東京都感染拡大防止徹底宣言 登録店舗マップ) ようなのですが、もし感染が発生した場合は、地図上の登録を抹消するのではなく 「感染が発生した事を示す印を見えるように付ける」事にします。 こうすることで社会的に認知できるようになります。その後どうなるかは推して知るべし。
つまり、ステッカーを掲示しないとダメだし、ステッカーを掲示する以上は 感染予防を徹底しないとやはりダメになるという訳です。 これでステッカーだけ掲示して実際の予防はしていないという状況は 自然に無くなると考えられます。 もし、正式なルートを通らずに、ステッカー画像だけを取得して掲示していた としましょう。これも地図登録されていない為、地図を確認されれば一発で見抜かれます。 恐らくチートが必ずバレるようになっていれば、 わざわざチートをしてまで感染予防対策をしないって輩は自然淘汰されると考えられます。 という訳で、印を付ける仕組みさえ入れれば 上手くハメる事のできる やり方になると考えられます。

8/15付けになってますが、 「Emacsの雑記」を更新しました。 27.1向けのIMEパッチを置いてみました。ご参考まで。

2020/08/13

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

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

感染拡大するのは感染防止対策ができてないから。 それにしても感染経路不明がずっと高い状態にあるように思うのですが、 何故なんだ?と思います。本当に判らないなんて事が本当にあるのだろうか? 運用に色々問題があるようですが、もし接触確認アプリの通知が来たとして、 検査したら陽性でしたという結果の場合、それでも経路不明の主張を通せるだろうか? せめて、接触のあった日時と場所は判らないとイマイチ情報不足なのかも知れません。 逆にこれらの情報があれば経路不明は激減するんじゃなかろうか?

大規模抗体検査。できるようになり、やったとして、何か意味あるのかなぁ?

Emacs 27.1の自前IMEパッチ版をテストしていて、たまたまマルチフレーム を使ってみたところ、アクセサリアプリの表示が変になる事があったり。 調べてみたところ、get-buffer-window というバッファから表示されている ウインドウを取得する関数が、フォーカスしていないフレームに表示されている バッファからウインドウサイズを取得するとnilが返っているのが直接の 原因でした。デフォルトではフォーカスされているフレームの中からしか 探さないようで、オプションパラメータを指定して全てのフレームの中 から探すようにする必要がありました。 という訳で、いくつか該当するアクセサリアプリがあったので直してみたり。 それこそ3年半くらい気づく事無く使っていたのですが(^^;

2020/08/12

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

東京都コロナ感染者。新規は222人。減らんなぁ。

感染拡大するのは感染防止対策ができてないから。 前からですが感染原因について言及された情報がちっともありません。 特に最近は家庭内感染の話は出るものの、防御しきるのは難しい以上の話はされませんし。 感染防止の技を習得したから少し静かになっているのか、変わり映えのしない話ばかりで 飽きているのか。

CygwinパッケージにEmacs-27.1が来ていたり。早速インストールしてみました。 一応オリジナルを確認してみたのですが、色々直っていないのはそのままでした。 という訳で置き換え。最初、.exeファイルだけを置き換えたのですが、.pdmp ファイルがロードできんという旨のメッセージが出て立ち上がらず。 どうやら一緒にビルドされる.pdmpをいうファイルも .exeと同じ場所に拡張子 以外の名前部分を揃えて置く必要があるみたい。多分、将来新しいのが出た時に .pdmpファイル置き換え忘れを何回かやる可能性はあるかも(^^;

TikTokが利用者情報を追跡していた?話。本当ならば風向きが思いっきり変わってしまう気が。 人類が滅亡するまで引き合いに出される事になる事例かも知れません。

2020/08/11

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

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

感染拡大するのは感染防止対策ができてないから。 ややこしいのでそもそも熱中症にならないように気を付けるべきのように思います。

Emacs27.1がリリースされた模様。RC2が出たので まだ先だろうと油断してました(^^;
ビルドしてみたり。ぱっと見はこれまでと変わりなく。 etc/HISTORYには「GNU Emacs 27.1 (2020-08-10) emacs-27.1」と記されてます。 Cygwinのが来たら入れ替えてしばらくテストしたのちIMEパッチを公開してみる予定。

そういやEmacsのアクセサリアプリのウインドウを開いたまま、作業中のウインドウ操作の 影響が及ばないように拙作の window-plus を使用しているのですが、Emacs27では「*Completions*」バッファのウインドウを開いた後に ウインドウを閉じるときに余計に削除しているようで、例えばディレクトリを潜る為に補完を繰り返していると ウインドウが1つずつ消えていきます。補完し終われば元に戻るので途中の見た目だけ の問題なのですが、なんかイマイチなのでどうにかならんもんかと思ったり。 display-buffer-functionを使って使用するウインドウを自分で決めている訳ですが、 上位関数であるdisplay-bufferに渡される引数の一部しか伝わって来ない為、 特殊なアクションに対する振る舞いを制御できませんでした。 そんな訳で display-buffer を後で再定義し直して display-buffer-function にもっと多くの引数を指定できるようにする方向で 考えてみたり。あまり綺麗ではありませんが、ひとまず所望の動作ができる ようになり、補完を繰り返す度にウインドウが消えていく現象には対処できたかも。

2020/08/10

AM中に起床。

掃除したり。

東京都コロナ感染者。新規は197人。まぁ月曜なので。

感染拡大するのは感染防止対策ができてないから。 島根県のクラスター。寮だからとかあんま関係無さそうな気が。 新宿の劇場クラスターよりも多いくらいだから、何かしら広い部屋に密状態で生徒を 集めて床に座らせて、感染源となる教師が立って歩き回りながら話でもしたんじゃないの? という気が。一気に80人以上の感染となると、普通の事をやってて起こるとは思えません。

以前、AVレシーバが半文鎮化してしまった のですが、そろそろ修理どうしよう?という事でひとまず繋がっているHDMIケーブル などを外してみたり。映すだけならTVとディスプレイとでギリHDMI入力は足りたので 当面これで使う感じ。 保護回路が働いた原因はイマイチ不明なのですが、スピーカー接続がショートしていると 保護回路が働くらしいので、ヘッドセットのTiamatとそれを繋ぐ変換ケーブルで ショートしていないかを確認してみたのですが特に問題無さげ。 ただ、Tiamatの初回電源投入に失敗する事があるのだけがやっぱりちょっと気になる。 Tiamat側で回路的にショートしていると判らんと思ったのですが特に問題は無さげ。 保護回路の働く条件はいくつかあるようなのですが、3回連続でなければ大丈夫そう。 でも、3回なんて原因を切り分けているうちに使い切ってしまう可能性が高いので、 保護できているうちは制限無しかAC抜き差しで累積カウントリセットされるのが 妥当だと思うのは個人的な意見。その後、TiamatをPCのオンボードサウンド出力に繋いで 確認してみたところ、センタースピーカーに対応する音のボリュームがやたら小さくなっていたり。 同プラグのウーハーは大丈夫っぽいので、センターだけがショート気味に見えている (結果として音が小さくなる)という感じか?

2020/08/09

AM中に起床。

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

感染拡大するのは感染防止対策ができてないから。 島根県で新規に91人が感染?(参考グラフサイト) んんん? 学校でのクラスターらしいけど いくらなんでも一気に増えすぎじゃね?

2020/08/08

昼頃起床。寝すぎ。

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

感染拡大するのは感染防止対策ができてないから。 そういえばこのニュース記事。 ここまで限定されていれば逆にどこから入ったか判るんじゃないか? という気がします。この例の場合、平均的な感染から発症までの期間から逆算すると この日のどこかというのは絞れると思います。むしろ、小さい(と思われる)穴が何だったのか? 是非突き止めて欲しいです。TANE自身も含めて多くの人が気づいていない 感染防止の穴の可能性も考えられるので。

そういや 5Gってもうサービス始まってるのだっけ? 映像固まるとか音声途切れるとか リモートあるあるは無くなるのだろうか?

2020/08/07

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

東京都コロナ感染者。新規は462人。減らないなぁ。

感染拡大するのは感染防止対策ができてないから。 結局感染経路不明の人ってその後も不明のままなのだろうか? 経路不明が 50% と聞くと、感染する人は半分がボンヤリしてて、 半分があからさまな状況でシラを切れないだけという風に見えてしかたがありません。 今の御時世、これだけ感染防止の為にあれこれ言われていて 「確証は無いがあの時かも知れない」というのも無いのは流石に嘘だろ? と思う訳です。 もし、「三密を避けて、マスクもして、手洗いも消毒もしてて、会食も無く、 ずっとテレワークで、一人暮らしで、全く思い当たる事が無い」 と言う場合でも、本人が思っているより人との距離感近くないか?とか、 マスクをズラす事も無いのか?とか、 マスクをズラす前に手は洗ったり消毒しているのか?とか、 手洗いする前に目鼻を手でこすったりしてないか?とか、 手の洗い方は十分か?とか、 本当に誰とも対面で話をしていないか?とか、 外で弄ったスマホを拭かずに触っていないか?とか、 疑いどころは色々あると思います。 もし「全て大丈夫です」と答えた場合、「嘘ついてますね」って のが判るくらいの質問事項が用意されているのだろうか?

2020/08/06

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

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

感染拡大するのは感染防止対策ができてないから。 なかなかフィードバックがかからないような気もします。 感染防止対策ができていれば拡大はしないハズですが、 これだけ感染例があるのに対策できていないさ加減や特に注意すべき点などは 結局分らずじまいという気も。 大人数での飲み会をしないとか、結局、一次感染理由はそういうのばかりなのだろうか? それにしても「人が移動する事によって感染が拡大する」は今や正確ではないように思います。 「感染防止対策をせずに」の前置きをすべき。

そういや、しゃべる時にマスクをズラしている人って結構見る気がするのですが、 見る度に「逆だろ」って思ってます。

Emacs 27.1。何やらemacs-27.1-rc2 って タグを打ってる模様。 まだ出ないのか?

2020/08/05

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

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

感染拡大するのは感染防止対策ができてないから。 それにしても感染経路が判らないってのがいまだに半数を超えてるってのは、 ここでは毎度書いてますが何故なんだ?という感じです。

シミュレーションで感染防止対策の効果を検証する話。感染防止対策と感染率の関係を どうやって出しているのかがよく判らんなぁ?と思ったり。例えば手洗いをすると感染率が 70% になるとしましょう。何故 50% でも 90% でも 0% でもなく 70% なんだ? というのを説明できるのだろうか?

うがい薬。ウイルスが口の中に入っている時点で手遅れだろと思ったりも。

そういや、劇場クラスターのその後。結局、出演者が感染源だったのだっけ? そうだとして、感染したのはどういう人達だったのだろう?最前列で フェイスシールドをしてなかった人は漏れなく感染したのだろうか? とか、半径どれくらいまで感染したのか?とか、何か無いのだろうか?

2020/08/04

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

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

感染拡大するのは感染防止対策ができてないから。 「感染防止徹底宣言ステッカー」を取得する気は無いというサービス事業者。 取得しない事で得られるメリットは1ミリも無いように思えるのですが。 むしろ取得していないと「感染防止する気が無い」と思われてしまうので、 今や良い印象は持たれないと思われます。 因みに登録店舗を地図表示できる模様 (東京都感染拡大防止徹底宣言 登録店舗マップ)。

2020/08/03

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

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

感染拡大するのは感染防止対策ができてないから。 それにしても具体的にどういうシーンで感染していたかの情報がやっぱり出てこない気がします。 例えば、会食で感染の場合でも、人数は? どれくらいの時間で? 店の感染防止対策はどうなってたの? グループに感染者が居たの? どんな感染対策してたの?...... 全然判りません。 フィードバック無しで 気を付けてください はそろそろ無しにできないのだろうか?

2020/08/02

AM中に起床。

掃除したり洗濯したり。

ワイドナショーでの古市憲寿のコロナに対する認識は まともだなぁと思ったり。 TVを見ていて 接触確認アプリのインストールを勧めているのは彼だけだとは思ったりも (先週だかの「バンキシャ」とか、先日の「中居正広のニュースな会」とか 各局で言ってるように思います)。 他の話題に対しては意見が振り切れすぎている場合もあるので全てに同意できる訳ではありませんが(^^;

以前、リオオリンピックの時にEmacsの 世界時計表示(display-time-world)にリオを追加しました。そのとき BRT(Brasilia Time)というタイムゾーンだという事を知ったのですが、 その後、いつの頃からか、「BRT」という表示ではなく「-03」という表示が行われる ようになっていました。なんだろうな?と思いつつ調べる事は無かったのですが、 調べてみたところ、どうやら tz database 上「UTC-03:00」という意味で-03という 表示を行うようになったらしい。

$ zdump.exe  Brazil/East Asia/Tokyo
Brazil/East  Sun Aug  2 04:26:03 2020 -03
Asia/Tokyo   Sun Aug  2 16:26:03 2020 JST

ほぅ.....。

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

感染拡大するのは感染防止対策ができてないから。 感染を抑えるには人の動きを止めるか、うつる/うつすのを防護するか、その両方かなのですが、 どうも防護の方がいまだに軽く見られているのではないかと感じます。 実際のところ「できる事をやりましょう」的な軽い感じではなく、 「経済を止めずに感染拡大を抑えるには感染防止行動を徹底する以外に方法は無い」 というレベルなのに、感染拡大しているのはそれが理解されずに うつさない/うつされない行動ができていない人が居るっていうのが今の 結果になっていると考えます。病床が...とか、重症化率が....とか、 そもそも感染しなければ心配する話ではないのですから、 感染防止行動の重要性をもっと強く言うべきに思います。

そういや、院内感染も起きているようですが、医師へのインタビューで 「完全に防ぐことはできない」はどういうニュアンスのつもりで言っているのだろう? と思います。これまでに院内感染の原因とされたものへの対策は実施が不可能なものでは無い ものばかりに思えます。「理論上、可能性をゼロには近づける事はできるがゼロにはならない」 って事が言いたいだけなら いちいち言わなくても構いません。 その部分をカットされて「完全に防ぐことはできない」だけにされると信用を失うだけです。 もし「徹底するだけだが できてない人が居る」的な状況にあって 逃げ口上として言っているのであれば、徹底できるように そもそもの体制を見直すべきに思います。

2020/08/01

AM中に起床。

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

感染拡大するのは感染防止対策ができてないから。 沖縄の那覇市松山って所で飲食関係者やその家族のPCR検査を行ったみたいですが、 長蛇の行列ができていたとか。予め体制を考えれからやれば?という気がしなくもありません。 当日検査ですぐに結果が陰性だと判ったとしても、その場でうつってしまっては台無しになる ように思えました。この感じだと結果が陽性だったとしても、その場で即隔離状態にするような 事をやっていない可能性があるのでは?と勘ぐったりも。個人的には、こういうのも 「無駄に検査リソースを使う」って言ってます。

Emacsのgitログを見てると、 「etc/HISTORY: Add Emacs 27.1 release date.」 ってタイトルのコミットが入ってて、差分を見ると8月6日にリリースされる予定っぽい。

そんな訳で、emacs-27.1-rc1を ビルドしてみたり。27.0.91向けのIMEパッチやその他壊れているのを直してみたものは、 一部リジェクトされるパッチはあったものの一通り当たりビルドもできてみたり。 あと数日で正式にリリースされるので、Cygwinのがリリースされた後で 直ってなさそうな点を確認してから採用するパッチを決める事にしよう。 そういやAnthyがエラーしたり.elがバイトコンパイルできない件 (参考)って誰か直してくれるだろうか。


TOP PREV