kikukawa's diary

都内で活動するシステムエンジニアが書いてます。 興味を持った技術やハマったポイント、自分用メモをつけてます。 最近はweb中心

変態キーボードと名高いGrabShellをレビュー

はじめに

この記事は、 Makuake Advent Calendar 2023 6日目の記事です。 GrabShellというかなり変わったキーボードを購入したのでそのレビューです。 私は以前LT会でキーボードに対する熱い思いを語った結果、変態キーボーダーという称号を得てしまったことがあります。 そんな私なので、GrabShellを知った時は迷わず予約してしまいました。

ちなみに記事中のAmazonへのリンクはアフィリエイトを全く貼ってないので、ご安心ください。

GrabShellとは

dotBravoという会社が出した新しい形のキーボードです。
手に持って使うことを前提として設計されていますが、変形させて卓上に置いて使うこともできます。 卓上に置く場合はそこそこの広さが必要になります。

GrabShell公式サイト

使った感じ

私は少し改造して使っているので、机に置きつつ握って使ってます

レビュー

サイズがデカい

私は平気的な成人男性の手の大きさだと思うのですが、握って使うと背面奥のキーには指が届きません。頑張って伸ばせば届くかなという感じです。キーキャップや軸を既存のキーボードと互換性を持たせてるためか、キーのサイズがそのままなので製品全体的に大きいです。
また、気軽に持ち運びできるサイズかというとそうでもないです。購入すると専用のケースがついてくるのですが、そのケースがちょっとしたバッグくらいのサイズになります。
サイズが大きいので当然重いです。握ったまま長時間使うには無理があるので置いて使うことになります。

個体差があるっぽい

X(旧twitter)で検索すると、トラックボールの動きなどに個体差がある感じの感想が散見されます。後述しますが、この辺は解決法があるのであまり気になりません。

タイピングをマスターするのは時間がかかる

通常のタイピングと感覚が全く違うので、慣れるまで時間がかかります。2023年10月に届いてからちょこちょこ使ってますが、いまだにスムーズに打つまではいってません。私はそこそこタッチタイピング(ブラインドタッチ)できる方ではあると思いますが、それでも時間かかるので、タッチタイピングできない人は苦労すると思います。
デフォルトのキーマップだとCMD,SHIFT,OPTなどの装飾キーとのショートカットはもっと苦労しますが、キーマップ変えれば大丈夫です。

公式からアナウンスがありましたが、数字キーはレイヤー2で打つといいそうです。個人的には上下左右のキーもレイヤー2で打った方がいいかなと思います。

肩こりが減った

私がずっと探し求めているキーボードに最も近い形をしていたので、期待はしていたのですが見事に肩こりが減りました。 置き方、握り方、打ち方にもよると思うので一概には言えないですが、私には効果がありました。

カスタマイズはそこそこできる

キーの軸、キャップ、キーマップは変更可能です。
キーマップはVIAというサイトを使って簡単に変更できます。

カスタマイズ

私は物理的なカスタマイズをいくつかしているのでそれを紹介します。

トラックボールの交換

トラックボールの支持球の交換

ここは必須級で変えた方がいい気がします。滑りが全然違います。

キーキャップの変更

背面側のキーキャップを変更しました。キーキャップの背が高いと奥のキーを押す時に手前を押してしまうので変えました。
全部変えてもいいと思うのですが、私は一番奥の1列だけはそのままにしてます。奥は逆に高い方が指が届きやすい気がしてます。あと、触った時に感触が違うのでタッチタイピングの助けになってます。

傾きをつける

私は基本的には机に置いて握った状態で使ってます。そうなった時に垂直よりは、奥側にやや傾けた方が手が楽です。自然にそうなるように底面にこの傾斜調整用のゴム足をつけてます。

実際につけた感じ

ワッシャー

立てて使う構造上、トラックボールを支えてるパーツの締め付け具合が、ダイレクトにトラックボールの滑らかさに影響します。ここの締め付け具合を調整するのにワッシャーをいくつか挟んで調整しました。

最後に

万人にお勧めできるものかというと、現時点ではまだそうではないなという感じです。
大きい、重いがネックです。 とはいえ、私自身はそれ以上のメリットを感じたのでこのまま使い続けたいと思います。

M1 MacにStable Diffusion環境を作っていい感じに使えるようにする

はじめに

この記事は、 Makuake Advent Calendar 2023 4日目の記事です。

M1 MacにStable Diffusion Web UIをインストールしていい感じに使っていけるようにします。 Stable Diffusionを構築する方法は色々ありますが、Web UI(AUTOMATIC1111)を使っていくのが現状では一番楽かと思います。

Stable Diffusion Web UIとは

ローカル環境にStable Diffusionを構築し、それをWeb UI経由で操作できるようにしたものです。 Web UIをインストールすることで、Stable Diffusionの環境も一緒に構築されます。 それをブラウザ経由で操作する形になります。

Stable Diffusion Web UIのインストール

事前準備

brew辺りで以下をインストールしておきます。

  • cmake
  • protobuf
  • rust
  • git
  • wget

Stable Diffusion Web UIのインストールと実行

インストールといっても、githubからクローンしてくるだけです。

$ git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui

クローンが終わったら、起動します。
初回起動時は色々とダウンロードしたりインストールしたりで、立ち上がるまで時間がかかります。 シェルを叩いたら、ログが流れるのでその中に出てくるURLにアクセスします。 ちゃんと起動できれば、勝手にブラウザが起動して表示してくれるはずです。

$ cd stable-diffusion-webui
$ ./webui.sh

Stable Diffusion Web UIの初期画面

動作確認

とりあえず1枚画像を生成してみます。   画面左上にある Stable Diffusion checkpoint の横にあるリロードマークをクリックすると、 プルダウンで、 v1-5-pruned-emaonly.safetensors が選べるようになります。 txt2img のタブが選択されていることを確認して、その下のテキストボックス(ポジティブプロンプトの入力欄)に適当な文字を入力して、 Generateをクリックします。 すると、画像が作成されるはずです。 以下はサンプルで生成した画像です。

いい感じにしていく

とりあえず、画像生成する環境はできたのですが、さらに使いやすくするためにエクステンションを追加していきます

エクステンションの追加方法

主に2つのやり方があるのでそれぞれ説明します。

  1. すでに用意されているものを選択して追加する方法
  2. githubのurlを指定して追加する方法

すでに用意されているものを選択して追加する方法

  1. Extentions タブをクリック
  2. Availableタブをクリック
  3. Load Fromをクリック

すると、インストールできるもの一覧が出るので、それぞれの右側にあるInstallボタンをクリックする

githubのurlを指定して追加する方法

  1. Extentions タブをクリック
  2. Install From URLタブをクリック
  3. URL for extension's git repository にリポジトリのURLを入力し、Installをクリック

おすすめエクステンション

入れておいて損のない最低限のものを選んでみました

  1. CivitAI Browser+

    • 1の方法で追加
    • civitai でダウンロードできるモデルなどをStable Diffusion Web UI上でダウンロード、管理できるようになります。
    • civitaiを開いてダウンロード、ダウンロードしたファイルをStable Diffusion Web UIの所定の場所に配置という手間を省けます。
    • 各モデルのサンプル画像、その他の情報をStable Diffusion Web UI上で閲覧、使用できるようになります。
  2. Infinite image browsing

    • 1の方法で追加
    • 生成した画像のブラウジングを楽にする
    • 生成した画像から各種情報をtxt2imgなどの生成画面に転送することができる
  3. Umi-AI

    • 2の方法で追加
    • URL: https://github.com/Klokinator/Umi-AI
    • プロンプトの記法を拡張できる
    • { a | b | c} と書くことで、a or b or cのどれかを選択というようなことができるようになる
  4. a1111-sd-webui-tagcomplete

    • 2の方法で追加
    • URL: https://github.com/DominikDoom/a1111-sd-webui-tagcomplete.git
    • プロンプトの入力欄でautocompleteが効くようになる
  5. sd-webui-prompt-all-in-one

    • 2の方法で追加
    • URL: https://github.com/Physton/sd-webui-prompt-all-in-one.git
    • プロンプトの入力関連のall in on。色々な機能があるが、とりあえず入れれば使い方はなんとなくわかる
  6. sd-webui-prompt-format

    • 2の方法で追加
    • URL: https://github.com/Haoming02/sd-webui-prompt-format
    • プロンプトの入力欄をフォーマットしてくれる

kkkw.hatenablog.jp

Stable Diffusionを始める前に知っておくべきこと

はじめに

この記事は、 Makuake Advent Calendar 2023 3日目の記事です。

Stable Diffusionを始める前に知っておくべきこと

遅ればせながら、今年に入ってようやくStable Diffusionを触り始めました。 この辺最初から知ってたらよかったなと思うことをまとめました。

環境について

AIでイラストを描く方法はいくつかあります。
自分のパソコンのスペックや予算、作成頻度などよく考えて選定した方がいいと思います。

  • 自分のパソコンにStable Diffusion環境を作る
  • Google Colabなど実行環境をレンタルしてそこにStable Diffusion環境を作る
  • AIイラストを生成できるサイトを使う
  • 専用アプリをインストールする

一つずつ見ていきます。

自分のパソコンにStable Diffusion環境を作る

最も自由度が高い方法ですが、知識、時間、お金(PCのスペック)が必要になります。
昔に比べインストーラーなどが整ってきているので、構築自体の難易度は下がっているますが、 エラーなどに出会った場合自分で解決しなければいけません。 ちょっと試してみたいといったレベルでは、この手段を取らない方がいいでしょう。
その反面、一度構築してしまえば、何度でも実行できますし、バッチで寝ている間に実行させるみたいなこともできます。

Google Colabなど実行環境をレンタルしてそこにStable Diffusion環境を作る

自分のパソコンに環境を作る時と同じく知識は必要になってきます。 ですが、手元に高性能のパソコンがない、ディスクの容量を圧迫したくない、自分のパソコンの環境を汚したくないなどの場合には選択肢に入ると思います。
Google Colabの使い方を知っている人なら、情報もそこそこあるのでそこまで困ることはないかなという印象です。Colabが一番情報が多いので、Colabで作るのが無難です。
ただ、Colabの制限が入ってくるので、自分のPCで作るような自由さはありません。

AIイラストを生成できるサイトを使う

無料から有料までAIでイラストを作成できるサイトがたくさんあります。 多くの場合は、生成できる数が限られていたり、使用するモデルなどが制限されたりしています。 同時に多くの人が生成した画像とそのキーワード(プロンプト)が、一緒に公開されているので自分で作るときの参考になります。 目的にあったサイトを見つけられれば、少ない労力で画像が生成できます。

専用アプリをインストールする

iOSAndroid向けに専用アプリが出ています。 タブレット用のアプリが多いですが、スマホで実行できるものもあります。 スマホタブレットで実行するためそもそも数をこなすには向いてません。 出先でちょっと作ってみたいという感じに使うのが良さそうです。

用語について

最低限知っておいた方が良い用語です。 簡単な説明なので、正確ではありません。正確な情報は別途調べてください。

  1. モデル:
    • 生成する画像の系統を決めるものです
    • まず、これを決めてから細かいことを決めていきます
    • 色々なサイトにモデルがあるので自分が作りたい画像の系統に似たモデルを探しましょう
  2. Lora:
    • メインのモデルと併用するサブ的なモデルです
    • Loraを使わずに画像生成することもできます
  3. txt2img:
    • プロンプトと呼ばれるテキストの羅列で画像を生成する方法です
    • プロンプトの書き方や順番で作成したい絵を誘導します
  4. img2img:
    • 元画像を用意して、その画像を加工する形で画像を作成する方法です
    • txt2img同様にプロンプトで作成したい絵を誘導します
  5. プロンプト(ポジティブプロンプト):
    • 画像を生成する命令文です
    • カンマ区切りで複数の命令を同時に指定できます
    • 命令に沿った絵を生成しますが、必ずしも狙った通りにはなりません
  6. ネガティブプロンプト:
    • ポジティブプロンプトとは逆に、「こうなってほしくない」ことを命令します

dotfilesの管理をrcmからchezmoiに移行した

こちらで導入していたrcmからchezmoiに移行しました。

kkkw.hatenablog.jp

chezmoiにした決め手

  • golang製なのでどこでも動かせる
  • template機能がgolangなので個人的にわかりやすい
  • bitwardenなどのパスワードマネージャーと組み合わせられる

インストール

mac

$ brew install chezmoi

ubuntu

$ sudo snap install chezmoi --classic

コマンド

# 管理対象の一覧
$ chezmoi managed
# 既存のファイルをchezmoi管理にする
$ chezmoi add ~/.zshrc
# 既存のファイルをテンプレートとして追加する
$ chezmoi add --template ~/.zshrc
# すでに管理下に置かれているファイルをテンプレートとして扱うよう変更する
$ chezmoi chattr +template ~/.zshrc
# 編集
$ chezmoi edit ~/.zshrc
# 適用(ドライラン)
$ chezmoi apply --dry-run --verbose
# 適用
$ chezmoi apply
# ファイル指定で適用
$ chezmoi apply ~/.zshrc
# リポジトリに移動
$ chezmoi cd
# templateで使える変数の確認
$ chezmoi data
# gitリポジトリの(他マシンでの)変更を取り込む
$ chezmoi update
# templateのテスト
$ cat foo.tmpl | chezmoi execute-template
# templateのテスト2
$ chezmoi cat ~/foo.yml

apply

chezmoiはdotfileを直接編集するのではなく、元ファイルを編集し、それを反映するスタイルです。 編集するファイルは、 ~/.local/share/chezmoi にあります。 編集したものを反映するためのコマンドがapplyです。

add

chezmoiの管理対象にファイルを追加したい時に使います。

cd

chezmoiは管理対象のファイルを ~/.local/share/chezmoi に集めてそこをgit管理します。 chezmoi git というサブコマンドがあるので、移動しなくてもgit管理はできますが、直接git操作したい時に対象ディレクトリに移動します。

execute-template

私した文字列をtemplateとして実行した結果を表示します。 $ chezmoi execute-template '{{ .chezmoi.hostname }}' と実行するとhostnameが表示されます。 templateのデバッグをする際に必須です。

rcmからの移行

初期化

chezmoi で dotfile を管理するためのディレクトリを作成します。 以下コマンドで ~/.local/share/chezmoiディレクトリが作られます。ここが実体になります。自動的にgit initも行われます。

$ chezmoi init

私はrcmで管理していたリポジトリがあるのでリモートリポジトリの設定をしました。

$ git remote add origin git@github.com:kkkw/dotfiles.git

管理ファイルの追加

初期化したら管理したいファイルを追加していきます。 rcmは ~/dotfiles に実体を持って、各ファイルはシンボリックリンクです。 chezmoiにシンボリックリンクを追加する場合は add--follow オプションを使います。 下記を実行すると、~/.local/share/chezmoi にdot_zshrcというファイルが作成されます。

$ chezmoi add --follow ~/.zshrc

管理ファイルの編集

chezmoi edit ~/.zshrc でファイルを編集することができますが、 ~/.local/share/chezmoi を直接編集しても大丈夫です。 また、管理ファイルとして追加した後にtemplate機能を使いたい時は以下のコマンドでtemplate化します。 template化すると、dot_zshrcがdot_zshrc.tmplになります。

$ chezmoi chattr +template ~/.zshrc

template化した後は、 chezmoi data , chezmoi execute-template, chezmoi apply --dry-run ~/.zshrc を使ってデバッグしていきます。

bitwardenを使いたい場合

bitwarden-cliのインストール

mac

$ brew install bitwarden-cli

ubuntu

$ sudo snap install bw

templateの書き方

前提として、対象ファイルはtemplate化されている必要があります。 例えば、bitwardenにAPI_TOKENというアイテムが登録されていたとして、そのnotesにある値を使いたい場合は下記のようにします。

export API_TOKEN={{ (bitwarden "item" "API_TOKEN").notes | trim }}

bitwardenのカスタムフィールドを使っている場合は、別の関数を使います。 下記の場合はtokenという名前のカスタムフィールドの値を持ってきてます。

{{ (bitwardenFields "item" "API_TOKEN").token.value | trim }}

環境変数の設定

applyやexecute-templateをする前に下記でBW_SESSIONを設定しておきます。 ただし、私が実行したところ下記を設定していてもmacではマスターパスワードを毎回聞かれました。

$ export BW_SESSION=$(bw {login,unlock} --raw)

適応

管理対象にしたいファイルを全て追加した後にapplyします。 applyを実行した時にすでにシンボリックリンクがあるので、上書きの確認が出るので all-overwrite します。

別PCへの反映

別PCへ反映したい場合は、そちらでもchezmoiをインストールして、初期化、適応すれば終わりです。 下記コマンドで初期化、適応できます。

$ chezmoi init --apply git@github.com:kkkw/dotfiles.git

リポジトリgithubにあり、リポジトリ名が、dotfilesである場合は、ユーザー名の指定だけでinitできます。 --ssh オプションをつけないと、リモートリポジトリがhttpsで設定されます。

$ chezmoi init --apply --ssh kkkw

ちょっと分かりづらかったこと

マシンによって作りたくないファイル

macでは不要だけどubuntuでは欲しいファイル(.ubuntu-rc)というのがあったとしてそれをどう表現するのかがわかりませんでした。 結果としては、 .chezmoiignore というファイルを作ってその中で条件分岐で管理します。 ignoreファイルなので、不要な環境の時にそのファイル名が表示されるように管理します。

上記の例では、macでは.ubuntu-rcを作りたくない、ubuntuでは.ubuntu-rcを作りたい。 dot_ubuntu-rcとして元ファイルは作っておきます。 その上で、 .chezmoiignore に下記のように記載します。

{{ if eq .chezmoi.os "darwin" }}
.ubuntu-rc
{{- end }}

UbuntuコマンドでWi-Fiに接続する方法

大元のwifiの使用状況を調べる

$ nmcli radio wifi

引数に on , off を渡すことで切り替えができる

sudo nmcli radio wifi on

接続

ネットワークデバイスの状態を確認

nmcli device status

deviceはdevやdでも可

nmcli d

statusも省略できる

SSIDのscan

nmcli device wifi list

listは省略可

接続

sudo nmcli --ask device wifi connect '${SSID}' ifname ${INTERFACE}

パスワードを聞かれるので入力する

sudo nmcli device wifi connect '${SSID}' password '${PASSWORD}' ifname ${INTERFACE}

パスワードを含める場合

切断

一時的に切断

sudo nmcli dev disconnect ${INTERFACE}

永続的に切断

sudo nmcli connection delete '${SSID}'

lan内のubuntuにmacからアクセスする時のhostname

自分用メモ

同じネットワークの中にUbuntumacがあり、macからUbuntusshしたい時、

$ ssh ubuntu-example.local

で、接続できるはず。
これは、Ubuntuに元から入っている(16くらいから?)avahi-daemonMacのbonjureのおかげ。
なんだけど、ネットワークの構成を変えたら、それが通らなくなった。

$ systemctl status avahi-daemon.service

で調べてみると、ubuntu-example-xx.localという名前になっていた。
xxの部分は数字。
これでアクセスはできるんだけど、なぜこうなったのか理由が特定できてない。

$ hostname -A

でみてみると、 ubuntu-example.lan という表記があった。 こっちでもアクセスできる。

元通り、ubuntu-example.localでアクセスできるようにした方がいいのかもと思いつつ、困らないので一旦これで行ってみる。

  • suoo apt install avahi-utils
    • avahiのインストール
    • ubuntuなら標準で入っているはずなのでいらない
  • avahi-browse -a
    • lan内の接続機器の一覧表示
  • hostnamectrl status
    • hostnameの状態を詳しく確認
  • hostnamecrl set-name ${name}
    • host名の変更

rcmを使ったdotfilesの管理

rcmとは

https://github.com/thoughtbot/rcm

dotfilesの管理ツールです。
rcm自体はパッケージ名でインストールすると rcup,rcdn,mkrc,lsrcの4つのコマンドが使えます。

$HOMEシンボリックリンクを貼ったり、解除したりがコマンドで簡単にできます。 .zshrc.local やホストごとの管理などもできるので、 自前でinstall.shなどを作るより楽かと思います。

インストール

mac

$ brew install rcm

ubuntu

$ sudo apt install rcm

基本的な使い方

前提としてrcmはzsh専用です。

dotfiles内の構成

例えば、以下のような構成になります。

dotfiles
├── .git
├── .gitignore //このgitignoreはdotfilesリポジトリのものです。
├── README.md
├── gitconfig
├── gitignore //このgitignoreは$HOME直下に.gitignoreとして置きたいものです。
├── rcrc
├── tmux.conf
└── zshrc

ディレクトリのトップレベルに、先頭のドットなしでファイルを作ります。
gitconfig , gitignore , tmux.conf , zshrc が管理したいrcファイルです。
先頭にドットがあると、rcmでは無視されます。 rcrc はrcmの設定ファイルになります。

rcrcの中身

EXCLUDES="README.md"
DOTFILES_DIRS="$HOME/dotfiles"

EXCLUDES

rcmで無視したいファイル指定します。 複数ある場合はスペース区切りで指定します。

DOTFILES_DIRS

dotfilesのディレクトリを指定します。複数ある場合はスペース区切りで指定します。

rcup コマンド

dotfiles内にあるファイルを$HOME配下に展開するコマンドです。
初回は環境変数のRCRCを指定する必要があるので下記を実行します。

$ env RCRC=$HOME/dotfiles/rcrc rcup

実行すると $HOME/.rcrc が $HOME/dotfiles/rcrc への
シンボリックリンクとして作成されるので次からは rcup だけで実行できます。
基本的にはよくあるinstall.shのようなものです。

rcdn コマンド

rcupの逆です。 rc down の略ですかね。
実行すると、rcupで作成されたシンボリックリンクが削除されます。
dotfiles内のファイルは削除されません。

mkrc コマンド

まだdotfileで管理していないファイルをdotfilesで管理するようにします。
具体的には、対象のファイルをdotfiles内にmvし、
元の場所にはdotfilesへのシンボリックリンクを貼ります。

$ mkrc ~/.zshenv

lsrc コマンド

現在、rcmで管理されているファイルの一覧が表示されます。 どのdotfilesからどこへシンボリックリンクになるかの一覧です。

手動管理からの移行

すでにdotfilesを手動管理している場合は、以下の手順になると思います。

  1. ファイルをリネームします(先頭のドットを消します。)。
  2. dotfiles/rcrcを作成します。
  3. env RCRC=$HOME/dotfiles/rcrc rcup を実行します。(すでにあるシンボリックリンクは削除しなくてもrcupで上書きされます。)

高度な使い方

ローカル用ファイルの管理

.zshrc.local などローカル用のファイルを作成している場合、これもrcmで管理できます。
例えば、$HOME/dotfiles-local を作成し管理したいファイルをおいておきます。

dotfiles-local
├── gitconfig.local
└── zshrc.local

dotfiles(dotfiles-localではない)のrcrcのDOTFILES_DIRSにdotfiles-localを追加します。

DOTFILES_DIRS="$HOME/dotfiles $HOME/dotfiles-local"

この状態で、 rcup コマンドを実行すると、 $HOME/.gitconfig.local などが作成されます。 mkrcで dotfiles-local の方に追加したい場合は、 -d オプションを追加します。

$ mkrc -d ~/dotfiles-local/ ~/.zshrc.local

ホストごとの管理

一つのdotfilesでmac用とlinux用などそれぞれのファイルを管理することもあるかと思います。
その場合は、-B オプションを使用することで管理するファイルを分けることができます。

例えば、 linuxでしか使用しないファイル $HOME/.colorrc があったとします。 これをrcmで管理する場合

$ mkrc -B linux ~/.colorrc

とすると、dotfilesにhost-linxというディレクトリが作成されそこにcolorrcファイルが作成されます。

dotfiles
├── README.md
├── host-linux
│   └── colorrc
├── rcrc
└── zshrc

このファイルは、 rcupの際に -B linux を指定しない限り作成されません。
なので、linux上では rcup -B linux とし、macでは、単に rcup とするような運用ができます。

同様のオプションに -o-t があります。 -o は、引数を取らずにhostnameの値でディレクトリが作成されます。 -t は、tagの略でそのファイルにタグをつけて管理できます。

参考

https://qiita.com/manicmaniac/items/b50e1fc1a05202542fb0