WSL Ubuntu初期設定
WSL と Ubuntu 20.04 LTS、Windows Terminal*1インストール済み
※WSL1とUbuntu 20.04の組み合わせは2020年6月現在問題が出る((今はまだ)WSL1にUbuntu 20.04を入れるな - Qiita)。
WSL2にするか、WSL1とUbuntu 18.04 LTS を採用してMicrosoftが問題に対応するまで待つか‥
→WSL1のままで、Ubuntu 18.04を使う方針にした。
WSL日本語化
sudo apt update #「E: Unable to locate package」みたいなエラーが出るのはupdateされてないのが原因 sudo apt -y install language-pack-ja sudo update-locale LANG=ja_JP.UTF8 sudo apt -y install manpages-ja manpages-ja-dev sudo apt -y install zlib1g-dev # pyenv install にはこれが必要
WindowsTerminalの設定
terminal/UsingJsonSettings.md at master · microsoft/terminal · GitHub
"defaultProfile" キーを加え、Ubuntuのguid文字列を指定。ubuntuのプロファイルに"startingDirectory"キーを追加し、値を"//wsl$/Ubuntu-20.04/home/<ユーザ名>"
にする(初期ディレクトリをホームディレクトリにするため。ちなみにこの値にはwindowsから見たパスしか指定できない)。
guidの確認はレジストリを見る?(本当にレジストリを見る方法しかないのか??これで合ってるのか???リセットしたデフォルトの setting.jsonに全然違う値がセットされるんだが)
追記:WindowsTerminalには見切りをつけました。
Homebrewインストール
$ sudo apt install build-essential # gcc 入っていないとbrewで何かインストールするとき失敗するため。 $ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
brewトラブル:perlがインストールできない
※この問題はWSL1上のUbuntu 20.04において発生した。18.04なら発生しなかったのでそちらを勧める。
perlに依存しているフォーミュラが多いので、先にperlインストールコマンドを実行して、うまくインストールされるかどうか様子を見る。
$ brew install perl
==> /home/linuxbrew/.linuxbrew/Cellar/perl/5.30.2_1/bin/cpan -i XML::Parser
という行でしばらく経つとwindows ファイアウォールがperlを受け入れてもいいのかどうか聞いてくるので許可を与える。
Ubuntu 20.04 のときにはこのあともずっと停止してインストールが進まなくなった。
このときには、一向に解決策が見えなかったので、別のLinuxでインストールした XML::Parser モジュールを持ってきて\\wsl$\Ubuntu\home\linuxbrew\.linuxbrew\Cellar\perl\5.30.2_1\lib\perl5\site_perl\5.30.2\x86_64-linux-thread-multi\XML
にコピーする*2という強引な解決手段を試みた。
一方、Ubuntu 18.04 だと最後までインストールを進めることができた。
zshのインストールとログインシェル化
brew install zsh
which zsh
でzshのパスを確認してから
sudo sh -c "echo `which zsh` >> /etc/shells"
で最終行に zsh パスを追加。
chsh -s $(which zsh)
zinitの導入
GitHub - zdharma/zinit: Option 2 - Manual Installation
$ mkdir ~/.zinit $ git clone https://github.com/zdharma/zinit.git ~/.zinit/bin
.zshrc
に以下を追記
source ~/.zinit/bin/zinit.zsh autoload -Uz _zinit (( ${+_comps} )) && _comps[zinit]=_zinit
解説
brewでインストール
- rbenv
- pyenv, poetry
sudo apt install zlib1g-dev
でzlibを使えるようにしておかないと、pyenv install
が失敗する。
- go
- ghq
- ffmpeg, imagemagick
tmux- nvm
手動インストール
- nvm
- ずっとUbuntu+zshでnvmを使いたかったんだよ!! - Qiita
- やっぱりbrewでインストールすることにした。手動インストールしていた理由は忘れたが、初めにbrewでインストールしたとき動かなかったせいと思われる。ただ単にインストールしただけではダメで、シェルスクリプトに設定を書くのが必須なのにそれをしなかったためと思われる。
xubuntuの初期設定
swapの設定
$ sudo fallocate -l 2G /var/swapfile2 $ sudo chmod 600 /var/swapfile2 $ sudo mkswap /var/swapfile2 $ sudo swapon /var/swapfile2 $ swapon -s
terminalrc
- 青がやけに見にくいので、カラーを
#0039aa;
から#4499ff
に変更。 - ColorSelection行を削除。
gcc, make のインストール(Homebrewのインストールにも必要)
$ sudo apt install build-essential
Homebrew インストール(以後、CUI系は基本的にbrewを通してインストールする)
brew cask
(GUIアプリケーションをインストールするコマンド)は2020/04/26現在MacOSでしかサポートされていない。
公式サイトThe Missing Package Manager for macOS (or Linux) — Homebrew
$ sudo apt install git curl $ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
ソフトウェアでアプリのインストール
- CopyQ
- クリップボード管理
- GVim
- エディタ
- Redshift
- ブルーライトカット
- Remmina
- リモートデスクトップ
キーコンフィグ
要件:
- CapsLock -> 全角半角、変換 -> Esc、無変換 -> Ctrl、カタカナひらがな -> Ctrl
- キーボードを付け外しし直しても効果が継続すること
結論:xkbのrulesを使う
/usr/share/X11/xkb/symbols/
に任意のシンボル設定ファイル(例えばmysymbol)を作成/usr/share/X11/xkb/rules/evdev
を編集し、! option = symbols
行の後に先程のmysymbolを付け加えるオプションを作る(例:mykey = +mysymbol
)*1/etc/X11/xorg.conf.d/90-mykey.conf
を作成。先程のオプションを設定する- 設定は
touch /etc/default/keyboad;/etc/init.d/console-setup restart
で反映されるっぽい?
/usr/share/X11/xkb/symbols/mysymbol
partial modifier_keys xkb_symbols "mysymbol" { key.type = "ONE_LEVEL"; replace key <MUHE> { [ Control_L ] }; replace key <HKTG> { [ Control_R ] }; modifier_map Control { <MUHE> }; modifier_map Control { <HKTG> }; replace key <HENK> { [ Escape ] }; replace key <CAPS> { [ Zenkaku_Hankaku ] }; };
/etc/X11/xorg.conf.d/90-mykey.conf
Section "InputClass" Identifier "(適当な説明)" MatchIsKeyboard "on" Option "XKbOptions" "mykey" EndSection
参考:
- XKBでCapsLockをEscに割り当てる(Ubuntuでキーマッピング変更) - Qiita
- XKBの設定ファイルを直接編集してキーボードレイアウトをカスタマイズする - Qiita
- X KeyBoard extension - ArchWiki
- How to further enhance XKB configuration
※ちなみにxkbcomp -I$HOME/.xkb ~/.xkb/keymap/mykbd $DISPLAY 2> /dev/null
やsetxkbmap -symbols pc+jp+inet(evdev)+mysymbol
する方法はキーボードをUSBから外すと無効になるので駄目だった。
※localectl で変更する方法もあるみたい。何か問題が起きたら次はこれを試す。
キーコンフィグ失敗例:
- xmodmap
- キーボード付け直し要件を満たさなかった
- xmodmapはかなりいいところまでいっていて、キーボードを検出するたびロードし直すようなことをしたら要件を満たせそう
- loadkeys (showkey, dumpkeys)、
/etc/default/keyboard
のXKBOPTIONS
の編集設定- なぜか設定が反映されない。
- 全角半角キーのkeysymがわからない(loadkeys)
- 参考
- xkeysnail, xremap
- 導入が面倒
- キーボード付け直し要件を満たさなかった
- バックグラウンドで常に走らせておく必要がある。
- xbindkeys & xdotool
- 特定キーをトリガにコマンドを呼び出すxbindkeysで、コマンドでキー入力をエミュレートするxdotoolを呼び出す作戦。
- キーボード付け直し要件を満たすが、モディファイヤーキーが機能できない上に、そもそも置き換えがまともに動いてくれなかった(謎の挙動)。xbindkeysもxdotoolも単体なら動くのに。
- 参考ページ
*1:ファイルを直接編集するのは嫌だったけれど、他のルールファイルを読み込ませる方法がわからなかった。Linuxシステムではevdevルールが最も一般的に使用されるらしい
Promiseはthenされてから実行されるのではなく作成された時点で実行される
そしてresolveされた結果を保持しておいて、thenで実際にハンドラが渡されたらそのハンドラに結果を渡して呼び出す。
thenされたときに初めて実行されるとか、thenがなければ実行されないと誤解してた。
note.muを登録するときには初めの、興味のあるジャンルを選択してフォローする機能を使わないようにしないように
興味のあるジャンルを選択すると、もっと少なくて気軽にタイムラインを眺められる分量のユーザーが登録されるんだろうなー、そこからフォローを絞り込んだらいいやーとか深く考えずにいたら、150を超えるユーザーを初期で登録されて、しかも削除するのにマイページ作成まで進まなくてはいけなくて、とても難儀した。
フォロー外すボタンを連続で押すと誤動作でそのユーザーページに飛んだりしてすんなりフォロー全部外すことができないんだよ!
私はただ、ほんの気になった記事一つをブックマーク代わりに登録しようとしただけなのに、予想外の事態になって、フォロー削除作業に時間を費やすことになった。
初期登録で150を超えるフォローをさせるような仕様にしないでください。多くても30です。それ以上は認知が追いつきません。note.mu運営さん。
なんでinnerWidth outerWidthじゃなくて clientWidth offsetWidth なの?
ブラウザ js の、DOM要素のサイズを取得するプロパティ/メソッドの話。
js標準であるECMAScriptでは、jQuery なら .innerWidth
であらわされるものが .clientWidth
に、.outerWidth
であらわされるものが .offsetWidth
になるんですと。
多少わかりにくい命名なのだが、これ単体なら命名の違い程度にしか思わない。
しかし、ウィンドウの幅を取得するときにはECMAScriptは window.innerWidth
(ウィンドウ内側表示領域(垂直スクロールバー含む))、window.outerWidth
(ブラウザのウィンドウサイズ)を使うんですと。
統一しとけよって思う。
マウスイベントなどのときの `offsetX` や `clientX` の扱い方とかを見る限り、JavaScriptは "offset" や "client" という語をかなりいい加減に扱っているように思われる。(ここでは `client` をウィンドウからの距離、`offset` を発火したDOM要素からの距離として扱っている)
ところで、DOM要素のサイズを取得するのに`getClientRects()`というのがあるが、直接`offsetWidth`で取得できるのに、このメソッドの存在意義はあるのだろうか?
(getClientRects()の返り値のDOMRectの`height`が`offsetHeight`、`width`が`offsetWidth`相当)
なんかうまくまとめてる記事見つけた。
はてなダイアリーが終わってしまうのか
しょうがないから、はてダの記事をこっちにインポートしてブログを統一した。
別のブログを作成してそっちにインポートすることも考えたけれど、domainを考えるのが面倒だったし、今現在こっちのブログとはてダとの使い分けがあいまいになってきているし*1。
はてダの何も考えずに書き散らせる感じがよかったんだがなぁ。はてブロでは「見たまま編集モード」にしていても、「記事を書く」で一瞬Ajax的なロードがあるが、はてダはそういうもたつきはなかったし、はてな記法などを適度に交えて気軽に書き散らせる感じが好きだった。はてブロの「見たまま編集モード」は実際にはこちらが想像した通りのhtmlになってくれてないときがある(改行ごとに<p>タグにされてしまうところとか)(このあと気づいたけれど、<p>タグ入れずに改行するためには shiftキー押しながらEnter押さないといけないみたい。だる)
そして、はてダでは記事を保存せずに閉じたら勝手に下書きとして保存してくれていたが、はてブロではそういった気の利いたことはしてくれないようだ。
しかも下書きにしたら次編集するときには「ダッシュボード」画面からいくつか画面変位を経ないといけないじゃないか!
見たままモードで記事を書き終わった後の、更新されました画面も画面いっぱいに表示されて、閉じるボタンを押さないとブログを確認できないのもくそだるい。
そういえば、はてダ記事の、はてな記法や、微妙に入り混じったhtmlの部分はちゃんと考慮してインポートしてくれてるんだろうか?
おかしな形にインポートされている気がするが、確かめる気力がない。
あと、心残りはカテゴリーだ。はてダのカテゴリーは自分ルールで、他人には理解できないようなものを付けていたけれど、統一されてはてダ時代の訳の分からないカテゴリーが入り混じってしまってるのが、残念ポイントになってしまった。
メディアマーカーも終わってしまう。愛用していたサービスが終焉を迎えていくのは面倒なことだ。引っ越し先を考えないといけないし、なければ最悪自分で代替ツールを作らなければいけない。メディアマーカーの代わりを務められるだけのものがみつからなかったので、自分で何かツールを用意することになるだろう。本当、面倒なことだー。
MacからRemote Desktop でWindowsにつなぐと一部のキーが使えなくて超不便
PrtSc や バックスラッシュ2つが動かない。
バックスラッシュは正確には標準ではない文字コードが出力される。このMacから送られるおかしなキーコードが厄介で、AutoHotkeyでキースワップでとらえることができない*1。
何とか解決策を探したけれどどうにもできなかったので、
PrtSc はAutoHotkeyをいじくって Winキーとs を同時押しでも機能するようにして対応
#s:: Send, {PrintScreen}
バックスラッシュはMac側のKarabiner elements でいったん別のキーにしてからさらにAutoHotkey でキーを差し替える的なやり方で解決した。
{ "description": "右上バックスラッシュをリモートデスクトップでright_guiに", "manipulators": [ { "from": { "key_code": "international3", "modifiers": {"optional": ["any"]} }, "to": [ { "key_code": "right_gui" } ], "conditions": [ { "type": "frontmost_application_if", "bundle_identifiers": [ "^com\\.microsoft\\.rdc\\.osx", "^com\\.microsoft\\.rdc\\.macos" ] } ], "type": "basic" } ] },
RWin:: \ vkFF:: Send, {vkE2} +vkFF:: Send, +{vkE2}