ブログ

読んで思い出す。忘れるために書く

WSL2 + 1Password で SSH 接続・通信をする (npiperelay, socat)

目的・ゴール

1Password が SSH キーを管理できる ので、それを WSL 上でも可能にする

今回の対象は GitHub で、通信テストをして成功すれば OK

環境・前提

おおまかな手順

  1. npiperelay.exe をインストール (Windows)
  2. socat をインストール (Ubuntu)
  3. ~/.bashrc に設定記述
  4. WSL のシャットダウン・再び起動
  5. 動作テスト

npiperelay.exe のインストール

Windows 上で操作。go コマンドを使うとラク

go install github.com/jstarks/npiperelay@latest

# → C:\Users\__my_user_name__\go\bin\npiperelay.exe

socat のインストール

今度は WSL 上で操作

sudo apt install socat

~/.bashrc の設定記述

引き続き、WSL 上。

NPIPE_RELAY_EXEC_PATH には、Windows 側でインストールした PATH を、Ubuntu 側から参照できる形の PATH として記述する

# Configure ssh forwarding
export SSH_AUTH_SOCK=$HOME/.ssh/agent.sock
# need `ps -ww` to get non-truncated command for matching
# use square brackets to generate a regex match for the process we want but that doesn't match the grep command running it!

NPIPE_RELAY_EXEC_PATH="/mnt/c/Users/__my_user_name__/go/bin/npiperelay.exe"

ALREADY_RUNNING=$(ps -auxww | grep -q "[n]piperelay.exe -ei -s //./pipe/openssh-ssh-agent"; echo $?)

if [[ $ALREADY_RUNNING != "0" ]]; then
    if [[ -S $SSH_AUTH_SOCK ]]; then
        echo "removing previous socket..."
        rm $SSH_AUTH_SOCK
    fi
    echo "Starting SSH-Agent relay..."
    (setsid socat UNIX-LISTEN:$SSH_AUTH_SOCK,fork EXEC:"$NPIPE_RELAY_EXEC_PATH -ei -s //./pipe/openssh-ssh-agent",nofork &) >/dev/null 2>&1
fi

WSL のシャットダウン・再び起動

Windows 上で操作。

設定を終えたら、Windows 側で 一度 WSL をシャットダウンする

wsl --shutdown

もういちど WSL (Ubuntu) を起動してみると、~/.bashrc に記述したとおり、echo で文字列が出力されるようになるはず

動作テスト

ssh のテスト接続で、Windows, Ubuntu どちらも 1Password が介入してくるはず

Windows

ssh -T git@github.com

WSL (Ubuntu)

ssh -T git@github.com

Links

Power Automate で外部アプリケーションを操作して、ウィンドウ位置を規定位置に復元する

目的とゴール

Power Automate を用いて自動化処理をしているが、操作対象としているアプリケーションのウィンドウ位置が原因で、上手く動かないことがある。

これを直したい

事前準備

外部ツール

外部ツールとして「ウィンドウ位置記憶プログラム (VbWinPos)」を用いる

適当なディレクトリにインストールして、操作対象としているアプリケーションのウィンドウを捕捉・記録しておく (設定を終えるとアプリケーション終了時、 *.ini ファイルに記録してくれる)

このとき、「一括セット」のチェックボックスを有効化しておく。(あとの自動化を楽にするため)

やること

おおまかな やること:

  • 「アプリケーションの実行」
  • 「プロセスを待機する」
  • 「マウスを画像に移動」
  • 「マウスクリックの送信」
  • 「プロセスを終了する」

フローの全体図

アプリケーションの実行

「システム - アプリケーションの実行」から、アクションを持ってくる

「アプリケーション パス」に VbWinPos の実行ファイルがある場所を指定する

プロセスを待機する

「システム - プロセスを待機する」から、アクションを持ってくる

「プロセス名」には「VbWinPos」を設定する

マウスを画像に移動

「マウスとキーボード - マウスを画像に移動」から、アクションを持ってくる

「マウスの移動先の画像」では、VbWinPos の「座標セット (S)」ボタンを指定する

マウスクリックの送信

「マウスとキーボード - マウス クリックの送信」から、アクションを持ってくる

「送信するマウス イベント」では、「左クリック」を指定する

プロセスを終了する

「システム - プロセスを終了する」から、アクションを持ってくる

「プロセスの指定方法」は「プロセス名」を指定し、「プロセス名」では「VbWinPos」を設定する

Links

O'Reilly Japan で購入した本を Dropbox 経由で iOS Kindle のライブラリに追加する

問題

Amazon では 端末と紐付けたメールアドレスを提供していて、50MB までのファイルサイズに対応しているらしい

一方 Gmail は 25MB までの対応らしく、購入した本によっては メール経由で送ることができない

(本記事を書いている時点で そもそも「大きなファイル (10MB 以上?) は Google Drive に保管して 共有 URL を発行した方がいいよ」と案内が出て送れなかった)

解決

PC 経由で一度 Dropbox に保存する

詳細は次の通り:

  1. PC で本を購入し、EPUB ファイルをダウンロードする
  2. Dropbox にファイルを置く
  3. iPadDropbox で本を選び、「共有」-「Send copy of file」から、Kindle を選択する

この手順で、あとは「ファイル名」「著者名」を設定することで、Kindle に送信される

Link

経歴情報から のべ経験年数を計算する

計算したことなかったので、できるようにした

前提

経歴情報は Proff に保存している

各経歴の「いつから いつまで」は「年・月」のみで、「日」は含まれない

入力データは

20143 20149
20162 20175

のように「yyyymm」「yyyym」のいずれかで整形されている

(Proff の経歴情報を一部コピペすると 2つの「年月」情報が手に入る

これを手動でスペース区切りとして編集する

実際のデータと実装

今回は、自分が分かればいいので、なぐり書きで書いた。

gist.github.com

Q. 外部から購入した EPUB ファイルを iPad + Amazon Kindle で読みたい

A. 端末に紐づくメールアドレスが与えられているので、そこに EPUB ファイルを添付して送信する

Everyday Rails - RSpecによるRailsテスト入門」のような本を、「my-account-name_xxxxxx@kindle.com」宛に、任意のメーラーで送信する

3分〜10分ほど待てば、ライブラリに追加された旨、メールが来るので、当該端末で読めるようになる

Links

FizzBuzz の練習課題を解いた (TypeScript)

プロを目指す人のためのTypeScript入門 安全なコードの書き方から高度な型の使い方まで」を読み進めて練習課題が出てきたので解いた

gist.github.com

Links