basyura's blog

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

2020 年在宅環境改善

在宅がメインになったので自宅環境を改善するためにいろいろ購入した。

まず椅子を購入

WORKAHOLIC 日本橋店でお試しして購入。最初に座らされたのがこれで(戦略があるんだろうけど)、しっくりきた。他のに座ってもピンとこなかったのでそのまま購入。それからずっと使っているものの家で使ってみるとあまりしっくこず・・・腰の辺とか足の周りとかずっと悩みながら座面の前後位置や高さ、背もたれの角度とかを調整していろいろ試している。一生ものとまでは行かないものの良いものを長く使うつもりで買ったけど、値段を考えると満足度が低い。見た目はいいけど。amazon の値段を見ると僕が店舗で買った時より数万円高くなっているので人気沸騰中なのかもしれない。

これをつければ?と思って購入してみたけど違和感しかなかった。そもそも長時間座るためには自分の筋肉を鍛えないとだめなのかもしれないので今後も様子見。

他に人気商品もあったけど素足 or 靴下を考えると柔らかい方が良いと思ってこちらを購入。いいのか悪いのかは微妙なライン。冬場になって寒いのでスリッパを履いてるし高さ調整もできた方が良さそうなので他のも試してみたい(木製のものとか)。

組み立てる前に玄関から配置スペースに持ってくるのがしんどかった。それ以外は良くて満足度高。電動で上下するのでスタンディングでも使えて便利。配置スペースの問題で幅 100cm にしたのでディスプレイ 2 枚構成の場合に若干狭いけど気になるのはそれぐらい。

働きすぎで目がしんどくなってディスプレイを見るのが辛くなってから外部ディスプレイを使うのはもう無理だと思ってたし、大きなディスプレイを何枚も使っている人を見ては恵まれてる人としか思ってなかった。13.3inch のノート PC のディスプレイでも若干不便だなぐらいでいたのだけど、パソコンデスクを買ったらディスプレイも欲しくなった。前述の通りの要因で買っても使えなかったらもったいないので「なるべく目に優しそう」「なるべく小さいサイズ」「高さを調整できる」で調べて唯一該当したものがこれだった。そのままでも大丈夫そうだったけどコントラストやモードをいじって問題なく使える状態となった。それに気を良くしてもう一台購入して左右に並べている(一枚が若干かぶってるけど)。メインディスプレイは 1600x900、サブディスプレイは 1920x1080。サブディスプレイは主にオンライン会議の画面(資料)を映す用とメッセンジャー用に使用している。メインの解像度を下げているのは目のしんどさ対策で、狭くなるし若干ぼやけて見える感じがあるけどその方が目がかなり楽なのが理由。

ノート PC の HDMI の口に一枚指して、もう一枚は USB 経由で接続。外部ディスプレイを 2 枚並べているけどノート PC のディスプレイは未使用としている。外部ディスプレイを使い始めたらノート PC の画面が小さすぎてしんどいのと、パソコンデスクの広さ的に無理があるからなのが理由。

椅子と机とディスプレイが揃ったらキーボードが欲しくなる。迷ったものの購入。したけど・・・あわねぇ・・・1日使ったら腱鞘炎になりかけたしスコスコ感の良さもよく分からなかった。現在は冬眠中。REALFORCE だったら?と思ったけど近くのヨドバシで試し打ちしたらそうでもなかった。キーが薄くてある程度跳ね返ってくるものじゃないとだめな体になってしまったようだ。結局、初代の apple wireless keyboard を使っている。これはめちゃくちゃしっくりくる。コンパクトで打ちやすい。予備があるけど劣化するものなので壊れた時にどうするか問題が怖い。乗り換え先を探しているけどなかなか見つかりそうにない。

まとめると、椅子がもうちょっとしっくりくるようになれば・・・かな。

inkdrop いじり

vim いじり (vimrc, plugin) をよくしてた頃と同じ感じで inkdrop いじり (init.js, plugin) をよくしてる。ちょっと気になるところがあれば自分で直せるのは大きい (yak shaving) が捗る。

enter でカーソル位置の url を開き、 <C-m> でカーソル行のリンクを全部開くようにしてみた。正規表現はやっつけ。

keymap.cson

'.CodeMirror.vim-mode:not(.insert-mode):not(.key-buffering) textarea':
    'enter': 'mycmd:open-cursor-link'
    'ctrl-m': 'mycmd:open-current-line-links'

init.js

inkdrop.commands.add(document.body, "mycmd:open-cursor-link", () => {
  const editor = inkdrop.getActiveEditor();
  const { cm } = editor;
  const cur = cm.getCursor();
  const token = cm.getTokenAt(cur);
  if (token.type == "url") {
    open(token.string);
  } else if ((token.type = "string url")) {
    const link = token.string.replace("inkdrop://", "");
    inkdrop.commands.dispatch(document.body, "core:open-note", {
      noteId: link,
    });
  }
});

inkdrop.commands.add(document.body, "mycmd:open-current-line-links", () => {
  const cm = inkdrop.getActiveEditor().cm;
  const cur = cm.getCursor();
  const str = cm.doc.getLine(cur.line);
  // url parse
  const urlReg = new RegExp(/(http.*?)( |\)|$)/g);
  [...str.matchAll(urlReg)].forEach((v) => {
    open(v[0]);
  });
  // inkdrop:// parse
  const idReg = new RegExp(/(inkdrop:\/\/.*?)( |\)|$)/g);
  const matches = [...str.matchAll(idReg)];
  if (matches.length > 0) {
    inkdrop.commands.dispatch(document.body, "core:open-note", {
      noteId: matches[0][1].replace("inkdrop://", ""),
    });
  }
});

Redmine: Contributed to View customize plugin v2.7.0

日頃からお世話になっている View customize plugin 。プロジェクト識別子を指定できるようにした PR が無事にマージされました (バグがあったりテストの書き方がおかしかったりで色々直してもらってます・・・)。

元の登録画面が url のパスを指定して js などを記述する UI になっているので、パス起点でしか動かせないとつい最近まで思い込んでた (そう思ってる人は多いはず)。なので、パスにプロジェクト識別子がある場合はいいのだけど、チケットを選ぶとパスから消えてしまうので特定のプロジェクトかを判断できず不便だなとずっと思ってた。

実は js で画面の要素を $(".current-project") で取って判定することができた (View customize plugin が埋め込む ViewCustomize 変数をから判断することもできてたっぽいけど未検証)。パスは .* を指定して js の先頭で判断すれば任意のプロジェクトにいる場合に実行することができるようになるのだけど、.* だらけになってどのプロジェクトを開いても js が html に埋め込まれて発動してしまうのが嫌になって PR を作った (余程の量を書かなければ性能影響はないと思うけど・・・)。

登録時の UI でプロジェクト識別子が明確に指定できるので、今まで存在を知らなかった人にも嬉しいのではないかと思う。

任意のプロジェクトで js を発動できるようになると、任意のプロジェクト選択中に任意の自作タブを表示するような事ができる (プロジェクト、活動、チケットのタブの横とか)。自分担当や任意のクエリタブを追加したりすると便利で、チケットを開いてもタブは表示されたままなので簡単に選択できてとても便利。

Twitter を見ると良い反応が多かったので良かった。

GitHub Actions 実践入門

入門した。便利。

最近は Twitter を見てると心が荒むのであまり見ないよにしていて、ブラウザでタイムラインを開いたら自分のプロファイルに飛ぶようにしたり、スマホの場合はドメイン丸ごと見えないようにする拡張を入れたりとかしているのだけど生存確認というか承認欲求のために GitHub のコミット記録を画像付きで垂れ流すようにしてみた。

実装は単純だけどテスト書いて GitHub Actions で push のたびに実行されるようにしてみた。

便利。テストを書いてたら test-unit-rr が便利だということも知れてよかった。

Twitter で自分のページしか見ないようにする Tampermonkey

色々と精神を揺さぶられることが多くなってきたので。

// ==UserScript==
// @name         twitter
// @namespace    http://basyura.org/
// @version      0.1
// @description  twitter save
// @author       basyura
// @match        https://twitter.com/*
// @grant        none
// ==/UserScript==

(function() {

    'use strict';
    const func = () => {
        setTimeout(function() {
            document.querySelector('[data-testid="sidebarColumn"]')
                    .style.display="none";
        }, 0);


        if (window.location == "https://twitter.com/notifications") {
            return;
        }

        const url = "https://twitter.com/basyura";
        if (!window.location.toString().startsWith(url)){
            window.location = url
        }
    }


    func();

    var observer = new MutationObserver(function(mutations) {
        func()
    });

    observer.observe(document, { childList: true, subtree: true });

})();

script をローカルで管理できたらいいんだけどなぁ。

inkdrop - sidetoc plugin v1.7.0 release

マイナーバージョンをガンガン上げていくのも微妙 (ブログ書くのが手間だな) と思って パッチバージョンを上げて機能を追加してメジャーバージョンアップ時にまとめてブログを書くのがいいかなと思ったけどパッチバージョンはバグフィックスにやっぱ使いたいなと一周した。

すでに 1.6.x でリリース済みであるけど 1.7 としてリリースしました。

  • プレビュー表示の際に
    • 対象のヘッダをある程度(汗)の判定で強調表示するようにした
    • ヘッダクリックでジャンプするようにした
    • jumpToNext (Prev) コマンドをプレビューでも使えるようにした
  • codeblock 内のコメントがヘッダとして認識されていたのを修正した。
    • ただし、html タグ内はサポート対象外とした (markdown で普通に?html タグが使えるの知らなかった)

evernote や bear を使っていて僕自身が前々からほしいと思っていて作った plugin なのだけど、一部の方には好評なようなので作ってよかったと思った。

Boot Redmine on Docker

久々に触るといろいろ変わってるのと記憶力がなさすぎるのとですぐハマるので未来の自分のためのメモ。

boot

$ curl -sSL https://raw.githubusercontent.com/bitnami/bitnami-docker-redmine/master/docker-compose.yml > docker-compose.yml
$ docker-compose up -d

plugin を入れたい

nokogiri に必要なもの

$ apt-get install build-essential patch ruby-dev zlib1g-dev liblzma-dev
$ gem install nokogiri -v 1.10.9

bundle install に必要なもの

$ sudo apt-get install libmariadb-dev libpq-dev

単純に実行するとエラーが出る

$ bundle install

You are trying to install in deployment mode after changing
your Gemfile. Run `bundle install` elsewhere and add the
updated Gemfile.lock to version control.

If this is a development machine, remove the /opt/bitnami/redmine/Gemfile freeze 
by running `bundle config unset deployment`.

The dependencies in your gemfile changed

You have added to the Gemfile:
* activerecord-compatible_legacy_migration

設定を変更 (開発系だよマークを付ける意味合いっぽい)

$ bundle config unset deployment 

インストール

$ bundle install --no-deployment
$ bundle exec rake redmine:plugins:migrate RAILS_ENV=production

Gemfile に追記

gem "activerecord-compatible_legacy_migration"

再起動

$ passenger-config restart-app

docker compose した rails アプリだと Gemfile.lock が更新されないらしい?
再起動できてないのかコンテナを落とし上げしたら反映された。