basyura's blog

あしたになったらほんきだす。

ユニコーンオーバーロード

始めてみた。ファイアーエムブレム エンゲージはムービーをチラ見した感じが微妙に見えてやめた。なのだけど、ユニコーンオーバーロードをしながら昔のファイアーエムブレムやってる時の感触を受けるのが不思議。あれこれキャラクターが出てきて育成を考えながら進んでいく感じ。

画面が 13.3 インチのモバイルモニタだからか、ちょっと目が疲れる。仕事用に使っている 21.5 インチだと、それはそれで疲れるので歳だな。色合いを変えると楽になるんだけど。PC ゲームもいいのだけど、ひたすらマウスでクリックしてるとそれはそれで肩や背中が痛くなるので困る。学生の時は徹夜でネットゲームしてたのにな。歳だな。ずっとゲームしてられると思ったらそうでもないと身にしみる。老化というのは厳しい。

いやぁ、ほんと。いろいろ厳しい。会社は若手育成が完全に失敗してて主力がジジイしかいないのがホントに詰んでる。危険を察知した若者は他へ。なんとかこなそうと残っているのがジジイ(ゲーム関係ない)。これは辛いなぁ。

あー辛い。

cVim : manifest v3 対応 - heartbeat

無くてはならない拡張。vim キーバインドでブラウジングできる。

chrome.runtime.connect({ name: "main" });

connect が定期的に切れるので heartbeat してるのだけど、やっぱり切れる。環境なのかもしれないけど。

async function runHeartbeat() {
  await chrome.storage.local.set({ "last-heartbeat": new Date().getTime() });
}
function startHeartbeat() {
  runHeartbeat().then(() => {
    setInterval(() => runHeartbeat(), 10 * 1000);
  });
}
startHeartbeat();

仕方がないので disconnect されたら connect し直すように修正した。のだけど、heartbeat の interval を 20s から 10s にしたら、そもそも disconnect されなくなった (気のせいかもしれない)。

vivaldi : アプリケーション化したウインドウでのコピペショートカット変更

Mac で Karabiner-Elements を使う場合。

{
  "title": "Vivaldi Apps",
  "rules": [
    {
      "description": "vivaldi apps : copy - Ctrl+C",
      "manipulators": [
        {
          "type": "basic",
          "from": {
            "key_code": "c",
            "modifiers": { "mandatory": ["control"] }
          },
          "to": [
            { "key_code": "c", "modifiers": ["command"]  }
          ],
          "conditions": [
            {
              "type": "frontmost_application_if",
              "bundle_identifiers": ["^com\\.vivaldi\\.Vivaldi\\.app.*"]
            }
          ]
        }
      ]
    },
    {
      "description": "vivaldi apps : paste - Ctrl+V",
      "manipulators": [
        {
          "type": "basic",
          "from": {
            "key_code": "v",
            "modifiers": { "mandatory": ["control"] }
          },
          "to": [
            { "key_code": "v", "modifiers": ["command"]  }
          ],
          "conditions": [
            {
              "type": "frontmost_application_if",
              "bundle_identifiers": ["^com\\.vivaldi\\.Vivaldi\\.app.*"]
            }
          ]
        }
      ]
    }
  ]
}

北海道旅行

のんびりする予定で合間の時間がそれなりにある想定だったので MacBook Air を持って行った。のんびりネットしたり文章を書いたりするに良いかなと。

ゲームもできてスペックも良い windows デスクトップマシンをメインとしていたので買ったもののあまり使って来なかった。旅行を通して使ってみると性能的に気になるところは無いしバッテリーの持ちがいい。アンチグレアのフィルムを貼ったことでディスプレイの見やすさが向上して愛着が湧き始めている。キーボードが微妙と思っていたけど慣れなのか特に気にならなくなった。総合的に良い。

家に引き込もってるのもいいけど、カフェ (と言ってもエクセルシオールかスタバかタリーズあたりになるのだが) でドヤリングするのもいいかもしれない。前はよくやっていた。コロナになってから家環境が充実したのもあってあまり出なくなってるが。また始めて見るか。

宿の部屋に Tivoli MSYBTiB6B31 があったので Youtube Music でのんびり曲を流していた。波の音と相まってとても良い。次に住むのは海の近くか山の中がいいかもしれない。

Amazon で見たらそれなりの金額。家の iPad Pro でも音質は悪くないので買うかというと・・・うーん。スピーカーが二つあるので音は割といい印象だし。

Tivoli MSYBTiB6B31 は音が良くも悪くもこもってる感じの印象だけど柔らかい音で聞こえる。木を中心に作られた別荘で聞くと雰囲気が良さそうなイメージ。

夏休みをのんびり過ごせて良かった。

曇りと小雨が多かったけど水平線がずっと見えてて良かった。

cVim : manifest v3 対応

夏休みで北海道に来た。一つの宿に連泊してのんびりしている。

困る

作者の 1995eaton はどこに行ってもうたんや。 2018 年あたりで活動が止まり、たまに動いたと思ったら 2022 年を最後にまた止まった。

僕のブラウジングにおいて無くてはならないものとなった chromium-vim は chrome 拡張の manifest v2 なので、 v3 に対応しないと動かなくなる。

同様に無くてはならないものとなっているブラウザの vivaldi はカスタマイズ性を重視している。v2 も並行サポートしたりしないかと期待したけど最大 2025/06 までのよう。

cVim は MIT license でソースコードもあるから必要な人が Fork して直せばいいだけではある。 念の為、Issue や Pull Request を確認したけど特に無い (どちらも 2022 で止まっているので、使う側も諦めているぽい)。自分が困る前にやるしかない。

対応

manifest.json はルールにそって変える程度。

  • manifest_version を 2 から 3 に変更。
  • background スクリプトの指定を scripts から service_worker に変更。
  • content_security_policy の書式を変更。
  • browser_action を action に変更。

各種 API の変更。動かしてエラーが出るところを随時見直していく。

  • storage
  • XMLHttpRequest → fetch
  • tabs → scripting
  • extension → runtime
  • などなど

設定の読み込み

最初に service worker で取得した設定を保持しているはずが、cmdline_frame.html 経由でページを開くと消える。アドレスバーから開いた場合は設定がある。意味不明でずっとハマっていたが、取れていない場合は storage から取得し直すように対応を入れた。

heart beat

ようやく動くようになったと思って喜んでいたら一定期間後に動かなくなる。ページを開きっぱなしにしていたら、何もしていないのに動かなくなる。

v3 からの仕様で一定期間後?に切断されてしまうようだ。onDisconnect が実行されることは console.log で確認できた。

messenger.js

var port = chrome.runtime.connect({ name: "main" });
port.onDisconnect.addListener(function () {

本来は storage を使ってどうのこうのとか、接続し直してどうのこうのするのが正しいようだけどめんどくさいので定期的にメッセージを送信するように修正。

setInterval(() => {
  keep_count ++
  console.log("keep alive : ", keep_count)
  ECHO("keepalive", {});
}, 20000)

service worker に通信を投げるのも無駄だなと思って記事を読んでいたら、公式に非推奨だけど?回避方法がばっちり書いてあった。

こちらも定期実行で setInterval を使って 20s ごとに storage の api を叩いてるだけ。

let heartbeatInterval;
async function runHeartbeat() {
  await chrome.storage.local.set({ 'last-heartbeat': new Date().getTime() });
}
async function startHeartbeat() {
  runHeartbeat().then(() => {
    heartbeatInterval = setInterval(() => {
      console.log("heart beat")
      runHeartbeat()
    }, 20 * 1000);
  });
}
startHeartbeat()

公式の方法に従う。

eval

元々の cVim には無いのだけど、自分でコマンド (js) を定義して実行できる機能を追加していた。設定画面にあるテキストを読み込んで eval することで実現していた。これが v3 ではできなくなった。

動的に外部コードを読み込むのは難しそう。会社端末には会社用コマンドを追加して常用しているので困る。他の人に公開するわけでは無いので、ローカル編集用 js を置いて各端末で編集すればいいかと思っている。

動いた

自分のスキル的に動作サポートされるギリギリまでかかるかと思ったけど案外うまく行った。動いた。とはいえ、なんとなく調べ始めてから途中で何回か諦めたりして 3 ヶ月弱かかった。

また一つ便利になったというわけではないが、v2 のサポートが切れてもブラウジング効率が下がることは無さそうだ。

コードが大きいので、自分にとって不要な機能は削っていくかな。

MacBookAir M2 2022 にアンチグレアフィルムを貼る

いつだったかなぁと過去の記録 (エントリー) を探したら、購入してもうすぐ一年経つことが分かって愕然とする。どんどん早くなる。毎日無駄に過ごしてるな。

Mac を使い始めて四台目。当初から使っていたクリスタルなんとかフィルムを今回も購入。今まで (最後は八年ぐらい前かも?) は事務所に持ち込みで貼り付けてもらっていたけど、いつの間にか事務所が入っているビル?のロビーか、どこか出張先での待ち合わせてに変わっていた。お願いのメールをしたものの、ドーナツ屋でコーヒーを飲みながらどうのこうのてきな返事が来たので不安になって "雑多なところでやって大丈夫なの?" と返したら大丈夫と回答があった。とはいえ、あなたにとっては沢山ある端末のうちの一つとは思うが、僕にしては唯一なのだ。信用できなくなって日を改めることにした。ドーナツ代をこちらで払うのか?とか、貼り付け終わった後もなんか談笑しないといけないのか?とか考えるとめんどくさいのも大きい。日を開けて改めて依頼したら同じ人からの回答。嫌な予感しかしなかったが依頼をしたら忙しいからどうのこうので来月になるので連絡するといった回答。連絡来なかったけど。想定通り。非常に残念ですメールを書いて終了。メールが来てもルールで即削除するようにしたので返事は要らない旨も添えて。

買ったまま部屋の隅に置いていたのを一念(一年)発起で取り掛かる。

手順

  • 本体の電源を切る。
  • ディスプレイをきれいに拭く。
  • エアダスター (ブロアー) を使ってホコリを飛ばす。
  • 本体ではなくディスプレイ側を下にする。
  • フィルムを貼り付ける。
  • 空気を抜く。

雑な正確なのでちょっとずつ丁寧にってのがなかなかできないのだけど、我ながら過去最高の出来栄えで非常に満足している。良かった。

いろいろあったので次回も同じ製品を買うかは悩みどころ。前の MacBook Pro は 2015 で長く使っていたし、最近は Windows 端末を家でもメインで使うことが多い。どうするか考えるのはだいぶ先。

CraftLaunch - フォルダーを開く

'%' must be followed by '%' or '(', found: "%windir%\\\\system32')"

v3 で対象コマンドのフォルダを開く際に上記のエラーが出るのは認識していたけど、ようやく解決。 気にはなっていたけど、困っていなかった (自分で該当フォルダを開いていた) のでスルーしていた。使用頻度が低い自宅端末が v3 で、会社では v2 を使っている。v2 は特に問題なし。

自分で定義しているのは↑で、どこかから引っ張ってきたと思うのだけど記憶にない。python 得意じゃない (しっくりこない) ので放置状態。デバッグしたところでは ConfigParser の結果からコマンドを取得するところで例外が発生しているのは分かる。

cmds[cmd]

これ以上に分解できない。どうするの?と困ったけど、心強い味方 (ChatGPT) がすぐに教えてくれた。ほんと便利。

- ini = configparser.ConfigParser()
+ ini = configparser.ConfigParser(interpolation=None)

便利。