dotnet run --configuration Release
FizzBuzz を書いた (Haskell)
paiza ラーニングの Haskell 問題集 を進めていて、FizzBuzz 回答まで到達できたので記録
パターンマッチングと mapM_
を活用した関数合成で解くことができた
回答コード
-- 関数定義 isFizzBuzz n = (isFizz n) && (isBuzz n) isFizz n = (n `mod` 3) == 0 isBuzz n = (n `mod` 5) == 0 fizzBuzz n | isFizzBuzz n = "FizzBuzz" | isFizz n = "Fizz" | isBuzz n = "Buzz" | otherwise = show n -- メイン main = do -- FizzBuzz のパターンマッチングと その結果を `putStrLn` で標準出力に出す mapM_ (putStrLn.fizzBuzz) [1..100]
Links
asdf でインストールする Vim のクリップボード機能を有効化する (WSL2)
TL;DR
asdf を使うと、たとえば Vim とか サクッといろいろインストールできる
でも通常は「-clipboard」になるから「+clipboard」にするためには 準備が必要かも
(※ vim --version|grep clipboard
で拡張機能が有効化されているか否かを確認できる)
あといろいろカスタムインストールしたい
おおまかな手順
Ubuntu に libxt-dev
をインストールする
apt
コマンドを叩く
sudo apt update sudo apt install libxt-dev
asdf でインストールするときにオプションを渡す
次の ShellScript を実行する
#!/bin/sh # ASDF 経由で Vim のビルドに使うオプションを設定 ASDF_VIM_CONFIG="\ --with-x=yes \ --enable-cscope \ --enable-fail-if-missing \ --enable-fontset \ --enable-gpm \ --enable-gtk2-check \ --enable-multibyte \ --enable-perlinterp=dynamic \ --enable-python3interp=dynamic \ --enable-rubyinterp=dynamic \ --enable-terminal \ --with-compiledby=asdf \ --with-features=huge \ --with-tlib=ncurses \ " \ asdf install vim latest # 最新版をインストール asdf global vim latest # インストールしたヤツを使う # 機能確認用 (ここが実行されたらバージョン確認, `/clipboard` で拡張機能の状態を確認する) if ! command -v vim &> /dev/null; then vim --version | less fi
「デフォルトで渡されるオプション」は GitHub 上で確認できる
これで足りなかったり削りたかったりがあれば、上のようにオプション設定をしてあげるとよい
Links
- asdf | asdf
- tsuyoshicho/asdf-vim: A simple asdf plugin for vim - GitHub
- asdf-vim/bin/install at d8c7433d452cad949d605f9ade43c135bde63844 · tsuyoshicho/asdf-vim - GitHub
- compiling - Why do I get a "configure: error: Could not compile basic X program." error when trying to compile Spidermonkey? - Ask Ubuntu
- Ubuntu – focal の libxt-dev パッケージに関する詳細
- WSL2でvim/tmuxでクリップボード共有できるようにする
Ubuntu に gitsh をインストールする (configure, make)
目的・ゴール
brew install gitsh
や pkg_add gitsh
とかはサポートされてるけど、Ubuntu では gitsh を「コマンドひとつで簡単にインストール」する方法が用意されていない
ソースコードからバイナリを生成してインストールをする (configure
と make
)
おおまかな手順
- ソースコードのダウンロードと展開 (
wget
,tar
) configure
で構成設定make
でバイナリ生成とインストール- 動作確認
ソースコードのダウンロード
記事を書いている時点では v0.14 が最新なので、タグ情報から v0.14 のページ を表示させる
tar.gz ファイルを wget でダウンロードする
cd ~ # ホームディレクトリに移動 # ダウンロード wget https://github.com/thoughtbot/gitsh/releases/download/v0.14/gitsh-0.14.tar.gz # 展開 tar xzf gitsh-0.14.tar.gz
configure
で構成設定
先ほどダウンロードと展開をしたディレクトリに移動 (cd gitsh-0.14
) して、設定をしていく
INSTALL ファイルにもインストール方法が書かれているので参考にする
# HINT: ./configure --help で 設定可能なオプション一覧が見られる # 1. バージョン管理ツール (`rbenv`, `anyenv`, etc...) を使ってる場合、Ruby の PATH が通常と異なる場合があるので RUBY オプションをつかう # 2. /usr/local/bin など管理者権限が必要な場所にインストールしたくない ...自分だけで使いたい... ので --prefix 指定をする RUBY="$(which ruby)" ./configure --prefix="~/.local"
make
でバイナリ生成とインストール
あとはインストールするだけ
make && make install
動作確認
gitsh
を叩いて起動するか確認する
Links
WSL2 + 1Password で SSH 接続・通信をする (npiperelay, socat)
目的・ゴール
1Password が SSH キーを管理できる ので、それを WSL 上でも可能にする
今回の対象は GitHub で、通信テストをして成功すれば OK
環境・前提
-
- WSL2 (Ubuntu)
- 1Password (開発者向け設定で「SSH エージェントを使用」を ON)
- go 言語 がインストールしてある
-
- 1Password に管理を任せて、GitHub 上で SSH キーを作成 済み
おおまかな手順
npiperelay.exe のインストール
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
- GitHub アカウントへの新しい SSH キーの追加 - GitHub Docs
- WSL のインストール | Microsoft Learn
- 家族や大小のビジネスで使えるパスワードマネージャー | 1Password
- 1Passwordのssh-agent機能をWSL2でも利用する #GitHub - Qiita
- 1passwordで登録したSSHキーをWSLで利用する方法 - 技術的な何か。
- WSL1/WSL2 を再起動する方法 - 備忘録
- The Go Programming Language
- jstarks/npiperelay: npiperelay allows you to access Windows named pipes from WSL - GitHub
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 に保存する
詳細は次の通り:
- PC で本を購入し、EPUB ファイルをダウンロードする
- Dropbox にファイルを置く
- iPad の Dropbox で本を選び、「共有」-「Send copy of file」から、Kindle を選択する
この手順で、あとは「ファイル名」「著者名」を設定することで、Kindle に送信される