トップ «前の日(01-15) 最新 次の日(01-17)»

2020-01-16 (Th)

_ カーソル点滅がおかしくなった

Emacs の text cursor の点滅がおかしくなった…

socket の file descriptor が必要だった? 削除をマージしてからだわ。


2022-01-16 (Su)

_ Emacs + Wanderlust をデバッグ

いや、何かっていうと、

M-x wl すると、「無効な引数です」(英語名: Invalid argument) と言われて imap4 サーバに接続できない、という…

エラーメッセージにはその他いろいろ情報がくっついてるけど、さっぱりわからん。

でも、エラーメッセージ中の make client process failed が emacs の src/process.c に見つかったので、 そこを手がかりに調べていった。

なんでか connect に失敗してるんだよね… connect の引数 sa の内容を出力してみると、 どうも IPv6 の場合に失敗してるっぽい。

エラーが出ないこともあって、その場合は IPv4 っぽい。

だいぶん絞れてきたけど、「IPv6 の場合に失敗」って、彼らがそんな単純ミスを するとは思えんしなぁ...

で、思い立ったのが link-local。

imap サーバは家庭内 LAN に存在するので、IPv6 の場合は link-local になる。 そして link-local の場合は、インタフェースインデックスが必要で、 それは struct sockaddr_in6 の sin6_scope_id に入ってるはず。 process.c を scope_id で検索しても見つからない。

よしこれだぁ!

で修正して M-x wl で動作確認はできたものの…

若干互換性を破ってるんだよね… sockaddr は vector 型に変換されてて、 てことは、たぶん elisp に返せるようになってる。 そうすると、vector 中の要素数を見て云々してる elisp が存在する可能性がある。

はてさてどうしたものかな。

とりあえずここに貼っとこ。

diff --git a/src/process.c b/src/process.c
index 9664180cfd..709d2e5836 100644
--- a/src/process.c
+++ b/src/process.c
@@ -2510,9 +2510,10 @@ conv_sockaddr_to_lisp (struct sockaddr *sa, ptrdiff_t len)
       {
 	DECLARE_POINTER_ALIAS (sin6, struct sockaddr_in6, sa);
 	DECLARE_POINTER_ALIAS (ip6, uint16_t, &sin6->sin6_addr);
-	len = sizeof (sin6->sin6_addr) / 2 + 1;
+	len = sizeof (sin6->sin6_addr) / 2 + 2;
 	address = make_uninit_vector (len);
 	p = XVECTOR (address);
+	p->contents[--len] = make_fixnum (sin6->sin6_scope_id);
 	p->contents[--len] = make_fixnum (ntohs (sin6->sin6_port));
 	for (ptrdiff_t i = 0; i < len; i++)
 	  p->contents[i] = make_fixnum (ntohs (ip6[i]));
@@ -2582,7 +2583,7 @@ get_lisp_to_sockaddr_size (Lisp_Object address, int *familyp)
 	  return sizeof (struct sockaddr_in);
 	}
 #ifdef AF_INET6
-      else if (p->header.size == 9)
+      else if (p->header.size == 10)
 	{
 	  *familyp = AF_INET6;
 	  return sizeof (struct sockaddr_in6);
@@ -2643,7 +2644,8 @@ conv_lisp_to_sockaddr (int family, Lisp_Object address, struct sockaddr *sa, int
 	{
 	  DECLARE_POINTER_ALIAS (sin6, struct sockaddr_in6, sa);
 	  DECLARE_POINTER_ALIAS (ip6, uint16_t, &sin6->sin6_addr);
-	  len = sizeof (sin6->sin6_addr) / 2 + 1;
+	  len = sizeof (sin6->sin6_addr) / 2 + 2;
+	  sin6->sin6_scope_id = XFIXNUM (p->contents[--len]);
 	  hostport = XFIXNUM (p->contents[--len]);
 	  sin6->sin6_port = htons (hostport);
 	  for (i = 0; i < len; i++)

しばらく使って問題なければ本家に入れようか。

ところで、wanderlust って SSL証明書の確認してなくない…?

もしかして↓これでできる?

(setq gnutls-verify-error t)

んー自己署名証明書がエラーにならんなぁ... 使い方が違うのかも。


2023-01-16 (Mo)

_ 今日の原神

雷電将軍を突破。Lv80。こんなもんか。

世界ランク 7 の雷音権現を何度か倒した。まぁたいしたことはないな。

雷電将軍の爆発の天賦Lvを上げまくった。 といっても、Lv5 くらいだったかな。天賦本が足りなくなったので、今日はここまで。 どこまで上げようかな。天賦素材あったような気もするので、Lv7 にはできるかな。

絶縁秘境もやんないと。

壺どうしようかな… 報酬もらうのに、フレンドが必要なのがちょっとな… 同じサーバの海外勢を捕まえてフレンドになってもらおうかな。 それには、プレイヤー名が日本語なので、英語名にしたいな。


2024-01-16 (Tu)

_ 原神 - 元素反応特訓

「冒険の証」の「対策」は、まぁプレイしてればだいたい進んでいくんだけど、 ただ、いろんな元素反応の秘境のクリアはやんなきゃ終わらない。 今まで、蒸発だけはやってたけど、他のは全然。 というか、以前やったことはあったんだけど、全然クリアできなかったんだよね。 今ならできるかな、と (キャラは固定だけど)。

簡単だった。時間結構きついけど、ぎりぎりになれば爆発も使えるので一気に反応回数を稼げた。 なかなかいい調整してる。

というわけで、2年近くかかったけど、「対策」はようやく全部完了。


2025-01-16 (Th)

_ SSD 届いた

さっそく。一緒に買った外付けケースに設置して接続。

zpool create -m none -o ashift=12 zroot2 /dev/disk/by-id/ata-SanDisk_...

ディスクまるごと zpool にしたんだけど、can't find ext4 filesystem とか うるさいので、reboot。reboot したら収まった。systemd が何かやってたのだろう。

zfs create -o mountpoint=/home/service2 -o compression=lz4 -o atime=off zroot2/svc

/home にて、おもむろに

rsync -aH service/ service2/

ほんとは zfs send と recv 使うのがいいんだろうけど、気分一新。

遅い… やめ。zfs send にしてみよう。

zfs snapshot zroot/svc@bk
zfs destroy zroot2/svc
zfs send -R zroot/svc@bk | zfs recv zroot2/svc

めっちゃ速いわ。

273G 57分で終わった。

旧ディスクを外して新ディスクを内蔵して、起動し、起動中に zfs の mount で失敗したので、

zpool export zroot2
zpool import zroot2 zroot

これで zroot という名前に変わる。

念のため、

mkinitcpio -p linux-lts
mkinitcpio -p linux

要らなかったかも。

reboot。今度はちゃんと mount できた。

使ってみた感じ、速くなった気がする。気のせいか?


追記 パスワード変更