テレワーク。早くも無く遅くも無く終了。
東京都コロナ感染者。新規は 218人。
しばらく Cygwin64 のパッケージをアップデートしていなかったのでアップデートしてみたり。
ここ数か月間にCygwin32の方で新たに入れたり野良ビルドしたものなどを揃えてみてるのですが、
BPGのエンコーダーが何故かビルドできない😓。リンクに失敗します。
コンパイルオプション -fno-asynchronous-unwind-tables が付いていたのを外せばリンクに失敗せずにビルド成功。
一応エンコードはできていそう。なんだ?🤔
テレワーク。気持ち早めに終了。
東京都コロナ感染者。新規は 267人。
さいとう・たかを氏が亡くなられたらしい。84歳。ゴルゴ13の連載は継続されるらしい。
プロダクション制の強味を感じます。
以前 「漫勉」で出てた時は78歳でしたが、
過去の日記をgrepしてみると
2006年2月5日の日記で記したものがありました。
この時で69歳だった訳で。
ところでWikipedia
で知ったのですが「リイド社」って さいとうプロダクションの出版部門が分社化されたものなのだそうな。ほぅ....
Emacsのgitログを眺めていたら、Cygwin向けのELISPのネイティブコンパイル対応が入っているようだったり。
これだけで対応できるの?という変更だったのでコンパイラ対応次第なのか?と思ったり。
で、CygwinのMailingListアーカイブを見てみると、emacs-28.0.50のテスト版の
アナウンスが出てました。
32bitではforkのエラーが発生するので今の所 64bit版だけのテストみたい。むぅ🤔。
でも 32bitでの問題対応も含めてのテストみたいなのでそこはひとまず様子見。
さておき、手順だけを見る限り autorebaseはテスト版を使う必要があるみたいですが、
コンパイラは gcc-core のパッケージで大丈夫っぽい。...もしかしてlibgccjitって要らないの?🤔。
テスト版のautorebaseは .elnがリベース対象になっているような事が記されている所を見ると、
ダイナミックモジュールのような仕組みで切り替わるという事なのかしら?
因みに、emacs-28のブランチは まだできていないみたい。
本日臨時休業。接種から22時間では回復しませんでした😓。結局 今日は1日ぐったり。
本物のインフルエンザ(コロナはインフルじゃないけどインフルしかかかった経験が無いので)などと違うのは咳やくしゃみは出ない所だけで、
本当にインフルエンザにかかったかのような体の反応(悪寒がする、暑いのに汗が出ない、など)になりました。
生ワクチンと違って 模擬なのによくできたワクチンだと感心しました。
東京都コロナ感染者。新規は 248人。
解除されたことでどう行動して良いかわからない。わからないなら今まで通り変えなければ良いと思います。
わからないのに何も考えずにデタラメに変えるからおかしなことになるのは既に実績があると思います。
やっぱ8月の「感染したら死ぬかもしれない」という状況が減少作用としては強かったのではないかと考えます。
医療体制の拡充は予防医療ではありません。いくら拡充したところでそれを上回れば結局足りなくなるのは目に見えているので
「感染したら死ぬかもしれない」(==予防に務める) という状況は変えなくて良いと思います。
ここでは何度も記していますが、感染予防の手を緩めて良いのは 新規感染者が出なくなった時だけ。
即ち緩めて良いタイミングは今まで一度も無い。
抗原検査キットの薬局販売。結局精度は低いようで、陽性だった時以外の結果は信用できないと言っているように聞こえます。
ほぼほぼ意味は無いように思えますが、「陰性だからOK」みたいな事を言う人は居るのだろうなと思います。
デタラメな使い方をすると 科学的に全く根拠の無いサプリメントや健康器具と同じ感じになってしまいそう。
素人に使わせるもんじゃないように思えます。3000円ぽっちで得られる安全など無い。
むしろここまで意味があるとは思えない物を承認するとか、利権が関係しているんじゃないかと勘ぐってしまいます。
Inkscapeの1.1.1が出ている模様(アナウンスページ)。
先日、バグ修正リリースを刻んで欲しいなぁと書いた所だったので偶然にしてはタイムリー過ぎる😃。
本日休業。AM中にワクチン接種2回目を実施。
東京都コロナ感染者。新規は 154人。月曜だしな。
全面解除するつもりのようですが大丈夫か? 解除した途端に全力で動こうとする気満々の
酒類を提供する飲食店の感染対策意識は大丈夫か?と思わなくもありません。
「完璧な感染対策を行って迎える」って前置きは無しで、商売の話だけをしているように見えるのですが、
結局ダメなのはそういう所だったでしょ?というのが個人的な感想。
感染対策についての前置きはしているにもかかわらず マスコミが切り張りしているのであれば、
そこをちゃんと言わないと、また槍玉にあげられる事になると想像します。
夜になったら熱っぽくなってきた。
AM中に起床。
掃除したり。
東京都コロナ感染者。新規は 299人。
そういや「豆しば」のCMを見る事があるのですが、今頃になって あれって何のCMなのだろう?と思ったり。
豆しばのWikipediaによると
「豆しば」というキャラクターのブランディングCMらしい。
「公益財団法人 日本豆類協会」との接点は無いっぽい。
Inkscapeの1.0が出て以降、スナップショットビルドやナイトリービルドといったものが置かれなくなったように思ったり。
1.1で直して欲しい描画のバグとかあるのですが、
Windows用のInkscapeをソースから野良ビルドするのは敷居がかなり高そうなのでやろうという気になれません😓。
1.0から1.1の期間は1年あったのですが、もう少しマイナーなバグ修正リリースを刻んで欲しいなぁという気はします。
もう少しInkscapeの公式ページをよく見てみたら、
こちらのページに開発版のバイナリが置いてあるようです
(現時点では1.2の開発版)。
7zアーカイブなので任意のディレクトリに展開して bin/inkscape.exe を実行すれば良いっぽい。
定規で長さや角度を計る事ができるのですがフォントのサイズが小さい且つサイズ指定をしても変わらないバグは
修正されていました。1.2の開発版なので1.1とUIが少し違っていますが、グラデーションフィルの編集がかなり分かりやすく
なっているように思いました。当面1.2の開発版を使ってみる事にしよう。
AM中に起床。
東京都コロナ感染者。新規は 382人。減速しているな。
Google Chromeをコマンドライン実行する事で指定したファイルやURLを PDF保存する方法があるのを知ったり。
検索するといくつか方法が記されたページが出てくるのですが、微妙に情報が古いようで
こちら
のChromeのコマンドラインオプション定義などからCygwinのbash上からは次のようにするのが良いっぽい感じでした。
$ /cygdrive/c/Program\ Files\ \(x86\)/Google/Chrome/Application/chrome.exe --headless --print-to-pdf="D:\フルパス\foo.pdf" --print-to-pdf-no-header "file:///D:\フルパス\foo.txt"
本日休業。しかし朝から検査で病院に。1.5時間程度で終了。
東京都コロナ感染者。新規は 235人。祝日の翌日だしな。
録画消化してぐうたら過ごしたり。
AM中に起床。ゴミ捨て。
東京都コロナ感染者。新規は 531人。
SVGをPDFに変換するツールって意外と無いっぽい というのを知ったり。
テレワーク。早めに終了。
東京都コロナ感染者。新規は 537人。やっぱ減速している気が。
そういや今まで全く結びついていなかったのですが、SVGのテキスト描画でカラー絵文字ってレンダリング
できるんだっけ?と思ったり。 Emacsで絵文字を含む文字列を描画するSVGを作成して「C-c C-c」で描画してみると
イケました🙂。ほぅ....
因みにInkscape(Ver1.0, 1.1とも)では絵文字はモノクロになります。
且つ絵文字だけだと少し見切れてレンダリングされるのでイマイチ使えない感じになってます。
絵文字と一緒に空白文字を含む文字列にすれば見切れなくなります(ただし表示拡大率が大きいとやっぱりダメ)が、
そういうものなんだっけ?感はあります。
テレワーク。気持ち早めに終了。
東京都コロナ感染者。新規は 253人。ハッピーマンデー明けの火曜だからなぁ。
今週の連休から数えて2週間後の状況によるとは思いますが完全解除は無いだろ。
人出に強い相関無しに新規感染者数が減っている要因は、慎重に動いている人達が多いからだと考えられそうです。
しかし、観光地は慎重さを欠いた理由で出ているケースが見受けられるようで、このタイプは予防対応が弱くなる
ように思えます(数値的な根拠は無い。しかしそう仮定しないとこれまでの拡大/減少の変化と合わない)。
リバウンド傾向が見られた場合は恐らく弱い予防対応で動いた人達が要因になっているものと想像できると考えます。
ちょろり調べ事。
AM中に起床。
掃除したり洗濯したり。
東京都コロナ感染者。新規は 302人。月曜で祝日なのでノイズでしょう。
手持ちのTGAローダーを555RGB対応してみたり。確認するのに そもそもどうやって元データを作れば良いんだ?
という感じだったのですが、ImageMagickのconvertコマンドで以下のような感じでJPEGなどから変換できるっぽい。
$ convert foo.jpg -depth 5 -compress none rgb555col.tga #RLE圧縮無し $ convert foo.jpg -depth 5 -compress rle rgb555col_rle.tga #RLE圧縮有り
AM中に起床。
東京都コロナ感染者。新規は 565人。
PS5に来る予定の「Horizon Forbidden West」がプレオーダーになってるみたい。
来年の2月18日発売になってたのでもうすぐかも。と思ったらPS4にも来る事になってるな?
gimp-2.10.28が来ていたり。3.0.0は年末辺りに来るのかなぁ?と勝手に予想。
昼前起床。
東京都コロナ感染者。新規は 862人。減速気味か。まだ多いんだけど。
そういや、screenコマンドの最新バージョンは4.8.0 (2020年2月5日のリリース)ですが、
このバージョンではtruecolorは使えません。その後、どうなってるのかなぁと思って少し調べてみるも、
あまり変化は無い感じ。次のリリースがいつになるかは判りませんが、
以前 gitリポジトリのソースをCygwinでビルドできなかったので
4.8.0より後のバージョンでtruecolorがサポートされてパッケージ対応されるのを期待したい所です。
テレワーク。早めに終了。
東京都コロナ感染者。新規は 782人。
image-modeの件。lockを入れてみたり試してみたのですが、結局、ウインドウ状態が変化した時の
run-with-idle-timer を使った遅延リサイズ表示をやめるだけで大丈夫そうでした😓。
以下のように 変更を加えた 関数image--window-state-change を .emacsで再定義してみました。
(require 'image-mode) (defun image--window-state-change (window) (image-fit-to-window window) ; (when (numberp image-auto-resize-on-window-resize) ; (run-with-idle-timer image-auto-resize-on-window-resize nil ; #'image-fit-to-window window)) )
テレワーク。気持ち早めに終了。
東京都コロナ感染者。新規は 831人。
image-modeの件。実験コードを入れながら調べている所ですが多分こうなんじゃないか?という推測。
window-state-change-functionsというウインドウの状態が変わったら反応するフックがあって、
このフックで 関数 image--window-state-change が実行されるようになってます。
この 関数 image--window-state-change を前方に辿ってみると 関数 image-toggle-display-image が実行される
ようになってました。
という点を踏まえて考えると、初回のimage-toggle-display-image実行でリモートファイルの読み込みが完了していないのに
ウインドウサイズの変更により image--window-state-change からのimage-toggle-display-image実行
が行われて、結果 image-toggle-display-imageが実行される事により生じる TRAMP読み込みが輻輳しているんじゃないか?と推測しています。
まだもう少し調べてみるとして、多重実行にならないようにmutex lockっぽい仕組みを入れる必要があるのかも。
具体的にどうやるのが良いのかは判りませんけど。
テレワーク。気持ち早めに終了。
東京都コロナ感染者。新規は 1052人。
リモート画像ファイルを自動スケーリング有効にしてimage-modeで開いた時にsshがつっかかる件。少し仕組みを調べてみたり。
変数 image-auto-resize-on-window-resize にリサイズ結果を反映するまでの時間を指定できるようになっていて、
これを増やせば秒単位でリサイズ表示を遅らせられるようです。でも、10秒とか遅らせてもやっぱりつっかかるようで、
どうもリサイズ動作そのものが突っかかりの契機になっていないのでは?と思ったりも。
表示できた状態で image-transform-fit-to-widthやimage-transform-fit-to-heightを実行してもうまく
リサイズできる所を見ると、画像の操作以前のバッファ読み込み部分で事故が起こっているのかなぁ?🤔
テレワーク。気持ち早めに終了。
東京都コロナ感染者。新規は 1004人。
image-dired。先日の実験的な書き換えを本番向けに書き換えて、scratchバッファで実験したらうまくいったので、
.emacsに記して関数を上書きするようにしてみたのですが、何故か特定の関数だけが上手く書き換えられなかったり。
ミニバッファに出力されたエラーメッセージから察するに、process sentinelがうまく定義できていない?模様。
.emacsで記した関数をそのままscratchバッファにコピペしてC-jで定義した後実行してみると、
意図通りに再定義できてエラー無く実行できます。なんで?🤔
しかたないので lisp/image-dired.el を適当なディレクトリにコピーして書き換えた後、.emacsでは書き換えた
image-dired.elをloadで直指定読み込みで対応。うーむ、イマイチ😖。
先日の「オリジナルサイズ表示(C-u RET)ができないファイルフォーマットに対応」も含めた全部入りは
こちら(image-dired.el.210914a.xz)。.emacs設定は以下のような感じにしてみています。
(load "~/.emacs.d/workaround/image-dired.el") (setq image-dired-cmd-create-thumbnail-program "/usr/local/bin/wrapped_convert") (setq image-dired-cmd-create-thumbnail-options '("-auto-orient" "%f[0]" "-size" "%wx%h" "-resize" "%wx%h>" "-background" "white" "-gravity" "center" "-extent" "%wx%h" "-strip" "jpeg:%t")) (setq image-dired-cmd-create-temp-image-program "/usr/local/bin/wrapped_convert") (setq image-dired-cmd-create-temp-image-options '("-auto-orient" "%f[0]" "-size" "%wx%h" "-resize" "%wx%h>" "-strip" "jpeg:%t")) (setq image-dired-queue-active-limit 6)
テレワーク。気持ち早めに終了。
東京都コロナ感染者。新規は 611人。月曜だけど他の県も少なすぎる気が。ノイズか。
image-dired。リモートファイルのサムネイルを生成する際に、何かしらTRAMPのバッファが更新されているのですが、
どうやら 関数 file-attributes と file-attribute-modification-time を使って元ファイルの更新時刻を取得するコードがあって、
その時にリモートファイルだとTRAMPバッファが更新されるみたい。
一見、ELISPコードなので途中で割り込まれたりする事は無いんじゃないの?と思ったのですが、
よくよく辿ると process sentinel と呼ばれるプロセスの状態変化を検出するハンドラ(シグナルハンドラっぽいイメージと解釈しています)
から実行される事があって、それって通常の実行ルートと衝突する事は無いのか?という疑問が湧いてきたり。
試しに 関数file-attributesを実行しないようなコードに変更してみたところ、
並列実行してもつっかからなくなりました。ふむ......🤔
昼前起床
掃除したり洗濯したり。
東京都コロナ感染者。新規は 1067人。
Emacsでリモート画像ファイル表示。
そういやと思い、sshとscpを別セッションと見なせば、scpで開いた方でimage-diredしている間に
sshでテキストファイル読み込みなどを行う事で、ぶつからずにイケるんじゃね?と思ったり。
wrapped_convertを「/scp:...」形式も解釈するようにして試したところ、一瞬イケるような
気がしたのですがダメな場合があり完全とはいかないようです。むぅ🤔
image-diredでリモートファイルのBPGとJXRファイルが読み込めないなぁ?というのが判明。
そういやBPGとJXRは素のconvertコマンドが標準入力を受け付けないからwrapped_convertで対応した流れが
あったのをすっかり忘れてました😅。
例えば「wrapped_convert '/ssh:user@host:/pathes/file.jxr' png:-」は
「ssh user@host 'cat pathes/file.jxr' | convert jxr:- png:-」となってしまうので素のconvertコマンド的にダメです。
という訳で、再帰的に
「ssh user@host 'cat pathes/file.jxr' | wrapped_convert jxr:- png:-」となるようにする事で、
更に展開されると
「ssh user@host 'cat pathes/file.jxr' | cat > tmpfile.jxr ; convert tmpfile.jxr png:-」
となる感じに考えてみました。イケたようです🙂。という訳で放流してみます
(wrapped_convert_210912a.tar.xz)。
image-diredのサムネイル選択から画像表示する場合と、image-modeで表示する場合とはそれぞれ
全く違うモードで表示されるのですが、image-modeの方は組み込みImageMagickを使うか否かや
リモートファイルか否かで画像表示できるか否かを切り替えているっぽいのです。ただ、条件が複雑でよく判りません🥺
image-modeでデータを表示できる/できない条件を少し見てみたり。
すごくざっくり言うと、「ファイル名渡し」と「バッファに読み込まれたデータ渡し」の二つの方法があり、
それぞれの方法に対してデコード手段があるか無いかで決まるようです。
ファイル名渡しはローカルファイルの場合だけで、それ以外(リモートファイル、アーカイブ内ファイル、....)はデータ渡しっぽい。
デコード手段は「組み込み専用画像ライブラリ(JPEG,PNG,GIF,TIFFなど)」か「組み込みImageMagickライブラリ」か
「外部コンバーター」かの 3択で、ファイル渡しでは優先順にいずれかでデコードされ、データ渡しでは
「組み込み専用画像ライブラリ」か「組み込みImageMagickライブラリ」の2択で表示されるようです。
この為、ローカルファイルならば「外部コンバーター」で表示できていたものが、
リモートファイルだと(外部コンバーターが使えないので)表示できないという感じになるようです。
また「組み込みImageMagickライブラリ」無しでビルドした場合はデコード手段の選択肢が1つ減るという事になります。
専用画像LIB | ImageMagickLIB | 外部converter | |
---|---|---|---|
ファイル名渡し | 表示可 | 表示可 | 表示可 |
データ渡し | 表示可 | 表示可 (ただしJXR,BPGは不可) |
表示不可 |
AM中に起床。
東京都コロナ感染者。新規は 1273人。ちょっと減速してる?
CygwinのEmacsからリモート画像ファイルを表示する件。話が二つになってしまってて、どっちがどっちの話か
こんがらがってきたので整理。
;;リモートファイルをimage-modeで開くとハングする件のワークアラウンド (defun image-mode () "Major mode for image files. You can use \\<image-mode-map>\\[image-toggle-display] or \\<image-mode-map>\\[image-toggle-hex-display] to toggle between display as an image and display as text or hex. Key bindings: \\{image-mode-map}" (interactive) (unless (display-images-p) (error "Display does not support images")) (major-mode-suspend) (setq major-mode 'image-mode) (setq image-transform-resize (if (file-remote-p buffer-file-name) ;リモートファイルの場合は自動サイズ調節は常にoff nil image-auto-resize)) (if (not (image-get-display-property)) (progn (when (condition-case err (progn (image-toggle-display-image) t) (unknown-image-type (image-mode-as-text) (funcall (if (called-interactively-p 'any) 'error 'message) "Unknown image type; consider switching `image-use-external-converter' on") nil) (error (image-mode-as-text) (funcall (if (called-interactively-p 'any) 'error 'message) "Cannot display image: %s" (cdr err)) nil)) ;; If attempt to display the image fails. (if (not (image-get-display-property)) (error "Invalid image")) (image-mode--setup-mode))) ;; Set next vars when image is already displayed but local ;; variables were cleared by kill-all-local-variables (setq cursor-type nil truncate-lines t image-type (plist-get (cdr (image-get-display-property)) :type)) (image-mode--setup-mode)))
(load "image-dired") (setq image-dired-cmd-create-thumbnail-program "/usr/local/bin/wrapped_convert") (setq image-dired-cmd-create-thumbnail-options '("-auto-orient" "%f[0]" "-size" "%wx%h" "-resize" "%wx%h>" "-background" "white" "-gravity" "center" "-extent" "%wx%h" "-strip" "jpeg:%t")) (setq image-dired-cmd-create-temp-image-program "/usr/local/bin/wrapped_convert") (setq image-dired-cmd-create-temp-image-options '("-auto-orient" "%f[0]" "-size" "%wx%h" "-resize" "%wx%h>" "-strip" "jpeg:%t")) (setq my-image-dired-queue-active-limit 6) ;リモート画像ファイルを image-diredしたらハングするのに対応 (defun image-dired-create-thumb (original-file thumbnail-file) "Add a job for generating thumbnail to `image-dired-queue'." (if (and (eq image-dired-queue-active-jobs 0) (not image-dired-queue)) (setq image-dired-queue-active-limit my-image-dired-queue-active-limit)) (if (file-remote-p original-file) (setq image-dired-queue-active-limit 1)) (setq image-dired-queue (nconc image-dired-queue (list (list original-file thumbnail-file)))) ; (run-at-time 0 nil #'image-dired-thumb-queue-run) (image-dired-thumb-queue-run) ) ;オリジナルサイズ表示(C-u RET)ができないファイルフォーマットに対応 (setq image-dired-cmd-create-temp-origimage-options '("-auto-orient" "%f[0]" "-strip" "png:%t")) (defun image-dired-display-image (file &optional original-size) "Display image FILE in image buffer. Use this when you want to display the image, semi sized, in a new window. The image is sized to fit the display window (using a temporary file, don't worry). Because of this, it will not be as quick as opening it directly, but on most modern systems it should feel snappy enough. If optional argument ORIGINAL-SIZE is non-nil, display image in its original size." (image-dired--check-executable-exists 'image-dired-cmd-create-temp-image-program) (let ((new-file (expand-file-name image-dired-temp-image-file)) (window (image-dired-display-window)) (image-type 'jpeg)) (setq file (expand-file-name file)) (if (not original-size) (let* ((spec (list (cons ?p image-dired-cmd-create-temp-image-program) (cons ?w (image-dired-display-window-width window)) (cons ?h (image-dired-display-window-height window)) (cons ?f file) (cons ?t new-file))) (ret (apply #'call-process image-dired-cmd-create-temp-image-program nil nil nil (mapcar (lambda (arg) (format-spec arg spec)) image-dired-cmd-create-temp-image-options)))) (when (not (zerop ret)) (error "Could not resize image"))) (let* ((spec (list (cons ?p image-dired-cmd-create-temp-image-program) (cons ?f file) (cons ?t new-file))) (ret (apply #'call-process image-dired-cmd-create-temp-image-program nil nil nil (mapcar (lambda (arg) (format-spec arg spec)) image-dired-cmd-create-temp-origimage-options)))) (when (not (zerop ret)) (error "Could not convert image"))) (setq image-type 'png)) (with-current-buffer (image-dired-create-display-image-buffer) (let ((inhibit-read-only t)) (erase-buffer) (clear-image-cache) (image-dired-insert-image image-dired-temp-image-file image-type 0 0) (goto-char (point-min)) (set-window-vscroll window 0) (set-window-hscroll window 0) (image-dired-update-property 'original-file-name file)))))
テレワーク。早めに終了。
東京都コロナ感染者。新規は 1242人。
リモートマシンの画像ファイルの表示を行うとハング状態に陥る件。
そういやと思い、VMware上のFedoraのEmacsでどうなるかを試してみたり。
ちょっと様子は違うのですが、ssh経由で読み込み&画像表示した状態でウインドウのサイズを変えて
画像のリスケールが行われようとするとハング状態に陥るようです。
sshがハングしている感じではなくてEmacsが暴走している状態になるようなので、
ちょっと様子は違うのですがリモートの画像ファイル表示と自動リサイズとの組み合わせに何かしら問題があるという感じみたい。
(後日更新:やっぱりsshが突っかかってました。結果的にCygwinと同じ状況と思われます)
CygwinのEmacsと同じく image-auto-resize を nilにすれば問題無いようです。
もう少しパターンを絞れないかと観察してみたり。
テレワーク。早めに終了。
東京都コロナ感染者。新規は 1675人。行動制限緩和なんてまだ当面先の話だろという気も。
突如発覚した リモートマシンの画像ファイルの表示を行うとハング状態に陥る件。
どうやら子プロセス実行したsshが(?)突っかかっていたようです。
sshをkillするとどうにか復帰する所を見ると、パイプに関連した問題なのかも知れません。
sshのバージョンをいくつか前のに戻したり、cygwin1.dllをちょっと前(スナップショットを使っていた
のでバージョンを戻すほどの大きなものではありませんが)のに戻したりしてみたのですが
変化無し。見た目の動きなどからこうなってんじゃないか?を想像してみたり。
テレワーク。早めに終了。
東京都コロナ感染者。新規は 1834人。
image-diredでハングの件。ひとまず何故これで回避できるのか判らないけどうまくいくという方法で何度かテスト。
一度もハングする事が無かったので普段使いするのには耐えられそう。因みに、以下のような感じに。
$ diff -u src/process.c.orig src/process.c --- src/process.c.orig 2021-03-25 23:59:35.645843500 +0900 +++ src/process.c 2021-09-08 22:40:49.753608100 +0900 @@ -7262,6 +7262,17 @@ { Lisp_Object tail, proc; +#if defined CYGWIN + /* This code block is a workaround for asynchronous processes hangs and Segfault in Cygwin. + It happened when I generated a lot of thumbnail images with image dired. + You can work around it by making some system calls, but I don't know why. */ + { + int fd = open("/dev/null", O_APPEND); + if (fd != -1) + close(fd); + } +#endif + /* Find the process that signaled us, and record its status. */ /* The process can have been deleted by Fdelete_process, or haveえー? って思いますよね。自分もそう思います😓
テレワーク。早めに終了。
東京都コロナ感染者。新規は 1629人。
image-diredでハングの件。非同期の子プロセスの終了は シグナルを使ってハンドリングしているようです。
様子を見る為に src/process.c の中にある 関数 handle_child_signal() にデバッグプリントを仕込んでみた
所、ハング状態が再現しなくなってしまったような?🤔。
理由はともかく、もしかするとワークアラウンドの手段にはなるかも?もう少し色々試してみよう。
そういえば、縦長だったり横長だったりの画像のサムネイルを並べると、幅が揃わなくて見た目が良くない
なぁ?と思い、サムネイル生成のconvertコマンドオプションを以下のようにしてみたり。
(setq image-dired-cmd-create-thumbnail-options '("-auto-orient" "%f[0]" "-size" "%wx%h" "-resize" "%wx%h>" "-background" "white" "-gravity" "center" "-extent" "%wx%h" "-strip" "jpeg:%t"))
テレワーク。早めに終了。
東京都コロナ感染者。新規は 968人。月曜だしな。てか全国的に下がり過ぎてないか?なんだろう?
image-diredでハングの件。ELISPの実行自体はシングルスレッドで動いているので暴走すればCPUを
使いっぱなしになったりメモリが激しくリークしたりという動きになるだろうと推測します。
今のところハング状態に陥るとプロセスCPU使用率は0になる所から鑑みますに、
プロセスの終了を監視するような場面でシステムコール的なもので問い合わせた際にあるハズのものが
無くてハング状態に陥るとかそういう感じなのかな?と想像してみました。
デバッガでブレークポイントを設定するとイマイチ再現しない感じに。むぅ🤔
昼前起床。
掃除したり洗濯したり。
東京都コロナ感染者。新規は 1853人。人出が増えているというのが今後どう見えるか。
パラリンピック閉会。大きな案件が片付いたという感じでしょうか。
これまでの感じで見るとコロナ感染拡大は夏休み進行の影響が一番大きく、オリパラによる影響は
(ゼロに近いくらいに)極めて小さかったのではないかと思われます。
結局オリパラは原則無観客開催だった事を鑑みると、人流が多くなっていたり県外での感染が拡大する理由を
オリパラに関連付けるのはかなり無理があると考えられます。沿道観戦で密になっている話とかはありましたが、
一貫して観戦自粛は伝えられていました。結局「自分が出歩く理由として都合の良いようにオリパラを利用している」
のがインタビューで理由を答えていた人達の考え方だったように思えます。
この人達はオリパラじゃなくても 何かしら自分に都合の良いような理由を付けるだろうと考えられます。
これをもってオリパラの影響と言うのも無理しかないと考えられます。
今日見たニュース番組で最終日のマラソンを沿道観戦している理由の中に「別に犯罪ではない」というような
答えをしている人が居たのですが、直ぐ横で自粛は呼びかけているしオリンピック前からお願いされ続けているにも
関わらず、そういう答えをするというのは、わざとやっているのだろうし それこそが「自分に都合の良い解釈」
なのだと思います。
image-dired。子プロセス起動前後にsleepを入れてみたり、子プロセスで起動するスクリプト内で
sleepさせてみたり、関数 run-with-idle-timer で操作負荷が低い場合に子プロセス起動されるようにしてみたりと、
色々試してみたのですがやっぱりハング状態に陥る現象が再現します。ワークアラウンド的な方法でどうにか回避できないか?
と思ったのですが無理かも🥺。
AM中に起床。
東京都コロナ感染者。新規は 2362人。
Emacsのimage-dired。非同期にサムネイル画像を生成するプロセスをキューで数を制限しながら
実行する仕組みってのはふんわり判ったような気も。ELISPのコードの範囲では突っかかりどころは
無いように思えるのですが、先日のように並列数を1にしてもダメな場合がある所を見ると
Cygwin側で何か事故が起こっているような気がしなくもありません。
因みに、emacs-X11でもダメそうなので、ますますCygwin側で何か起こっている疑惑が増しています。
少しだけgitでimage-diredの歴史探索を行ってみたり。14年ほど前(2007年4月22日)に thumbnailsというELISPから
image-diredに名前が変わって以降、今に至るようです。非同期サムネイル生成の機構が入ったのは
今から5年ほど前(2016年12月19日)で、キューで並列数を制限しながらサムネイル生成を非同期プロセス実行
する仕組みはこの時から変わっていないようです。最近大きな変更を加えたような事も無さそうなので、
どれだけの人が使っているかという話はあるものの、ある程度の実績はあるのかなぁ?とは思ったりもします。
image-dired実行時のSegfaultを調べるのにターミナルでgdbを起動してみたのですが、
いつの間にかソースコードのキーワードなどがカラーでハイライト表示されるようになってたり。ほぅ....
そういやと思い、cygwin1.dllのスナップショットを試してみたり。今日時点で最新は20210819版ですが、
入れ替えてみるもやっぱりハング状態に陥る現象は再現しました。むぅ🤔
テレワーク。気持ち早めに終了。
東京都コロナ感染者。新規は 2539人。
Emacsのimage-diredでJPEGファイルが千切れてるようだったりハング状態に陥る件。
サムネイルを非同期で生成する際にデフォルトでは並列数2で実行されているのを1にして試してみてもやっぱりダメ。
ただ、なんかデッドロックしてるんじゃないか?という漠然とした予感。
子プロセスの生成方法がイマイチよく判らない感じなので仕組みを理解しないと原因は判らないのかも。
テレワーク。気持ち早めに終了。
東京都コロナ感染者。新規は 3099人。
Emacsのimage-dired。「Premature end of JPEG file」というメッセージが出たり、ハング状態に陥るのを少し
調べてみたり。でも原因は判らず。
ハング状態に陥ったまましばらくすると
「42980475 [sig] emacs-w32 14932 get_proc_lock: Couldn't acquire sync_proc_subproc for(4,0), last 5, Win32 error 0」
といったCygwinのメッセージが出る事があるようで、原因はEmacsの方じゃない可能性があるかも。
因みにこのメッセージでWeb検索すると
過去の日記が出てくるあたり、マイナーな事象だろうと思ったりも😓。
lessコマンドの -S オプションを使うと横長のテキスト行を折り返されずに見る事ができます。
カーソルキーの左右で水平スクロールできるハズなのが何故かできなくなっているのに気づいたり。
あれぇ?いつからだ?🤔。screenコマンド上だったので、一旦デタッチしてターミナル直のコマンドラインで
試すとOKだったり。もう一度 screenをアタッチしたら横スクロールできるようになりました😅。
ターミナルが変になってたのかも知れません。それにしてもこんなピンポイントで変になるか?とは思ったりも。
テレワーク。気持ち早めに終了。
東京都コロナ感染者。新規は 3168人。隣接県も含めてまだ多いな。
Emacsのimage-dired。普段は全く使わないのですが、ふと TGAファイルの表示って大丈夫だろうか?と思って
実行してみました。結果、ものの見事に上下反転された表示になりました😓。
どうやらimage-diredは画像ファイルのデコードを全て外部コマンドに委ねているようで、
ImageMagickのconvertコマンドを使用していました。という訳でこれまでの知見を総動員して
以下のような設定を.emacsに追加してみました。
;;----------------------------------------------------------------- ;; image-dired 設定 ;;----------------------------------------------------------------- (setq image-dired-cmd-create-thumbnail-program "/usr/local/bin/wrapped_convert") (setq image-dired-cmd-create-thumbnail-options '("-auto-orient" "%f[0]" "-size" "%wx%h" "-resize" "%wx%h>" "-strip" "jpeg:%t")) (setq image-dired-cmd-create-temp-image-program "/usr/local/bin/wrapped_convert") (setq image-dired-cmd-create-temp-image-options '("-auto-orient" "%f[0]" "-size" "%wx%h" "-resize" "%wx%h>" "-strip" "jpeg:%t"))