AM中に起床。
先日、AVIFデータを 組み込みimagemagickで eww表示するには 変数image-type-header-regexps に
対応するヘッダ一致条件を追加すれば良い事が判ったのですが、もしやと思って image-cropで画像切り出し
を行なってみたら、うまく切り出せる事が判りました。
随分前に 組み込みimagemagick で表示した画像は
画像切り出しに失敗する というのは判っていて、image-cropを使いたければその画像フォーマットは
外部コンバータで対応し、その代わりに 組み込みimagemagickでの表示はあきらめるって事にしていました。
image-cropの処理も 切り出し元の画像はファイルではなくて データ渡しで外部コマンドで切り出し
処理を行なう為、データそのものを見て画像フォーマットを判定する必要があります。
組み込みimagemagickでは 知らない画像フォーマット判定となっていた為、外部コマンドに元データを
渡せずに失敗するという事だったのですが、 変数image-type-header-regexps に追加する事で
知っているデータ判定された結果、組み込みimagemagick表示でも image-cropでの画像切り出しが
うまくいくようになったという流れのようです。
JPEG2000フォーマットも 組み込みimagemagickで表示できるけど image-cropはできなかったのですが、
ハマりどころ(後述)はあったものの、ヘッダー一致条件を追加する事でimage-cropできるようになりました。
ただ、どうしてもこれができないのが TGAフォーマットで、マジックナンバーが無いので
以前 色々試してみたけど諦めました。
JPEG2000フォーマットのヘッダ判定の追加。結論から言うと うまく判定できた書き方は以下。
(add-to-list 'image-type-header-regexps '("\\`....jP \xd\xa.\xa...\x14\x66typjp2" . imagemagick)) ;jpeg2000
テレワーク。早くもなく遅くもなく終了。
Emacsで AVIF画像の表示の最小限設定。
ewwでの表示ができない原因が判らず。気づくとコードを調べている感じです。
先日 コードを読むのをあきらめたのですが、
逃げられないという事か🥺。
ewwでHTMLファイルをレンダリングする際、「~/.emacs.d/url/cache/${USERNAME}/file」
というディレクトリの下にキャッシュファイルが生成されています。
先日調べた時は、「Content-type: xxxxx」をどこで付加しているか
判らんとなったのですが、どうやらキャッシュファイルを読み込むコード調べていた為、
付加している箇所には到達できていませんでした。
で、そのキャッシュファイルですが、AVIFファイルの分も生成自体はされている事が判りました。
つまり、表示するものはあるが何故か表示されていないという状況のようです。
因みに同じHTMLでJPEGファイルも表示しているのですが、そちらは表示できています。
という訳で、表示できるか否かをどこかで判断していると思われるのですが、どこでやっているのかが
判らないという 振り出しに戻っている状況。ぐぅ。
どうやら create-image のtypeをnilにした時に画像フォーマットの自動判定を試みるようですが、
最小限設定だとその判定に失敗している模様。という所から手繰ってやっと判った気が。
最小限設定では image-use-external-converter が nilのままだったので、
外部コンバーターを使わない設定にしていました。
組み込みimagemagickが使えるビルドなので、image-modeなどは組み込みimagemagickで
表示しています。てっきりewwも組み込みimagemagickで表示されているのかと思いきや、
eww(というかshr.el)はそうではないという事でした。
ここでキャッシュファイルの話が関係してきます。ewwでは画像ファイルのフォーマットを
URLの文字列からファイルの拡張子で判定しているのではなく、
キャッシュファイルの内容を見て判断しています。キャッシュファイル名はUUIDっぽい
32桁の16進数なので、このファイルを見ても拡張子が無いのでキャッシュファイル名から
画像フォーマットを判定する事はできません。キャッシュファイルの中には
「Content-type: image/avif」の文字列が含まれているので一応 avif画像である事は判断できます。
しかし、この image/avif は結局画像フォーマットの判定には使用されていなくて、
関数create-image はデータの内容を見てフォーマット判定するようです。
ここで、組み込みimagemagickでは知っているフォーマットと判断できず、
これがewwで AVIFフォーマットを表示できない直接の原因でした。で、外部コンバータを
有効にすると自動判定に成功するので画像が表示できるという顛末の模様。
普段使いの .emacs で表示できていたのは外部コンバーターを介して表示されていたからでした。
組み込みimagemagickでもデータを見て自動判定できるんじゃないの?と思わなくもありませんが、
Emacs本体では 変数image-type-header-regexps に画像データのヘッダとtypeを
関連付けるリストを持っていて、画像データの中身を見て画像フォーマットを判定するようです。
ここで知らない判定されてしまうと ビルトイン機構で表示できない画像という事になるようです。
つまり、組み込みimagemagickで自動判定的な事はしていません。
そこで image-type-header-regexps に
「(add-to-list 'image-type-header-regexps '("\\`....ftypavif" . imagemagick))」
てな感じで 追加してやれば、ewwで AVIFを組み込みimagemagicで表示できるようになりました。
表示できなかった原因と対応方法は判ったのですが、単純に面倒くせぇ....。
Emacs自身が画像データのヘッダを知らないとダメなのも 突っかかりどころに
なる事を考えると、デフォルトで --without-imagemagick にする理由は分からなくもありません。
何か判らないデータでも とりあえず外部コンバータに丸投げして画像が得られる事が判れば
OKな訳ですから話は簡単になる気がします。
テレワーク。早くもなく遅くもなく終了。
Emacsで AVIF画像の表示の最小限設定。まだewwでの表示ができてませんが、
なんか色々散らかっているっぽい。
(add-to-list 'auto-mode-alist '("\\.avif\\'" . image-mode))でファイル名の拡張子とimage-modeを紐づける事で表示される。 次に記すorg-modeでの 変数image-file-name-extensions に設定しただけではダメでした。
(add-to-list 'image-file-name-extensions "avif") (setq org-image-actual-width nil)で 変数image-file-name-extensions にファイル拡張子文字列を追加する事と、 変数org-image-actual-width を nilにする必要がありました。 後者のorg-image-actual-width がデフォルトの tだと何故か画像自体が表示されません。 なんかこの挙動ってバグってないか?🤔
テレワーク。早くもなく遅くもなく終了。
Emacsで AVIF画像の表示。-Qで立ち上げたところから表示できるんだっけ?と思った訳ですが
当然できず。何を足せば表示できるのかを確認してみているのですが、なぜか最小設定がよく判らず。
あれぇ? もう少し記すと、
「(add-to-list 'auto-mode-alist '("\\.avif\\'" . image-mode))」
でimage-modeで開くファイル拡張子を設定すれば AVIFファイルをimage-modeで開くのは問題無くできるのですが、
org-modeのインライン表示 や eww では表示できるようにはなりません。
org-modeは jp2や heicなども何故かインライン表示できなくなったりと、
普段使いの.emacs設定だとできている事なのですが どの設定が効いているのかよく判りません。なんだこりゃ?🤔
設定の順番とかあるんだっけ?
テレワーク。早くもなく遅くもなく終了。
Google検索。何やら「連続スクロール」なるものがあったらしいのですが、廃止されていたらしい
(参考記事)。
てかなにそれ? 参考記事で何やら分析されていますが、多分そういう事では無いと考えます。
TANEのように10件では足りない人は設定で100件/ページとかに変更しているハズです。
100件あれば大体事が足ります。つまり自動スクロールなんて付けなくても、最初から
必要な量が見られればそれで必要十分です。少なくともTANEは。
むしろ連続スクロールなんてページ内の単純な文字列検索もできなくなるだろうから役に立つとも思えません。
で、連続スクロールをひっこめるのは勝手ですが(存在にも気づいてなかったし)、
ページ当たり10件に固定するのはダメだろ。少なくとも4ページ分は表示しろよとは思います。
テレワーク。遅めに終了。
Google検索結果のページ当たりの表示件数が 10件しか表示されなくなってしまってて とてつもなく不便なのだが。
設定が無くなってて100件/ページに戻せない。上位10件なんて大体肝心な事が書かれていないページしか出てこないので、
次の10件以降を選択するのにちょっとスクロールしてボタンを押すとか ただただ面倒臭い。
減らすんだったら 5件くらいの表示でスクロール無しで全部見られて、次の5件をボタン連打で直ぐに出せる
ようにボタン位置を固定するとか、少しは考えた痕跡があれば良いのですが、ただ設定を取っ払っただけとか
なんなの?感しか無い。
AM中に起床。
掃除したり洗濯したり。
先日の設定で Emacsの org-mode でAVIFファイルをインライン表示できるのですが、
HTMLにexportすると ewwでは表示できず、リンクも存在しない状態になって、なんでだ?
と思ったり。因みに Edgeでの表示はできるので ewwの問題だと思われます。
exportされたHTMLファイルを見てみると、JPEGとAVIFは imgタグで表示するようになっていて、
例えば .jp2ファイルとかは a href でリンクになっていました。
Webで検索してみると、29.0.50で表示できない事が報告されていて
(参考)
バグだったので修正されているようです。
もう少し切り分けてみると、Webサイトに置かれた AVIFファイルを
「<img src="https://..../foo.avif">」で参照した場合は表示ができるようですが、
「<img src="./foo.avif">」みたいにローカルファイルを表示しようとすると
表示できないようです。JPEGファイルの場合は後者のローカルファイル表示も問題無くできます。
画像表示しないモードにすれば AVIFファイルでも alt属性は表示されるので、
見かけ上 ローカルファイルか否かで画像表示の可否が切り替えられているようです。
が、どこで制御しているのかがよく判らず🥺。
関数shr-get-image-data の引数にローカルファイルのURL「file:///home/.../foo.jpg」を食わせると、
データと content-type のリストが返るのですが、例えば foo.jpgだと content-type は image/jpeg
になっているのですが、foo.avifだと content-typeは application/octet-stream になっていて、
これが avifのファイルを表示できない直接の原因だと推測しました。しかし、content-typeの取得は
データを読み込んだ後に 関数mail-fetch-field に 文字列content-typeを指定すると検査した結果
として image/jpeg や application/octet-stream を返しているのですが、関数mail-fetch-fieldを見ても
どうやって文字列を返しているのかが何故か判らず🥺。
なんか違った。 指定されたURLを「(url-cache-extract (url-cache-create-filename url))」てな感じで
キャッシュデータとしてファイル名の生成とヘッダを付けたデータを生成していて、この時点で
「Content-type: xxxxx」を付加しているようです。が、やっぱりどこで付加しているのかが判りません🥺。
なんだこれ?
コードを読むのはあきらめて文字列「image/jpeg」の近くに同じようにavifを定義してみる事に。
結局 lisp/gnus/mm-decode.el 内のカスタム変数mm-inline-media-tests にimage/avifを追加してみたら
ewwで「<img src="./foo.avif">」も表示されるようになりました。
てか、gnusってニュースリーダー/メールリーダー なので関係が離れすぎていて訳が判りません。
lisp/net/mailcap.el の方にも 変数mailcap-mime-extensions というのがあって、
ファイル拡張子とmime-typeの関係を記してあるのですが、こちらもどこかに効いてくる箇所が
あるのかも知れません。ともかく、Webサーバー上のAVIFファイルは表示できるのに、
ローカルAVIFファイルは表示できないという時点で「なんでだよ?」と思う訳で、
加えて設定も ewwとは関係無さそうな所をいじる必要があるというところからも、
作りが良くないとは感じます。
昼前起床。
全然関係無い流れから
「ガーゴイルの Wikipedia」
の存在を知ったり。本来は彫刻の施された雨樋の排出口の事だというのを知りました。
ファンタジー世界での 石像の怪物/魔物というイメージしか無かったのですが、雨樋機能
の設定は完全に無くなっているなと思ったりも。
ImageMagickって AVIFフォーマットに対応していないのだっけ?と思って調べてみたり。
HEIF/HEICのライブラリが対応しているとの事なので、HEICのデコードに対応できていれば
AVIFも自動的に対応されるのかと思いきやそういう訳ではないっぽい。
Cygwinの magick convert で対応フォーマットを調べてみたところ、以下のような感じでした。
$ magick convert -list format | grep -E 'AVIF|HEIC|HEIF' AVIF --- AV1 Image File Format (1.12.0) HEIC r-- High Efficiency Image Format (1.12.0) HEIF r-- High Efficiency Image Format (1.12.0) $ magick convert --version Version: ImageMagick 7.0.10-61 Q16 x86_64 2021-01-25 https://imagemagick.org Copyright: (C) 1999-2021 ImageMagick Studio LLC License: https://imagemagick.org/script/license.php Features: Cipher DPC HDRI OpenMP(4.5) Delegates (built-in): bzlib fftw fontconfig fpx freetype heic jbig jng jp2 jpeg lcms lzma pangocairo png tiff webp x xml zlib
$ magick -list format | grep HEIC AVIF HEIC rw+ AV1 Image File Format (1.17.6) HEIC HEIC r-- High Efficiency Image Format (1.17.6) HEIF HEIC r-- High Efficiency Image Format (1.17.6) $ magick --version Version: ImageMagick 7.1.1-33 Q16-HDRI x86_64 22263 https://imagemagick.org Copyright: (C) 1999 ImageMagick Studio LLC License: https://imagemagick.org/script/license.php Features: Cipher DPC HDRI Modules OpenMP(4.5) Delegates (built-in): bzlib cairo djvu fftw fontconfig freetype gslib gvc heic jbig jng jp2 jpeg jxl lcms lqr ltdl lzma openexr pangocairo png ps raqm raw rsvg tiff webp wmf x xml zip zlib zstd Compiler: gcc (14.1)
: #if LIBHEIF_NUMERIC_VERSION > 0x01060200 entry=AcquireMagickInfo("HEIC","AVIF","AV1 Image File Format"); #if defined(MAGICKCORE_HEIC_DELEGATE) if (heif_have_decoder_for_format(heif_compression_AV1)) entry->decoder=(DecodeImageHandler *) ReadHEICImage; if (heif_have_encoder_for_format(heif_compression_AV1)) entry->encoder=(EncodeImageHandler *) WriteHEICImage; #endif :
$ cat check_avif.c #include <stdio.h> #include <libheif/heif.h> int main() { //heif_init(NULL); printf("hevc=%d\n",heif_have_decoder_for_format(heif_compression_HEVC)); printf("AVC =%d\n",heif_have_decoder_for_format(heif_compression_AVC)); printf("jpg =%d\n",heif_have_decoder_for_format(heif_compression_JPEG)); printf("av1 =%d\n",heif_have_decoder_for_format(heif_compression_AV1)); printf("hevc=%d\n",heif_have_encoder_for_format(heif_compression_HEVC)); printf("AVC =%d\n",heif_have_encoder_for_format(heif_compression_AVC)); printf("jpg =%d\n",heif_have_encoder_for_format(heif_compression_JPEG)); printf("av1 =%d\n",heif_have_encoder_for_format(heif_compression_AV1)); //heif_deinit(); return 0; } $ gcc check_avif.c -lheif $ ./a hevc=1 AVC =0 jpg =0 av1 =0 hevc=0 AVC =0 jpg =0 av1 =0
$ cat check_avif.c #include <stdio.h> #include <libheif/heif.h> int main() { heif_init(NULL); printf("hevc=%d\n",heif_have_decoder_for_format(heif_compression_HEVC)); printf("AVC =%d\n",heif_have_decoder_for_format(heif_compression_AVC)); printf("jpg =%d\n",heif_have_decoder_for_format(heif_compression_JPEG)); printf("av1 =%d\n",heif_have_decoder_for_format(heif_compression_AV1)); printf("hevc=%d\n",heif_have_encoder_for_format(heif_compression_HEVC)); printf("AVC =%d\n",heif_have_encoder_for_format(heif_compression_AVC)); printf("jpg =%d\n",heif_have_encoder_for_format(heif_compression_JPEG)); printf("av1 =%d\n",heif_have_encoder_for_format(heif_compression_AV1)); heif_deinit(); return 0; } $ gcc check_avif.c -lheif $ ./a hevc=1 AVC =0 jpg =1 av1 =1 hevc=0 AVC =0 jpg =1 av1 =1
$ magick convert -list format | grep -E 'AVIF|HEIC|HEIF' AVIF rw+ AV1 Image File Format (1.18.2) HEIC r-- High Efficiency Image Format (1.18.2) HEIF r-- High Efficiency Image Format (1.18.2)
テレワーク。気持ち遅めに終了。
ちょろり調べ事。
テレワーク。遅めに終了。
Web巡回して終了。
テレワーク。気持ち早めに終了。
VirtualBoxのVM起動に失敗する件の続き。先日の通り管理者権限で VirtualBoxマネージャー を起動する
他に、.vdiなどのファイル群の所有者を変更することで、管理者権限でVirtualBoxマネージャー を起動
しなくても大丈夫になるみたい。結局、インストーラーの最後で起動した VirtualBoxマネージャーで操作してしまうと
その操作は全て管理者権限で行なわれてしまう為、ハマりの入口に立ってしまうという事のようです。
たまたま見た IOCCC のWikipedia の中の
解説文に
「Cコンパイラでは、配列aと添字iに対してa[i]は*(a+i)として解釈される。そのためi[a]と書いても同じ結果が得られる。」
というのがあり、ウソでしょ?と思って試したら本当でした😅
$ cat ptr_trick.c #include <stdio.h> int main() { char *str="abcdef"; for(int i=0; i<6; i++){ printf("%c %c\n",str[i],i[str]); } return 0; } $ gcc -Wall ptr_trick.c $ ./a a a b b c c d d e e f f
テレワーク。遅めに終了。
NVIDIAのドライバを久々にアップデートした際に再起動したのですが、再起動後 VirtualBoxのVM起動が
また失敗するようだったり。またアンインストールして再インストールで復帰したのですが、
なにかバグってるんじゃないか?という疑惑。
VMのFedora40のアップデートをしてVMを再起動後にVM電源OFFし、再度VM電源ONするとまた立ち上がらなくなったり。
単純に再起動だけがトリガになっている訳でもない模様。なんだこりゃ?
またアンインストールして再インストールすると復帰するので、やっぱりソフト的な何かのように思ったり。
VMを落とした後 また起動できなくなったので、設定の変更で反応が変わるか?を試そうとしたら設定変更が
セーブできないと怒られたり。
ファイルの所有者がAdministratorsになっていたのですが、起動したユーザと違っていました。
もしやと思い「Oracle VM VirtualBox マネージャー」を管理者権限で起動したところ設定の変更もセーブできて
VMの起動も大丈夫でした。
アンインストールして再インストールすればイケる事との関係ですが、再インストール終了後に起動される
VirtualBoxマネージャーが管理者権限で起動されている為、そこからであればVM起動できるという事みたい。
VM起動後に 邪魔なのでVirtualBoxマネージャーを閉じて、その後VMを終了すると 管理者権限起動された
VirtualBox関連プロセスは無くなります。この状態から 非管理者権限で VirtualBoxマネージャー を起動すると
そこからのVM起動には失敗する.... というのが一連の動きになっているようです。
個人的な意見としては、VM起動失敗をなんでもかんでも「E_FAIL(0x80004005)」にしているせいで
原因が特定できない感じになっていると思います。
テレワーク。早めに終了。
調べ事をして終了。
AM中に起床。
掃除したり洗濯したり。
先週 WindowsUpdateが来ていたので再起動したのですが、その時にVirtualBoxを落としたままになっていたのを、
テストの為に起動しようとしたところエラーが出て起動できなかったり。
「E_FAIL(0x80004005)」みたいなエラーだったので検索してみると、Hyper-Vを無効にするとか怪しげな方法
しか出てこなかった為、どれも試さずに結果的にVirtualBoxの再インストールで復帰しました。
インストールメニューにRepairがあったので試してみたのですが、こちらもエラーメッセージが出て失敗したので、
Removeで削除した後 再度インストールしたという感じです。
Hyper-Vを無効化する方法として bcdeditコマンドを管理者権限で実行するというものがあるようですが、
いきなり setで状態を変えるようなのしか出てこなくて、どこに関係しているか判らないようなものを、
今の状態を確認せずに変更するのはどうなの?とは思いました。
因みに、設定はそもそも無効になっていたので、やってみたところで解決はしなかったと思われますが。
AM中に起床。
「宇宙兄弟(44)」。えらいこっちゃ。
そういえば宇宙兄弟の時代設定って少し未来だったよな?と思っていたのですが、
いつの間にか再来年(2026年)には日々人が日本人初のムーンウォーカーになってる事に....
えらいこっちゃ。
Windows98ビルドのEmacsって何の事を指しているのだろうか?
テレワーク。早めに終了。
Unicode文字の中に 数学用英数記号(Wikipedka)というのがあるのを知りました。ほぅ...。
ASCII文字とは違う区画に割り当てられているので 入力が難しい(面倒くさいとも言う)と思ったのですが、
math-symbolsというELISPアプリで
ASCII文字列を数学英数文字列に変換する事ができるようです。
相互変換はできないのと 変換するとASCII文字での検索はできなくなるので、
通常の文書の中に飾り文字用途で使用する場合は注意が必要かも知れません。
と思ったのですが試しに「𝐓𝐡𝐞 𝐄𝐦𝐚𝐜𝐬 𝐄𝐝𝐢𝐭𝐨𝐫」と記してみたところEdgeやChromeでは ASCIIで文字列検索できるな😅。
恐るべし。普通は無理だと思うのでやっぱり注意は必要でしょう。
テレワーク。早くもなく遅くもなく終了。
bashコマンドラインで例えば複数のコマンドの出力を束ねてファイルにリダイレクトするような場合、
「(date; ./mycommand; date) > exec.log」みたいに括弧で囲んでサブシェル実行ってのをよくやるのですが、
波括弧で囲む事もできるのを今日知りました😅。
波括弧の場合「{ date; ./mycommand; date;}> exec.log」てな感じになるようですが、()と違って
「{の後ろに空白文字が必要」、「最後のコマンドも;で区切らなくてはならない」という
条件を満たす必要があるようです。ちょっと面倒臭い。
()と{}の違いはいくつかあるようですが、個人的には ()はサブシェル実行なので環境変数は
サブシェル内で一時的に変更されますが、{}はカレントシェルとして実行されるので環境変数の変更が以降も
反映されるという違いが大きいかな?と思います。
$ (TEST="Test String"; echo "==" ${TEST} "=="); echo "==" ${TEST} "==" == Test String == #サブシェル内は変数TESTを参照できる == == #サブシェルの外には変数TESTは無い $ { TEST="Test String"; echo "==" ${TEST} "==";}; echo "==" ${TEST} "==" == Test String == #カレントシェルで変数TESTを定義したので == Test String == #{}の外にも定義は見える $ echo ${TEST} Test String #当然 変数TESTは定義されたまま
テレワーク。気持ち早めに終了。
SAI2の新しいのが来ていたり。おつかれさまです。前回から1ヵ月ほどしか経っていませんが、
バグ修正リリースのようです。
全然関係無い流れで アスタリスクのWikipedia の存在を知ったのですが、
Unicode文字の仲間がこんなに沢山あるの?と思ったりも。
MS-IMEで「*」を変換するといくつかは変換候補に出てきますが、コピペ以外の方法で入力できないのは
勿体ない話だとは思ったりも。
AM中に起床。
唐突ですが「Emacsの雑記」を更新しました。
Emacs 29.4向けのパッチの更新なのですが、リモートファイルのimage-dired改善対応&wrapped_convert更新
(参考1,参考2)とか、
Emacs 30.1で対応予定の Unicode15.1 絵文字対応不具合修正(参考)
のバックポートです。どちらも必要とする人は居ないかも知れませんが御参考まで。
Google検索で開始日指定での期間指定を行なったのですが、なんか指定が効いていないような?
yyyy/mm/ddで指定すると一度は効いてない検索結果が表示されるようですが、もう一度指定メニューを開くと
mm/dd/yyyy形式で記されているので内容そのままに[選択]ボタンを押せば指定が効くようです。バグなのか?
AM中に起床。
掃除したり。
そういやピーマンの絵文字(🫑;BELL PEPPER)って Unicode13.0で追加されたものなのか。
MS-IMEで変換候補に出てこなかったので、絵文字になっていないのだっけ?と
思ったら Windows10の Segoe UI Emojiは Unicode12.0までの絵文字しか入っていないから....
かと思いきや、Windows11の MS-IMEでも変換候補にはピーマンの絵文字は出てこないようです。
結果的に MS-IMEをきっかけにピーマン絵文字の素性を知ったという感じです。
ところで、ピーマンのWikipedia
によると、パプリカが日本に輸入されたのって1993年だったってのを知ったり。
確かに TANEの幼少期には見たことが無くて、いつの間にか存在していたなぁ?とは思ったのですが、
まだ 30年しか経っていないとは思いませんでした。
今のところ厳密にパプリカの絵文字は存在していないようで、「BELL PEPPER」の絵文字として
緑だったり赤にデザインされていたりするみたい。
一番謎なのが、Windows11の「Winキー + .」で絵文字選択パッドでピーマンにマウスカーソルを
かざすと緑色のデザインなのに 「赤ピーマン」とTip表示されてて なんでや?とは思ったりも。
ピーマンのWikipediaから察するに、カラーピーマンとパプリカとの見た目の区別が付かないとか、
カラーピーマンも未熟果では緑色っていうややこしさに起因しているのかも知れません。
ピーマン絵文字の色問題、思ったよりも闇が深いかも知れません。
AM中に起床。
ちょろりお出かけ。
そういえばテレビ東京で土曜午前に「オーイ!とんぼ」のアニメの再放送が行なわれていますが、
今日何気に本屋で原作単行本があるのを見て、え!?51巻まで出てるの?と思ったり。
Wikipedia
によると 連載は2014年からのようですが、2016年からコミックスが発売され始めて、
1年に6冊くらいのペースで出ているもよう😲。ゴルフ雑誌での連載という事なので、
普通のマンガ雑誌での連載とは違うのかも知れませんが、スピードが尋常では無いと思ったりも。
sortコマンドの -kオプションでソートフィールドを指定できますが、
何やら思っているフィールドじゃない所でソートされていて こんなんだっけ?と思ったり。
どうやら UNIXの sortと挙動が違うというのを今日知りました😓。
awkと同じように連続する空白文字列がセパレータになると思っていたのですが、
空白orタブの1文字が区切りになるようです。この為、「colmun -t」みたいなので
空白文字でパディングして見た目の列の位置を合わせてしまうと、フィールド的に揃っていない事になるようです。
sortの-bオプションを付加すると"結果的に"連続する空白文字列がセパレータになるようです。
ただ、-bオプションの解釈がややこしいのでもう少しだけメモ。
フィールドの区切りは 1文字の空白文字で変わりませんが、-bを付けると以下のように解釈されるようです。
00000000011111111112222222 12345678901234567890123456 ccc 111 zzz1 bb 33 zzz2 a 222 zzz3 ↓ -bを付けた場合は 区切りを「|」、無視される空白文字を「_」で表現すると以下のような解釈に変わる模様。 00000000011111111112222222 12345678901234567890123456 ____ccc|_____111|_____zzz1 _____bb|____33|______zzz2 __a|_________222|__zzz3
$ cat sorttest.txt #元のデータ ccc 111 zzz1 bb 33 zzz2 a 222 zzz3 $ cat sorttest.txt | sort -b -r #逆順ソートなので一応期待通り ccc 111 zzz1 bb 33 zzz2 a 222 zzz3 $ cat sorttest.txt | sort -b -k 1r #第1フィールドを逆順ソート.... ん?なんで? a 222 zzz3 ccc 111 zzz1 bb 33 zzz2 $ cat sorttest.txt | sort -b -k 1br #期待通りだけど キーにbが必要な理由がよくわからない.... ccc 111 zzz1 bb 33 zzz2 a 222 zzz3
AM中に起床。
bashスクリプトで ビルトイン設定に「set -o pipefail」を使うつもりが、
たまたまコピペしたページに「set -eo pipefail」と記されていたのを
気づかずにそのまま使っていました。
途中で「echo ${foo} | grep 'xxx' > /dev/null; rc=$?」のように 変数foo の
内容をgrepして 文字列xxxの有無で この後動きを切り替えるような事をしたかったのですが、
grep 以降が実行されずなんで? ってなってました。
見る人が見れば「もう理由が書かれてるじゃん」って感じなのですが、「set -e」は
「スクリプト内で 実行したコマンドの終了ステータスが 0以外だったらそこでスクリプトを終了する」
なので、grepで該当文字列が見つからなかった時点で終了してしまいます。
.....って事でした。修行が足りません😓。
圧縮されたアーカイブファイルから中身を取り出す事を「解凍」と言う場合があります。
TANE自身はいつの頃だったか「解凍」って言い方をするのは日本だけって話を聞いたことがあって、
確かに、inflateや uncompressや decompressや extractみたいだねぇ と思い、
以降「展開」って言い方を意識的に使っています。
因みに日記を検索してみたら「解凍」の文字列は今日の日記以外には無く、
「展開」はこのページを置いた頃(2000年3月29日)
には使っていたようです。
さておき、Web検索していて、こちらの文書
を知りました。X68kのエミュレータ環境ですが、どうだったっけ?と思い調べてみたところ、
X68k版の lha(「Rel.47 <Version 2.13>(3 July, 1994)」)のマニュアルを見ると、
テレワーク。早めに終了。
調べ事。うーん?なんか動きが変なのだが なぜそうなるのかが判らない....🤔
テレワーク。気持ち遅めに終了。
宮崎での地震。そういえばTVを点けたら「南海トラフ「巨大地震注意」」って表示されていたので、
どういうこと?と思ったのですが、宮崎での地震が起こったのに関連して、これからさらに起こるかも
知れないから注意せよっていう表示みたい。今回初めて行なわれている情報表示らしい。
ただこれ、目先に起こった余震の情報表示と被ると 訳が分からなくならないかなぁ?
テレワーク。遅めに終了。
調べ事をして終了。
テレワーク。早くもなく遅くもなく終了。
先日Webを散策していて、viクローンのひとつである
Stevie
のソースコードがあるというのを知りました(公式)。
Tim Thompson氏が 1987年に Atari ST用に書いたものだったそうです。
ソースコードファイルを見てみたところ、全部で10個、計2755行という規模のようです。
大分小さいと思ったりも。
Cygwinでコンパイルしてみたのですが、Segfaultする実行ファイルが生成されました。
調べてみたところ、静的割り当てされた文字列領域を書き換えるようなコードになっているのが
原因でした。他にも現在のgccでコンパイルすると大量にワーニングが出る為、コンパイル的に
ワーニングが出ないようにも 直してみたのですが、なんか思った感じにならなかったり😓。
あれぇ? モードがいくつかあるようですが、入力した文字がそのまま表示されず、
8進数とか16進数で表示されるのですが どういう事だ?
8進数とか16進数で表示されるのはバイナリ編集モード的なものらしいのですが、
ソースコード的には普通のテキスト表示で編集できるモードが無いようにも見えます。
文字テーブルを弄ると意図したテキスト編集の感じにはなるようです。はて....?🤔
ところで、1987年時点だと 個人のPCで動作するような UnixライクOSは Minixくらいしか無いように
思うのですが、何かしらUNIXを知っているか使っていないと Atari STのようなホームコンピュータ用に
viクローンを作ろうとならないのでは?とは思ったりも。
テレワーク。遅めに終了。
調べ事。
昼頃起床。寝すぎ。
掃除したり。
先日の新しいw3mモードで、buffer-listのオーダーが変わってしまう件。
w3mではウインドウのサイズが変更されたときに自動的に再描画を行なう機能があるようですが、
それを処理する 関数w3m-redisplay-pages-automatically の中で 関数walk-windows を使って
表示されているウインドウを一通り舐める動きを行なっているようです。
このときに ウインドウ表示されているバッファが、バッファリストのオーダー上、
最初の方に上がっているという事のようでした。
この自動再描画を制御するカスタム変数 w3m-redisplay-pages-automatically-p が用意されていて
デフォルトは tですが、nilにする事によって バッファリストのオーダーが変わる事は無くなりました。
ウインドウを一つしか開いていない時には問題になる事は無いと思いますが、
複数のウインドウを開いているときに、問題になる事があるのかなと思います。
我が家では常時6個以上のウインドウが表示されている為、「M-x buffer-menu」でバッファ制御しようと
する度に バッファオーダーが思っているのと違うと操作対象バッファを間違えるので、
残念ながら「(setq w3m-redisplay-pages-automatically-p nil)」で自動再描画機能は
封印する方向で対応しました。
ASSEMBLY SUMMER'24 の表彰式を見られました。「AI WILD」なんてのがあったらしい。ほぅ...。
昼頃起床。寝すぎ。
そういえば、Windows10を使っていて、ここ1年くらいの間に マウスカーソルを見失う事がよくあるなぁ?
と感じていました。この為、マウスポインターの設定で「ポインターの軌跡を表示する」などを
使うようになっていたのですが、それでも見失うときは見失うのでなんでだ?と思っていました。
で、今日よく見るとマウスカーソルを動かしていない時に表示されていない期間があり、
このときに見失ってしまうのではないか?と思った次第。
何を契機に非表示になっているのか判りませんが、ついさっきまで表示されていたものが消えて
しまうと見失うよなぁとは思ったりも。
マウスポインターのサイズを変更できるようなので 1だったを2にしてみたのですが、大きくなると
同時にマウスカーソルが非表示にならなくなったような気が🤔。
「大きくしたところで非表示になったらやっぱり見失うだろう」ってのを確かめたかったのですが、
これでは「大きくしたら見失いにくくなった」と勘違いしてしまうじゃん?と思ったりも。
ともかく、サイズ2でしばらく使ってみる事にしよう。
何気にEmacsの w3mパケージの新しいのを入れてみた(w3m-20131203.1429→w3m-20240712.248)のですが、
org-modeで出力したHTMLファイル表示がイマイチな感じに思ったり。
よく見ると特定のファイルで読み込み時にエラーしていてそれが原因の模様。
文字コードが解釈できていない?
次のようなことが起こっているみたい。
org-modeでHTMLにエクスポートするとき、見出し(*や**など)に応じて目次を自動生成する事ができます。
このとき、見出しに日本語文字を使っていると
目次のリンク用URLは「<a href="#日本語文字">1. 日本語文字</a>」みたいな
タグが生成されます。ところが、新しいw3mでは URLに日本語文字を含んでいると
エラーになる場合があるようです。もう少し調べてみると、file-exists-pという関数が
エラーするみたい。
例えば「(file-exists-p (w3m-url-decode-string "file:///emacs.html#一"))」のようなのが
ダメで、「一」を「二」にすると大丈夫だったりするようです。なにこれ?🤔
どうやら「(file-exists-p (w3m-url-decode-string "file:///emacs.html#一" 'utf-16))」
ならば大丈夫そうで、カスタム変数 w3m-file-name-coding-system を
「(setq w3m-file-name-coding-system 'utf-16)」にすればうまく表示できるようになりました。
デフォルト設定では
;w3m.el内 (defcustom w3m-file-name-coding-system (if (memq system-type '(windows-nt OS/2 emx)) 'shift_jis 'euc-japan) "Coding system used to convert pathnames when emacs-w3m accesses files." :group 'w3m :type 'coding-system)
テレワーク。気持ち遅めに終了。
そういえば、メガデモパーティーの ASSEMBLY SUMMER'24 が
始まってるみたい。イベントの規模も戻っている感じがします。
テレワーク。気持ち早めに終了。
Web巡回して終了。