モノラルログ

マツオ ( @matsuoshi / monaural.net ) のざっくりしたブログです

PhpStorm のフォルダ単位の diff ビューアーを、コマンドラインから起動

PhpStrom の、フォルダ単位の差分表示機能

見やすくて助かってるんですが、この画面って CLI から起動できるんですね、しらんかった

pstrom diff <path_1> <path_2>

でいけるっぽい

f:id:matsuoshi:20210514103611p:plain

参考こちら

pleiades.io

リモートでの意思決定/合意の工夫として miro を使ってみた

合意の段階

書籍「アジャイルコーチング」の「合意を形成する」の章で出てくる「合意の段階」

なにか意思決定をする場面において、賛成や反対は、1か10かに分かれるとは限りません。だいたい途中に段階があるものです。「条件つきで賛成」とか、「やや反対」とか、「絶対反対」とか。

f:id:matsuoshi:20210414133649p:plain

それを見えるようにするものとして、この本では「合意の段階」というものが紹介されています。この図のように賛成〜反対を 5段階に分けて、自分の考えがどこらへんに当たるか、各自にチェックを入れてもらうような方法。

他にも「拳から5本指 (5 fingers)」という、0〜5本の指をみんなで出して意思を示す方法とか、Lean Coffee などで使われるサムズアップ/ダウン 👍 👎 の方法とか。せーの、で同時に親指を出してもらったりする感じですね。

全員同席でやるなら、このへんのやり方はお手軽です。

リモートでこれをやる

リモートの場合はどうしよう。特にカメラ ONを強制していない場合。

カメラOFF の状態でも、こんな感じの意思決定方法を試したいなということで、miro でひと工夫してみました。

f:id:matsuoshi:20210414134442p:plain

まあ、miro 使ったことある方なら ↑ で一目瞭然だと思うのですが、miro って全員のカーソルが表示されるじゃないですか。

それを使って、「せーの」でカーソルで指し示してもらう方法です。

めちゃシンプルですし、みんなのカーソルが一斉に動くさまは、意外と楽しいですよ。

f:id:matsuoshi:20210414134650p:plain

サムズアップ 👍 サムズダウン 👎 もこんな感じで。

PHP の array_column() という便利関数を今さら知った

PHP 5.5 から入ってた array_column という関数を知らなかった。便利やん。今月知った。

いうなれば、laravel collection や underscore.js の pluck に相当するやつ。PHP標準で入ってたんですね……

www.php.net

array_column の使い方

このような二次元の連想配列があったとき

<?php
$records = [
    [
        'id' => 2135,
        'first_name' => 'John',
        'last_name' => 'Doe',
    ],
    [
        'id' => 3245,
        'first_name' => 'Sally',
        'last_name' => 'Smith',
    ],
    [
        'id' => 5342,
        'first_name' => 'Jane',
        'last_name' => 'Jones',
    ],
    [
        'id' => 5623,
        'first_name' => 'Peter',
        'last_name' => 'Doe',
    ]
];

array_column() を使い、第2引数にほしいキーを渡すと、こんな感じ

渡したキーの値だけを抜き出し、配列として返してくれる

$first_names = array_column($records, 'first_name');
print_r($first_names);

Array
(
    [0] => John
    [1] => Sally
    [2] => Jane
    [3] => Peter
)

第3引数もある

第3引数にもキーを渡せまして、その場合、第3引数のフィールドをキーにした連想配列として返してくれる

$first_names = array_column($records, 'first_name', 'id');
print_r($first_names);

Array
(
    [2135] => John
    [3245] => Sally
    [5342] => Jane
    [5623] => Peter
)

これはよく使いそう。

別の使い方

第2引数を null にして第3引数を渡すと、第3引数をキーにした連想配列として、全体を返してくれる

$sorted = array_column($records, null, 'id');
print_r($sorted);

Array
(
    [2135] => Array
        (
            [id] => 2135
            [first_name] => John
            [last_name] => Doe
        )

    [3245] => Array
        (
            [id] => 3245
            [first_name] => Sally
            [last_name] => Smith
        )
    // 以下略

これもよく使うケースだな〜

オブジェクトにも使える

PHP公式マニュアルによると

オブジェクトの配列を指定した場合は、public プロパティはそのまま取得できます。 protected や private なプロパティを取得したい場合は、そのクラスがマジックメソッド get() および isset() を実装している必要があります。

とのことで、連想配列だけでなくオブジェクトにも使える。(PHP 7.0以降)

知らんかった

symfony とか使ってて pluck ないのかな〜 とか調べてたんだけど、なんてことはない PHP 標準にあったのであった。知らんかった。

関連

underscorejs.org

readouble.com

Karabiner で、英数キーを Cmd キーに置き換えてしまったが大丈夫

また Karabiner でのキーボード設定メモ。

cmd キーを押すつもりが、間違って英数を押しちゃった!

というのをなくしたい

ええい、いっそ英数キーを cmd キーにしてしまえ!

でもやっぱり英数キーも使うので、

  • 英数キー押しながら、なにかのキーを押す → cmd キー扱い
  • 英数キーを単体で押す → 英数キー扱い

にします。しました。これなら大丈夫。

Karabiner-Elements ならね。

ということで Karabiner用のコードはこちら

ところで、いつ英数キーを使ってるか?

という話ですが、私の場合は、

IMEをオンのまま、アルファベットを打ち始めてしまったとき」

ですね。

打ってる途中に「日本語オンのままにしてた!」と気づいても、英数キーを2回連打したらアルファベットに戻してくれます。英数キー役にたってる。

Karabiner を使って、マウスの右ボタン+トラックボール操作でスクロールする

急にトラックボール派になりました。

ということでトラックボール + Karabiner Elements を使って少しカスタマイズしたことのメモなどです。

カスタマイズ内容まとめ

  • 右ボタンをホイールクリックにする
  • 左右ボタン同時押しで右クリック
  • 右ボタン押しながらトラックボールを動かすと、スクロールする

といった感じになります。

右手がつらかった……

いままでは普通にマウスを使ってたんです。けど、いやもう、去年からずっと右肩〜腕〜手首〜親指あたりがしんどすぎて。痛みがひかない状態が長く続いておりまして。藁にもすがる思いで、デバイス変えてみたら負担のかかり具合も変わってくるかな?? と思ってトラックボールにトライしてみた次第です。

購入したのはこちら、ケンジントンOrbital Trackball with Scroll Ring (3000円台後半くらい)

結果、いまのところ快調。手放せない感じになっています。

トラックボールとしては他にロジクールの M575S とか、エレコムの HUGE とかも試してみたんですが、どれもメリット・デメリットある感じでしたね。決め手は右親指の負担低減のとこでした。(モノによっては、ボタンやホイール操作が親指に集中しがちな機種もあって……)

Orbital Trackball

Kensington といえばトラックボール界の老舗ですよね。モデルはいろいろありますが、低価格な "Orbital Trackball with Scroll Ring" をひとまずトライしてみた感じ。

結果、形状的に手にしっくりなじむ。持ちやすいし、左右のボタンが大きくて、押しやすい。ほんとに親指を上から下に動かすだけで、あまり関節を曲げずにクリックできる。手の負荷はかなり下がったように思います。

リストレストをつけるとサイズ感はそこそこデカいけど、トラックボールはマウスと違って移動させないので、設置面積的にはむしろスペースをとらなくなりました。マウスパッドいらんもんな。

気がかりな点としてはボタンが2個しかないんですよね。あとスクロールリングが独特で、ちょっと慣れがいりそうかも。便利っちゃ便利なんだけど。

てことで、ちょっと Karabiner Elements を使って操作をカスタマイズしてみました。

www.kensington.com

Karabiner Elements でカスタマイズ

カスタマイズ方針はこんな感じ。

  • 2ボタンしかないので、せめて3ボタン相当の機能をもたせよう
  • ホイールクリック(ミドルクリック) は多用する。いっそ右ボタンをホイールクリックにしてしまえ
  • 右クリックも無くすわけにはいかないので、左右のボタン同時押しで右クリック扱いにしよう
  • 右ボタン押しながらホイールを動かしたら、スクロールできるようにしよう

コードは記事の末尾に貼っつけときます、gist だとこちらです。

https://gist.github.com/matsuoshi/3098a0a922134edcd77edffd86d77afe

他に試してみたトラックボール

比較したときの感想メモ。

Logicool M575S

売れ筋機種。

これは完全に好みだろうけど、ボールを右親指で動かすのに慣れなかった。(そもそも親指が痛いからトラックボール試してたので、親指以外でボールを扱う機種がよかった感じ)

ボタンやホイールの位置は一般的なマウスと同じなので、マウスからトラックボールに乗り換えるならこの形状が一番違和感少ないようには思う。

Elecom の HUGE (M-HT1DRXBK)

8ボタンと多機能。また、ボール自体がでかいので、カーソル操作はとてもやりやすい。ボールのサイズで操作感って大きく変わるってくるんだなあ。

ただ、親指側にボタンとホイールが集中しているので、親指が痛い自分には向かなかった。あと、Mac用のドライバで、自分のやりたいことができず(ホイールクリックがうまく効いてくれない……) ってのもちょっとマイナスポイントでした。

価格も安いし安定感はあったなー

コード

Karabiner Elements でのコード。