misc
分類に困った小ネタ集です.
shell周りが多いと思います.
Warp ベータ版は日本語対応してない
解散
reference
2024年5月現在も未解決
CPU温度の監視(macOS)
sudo powermetrics -s smc | grep "CPU die temperature"
CPU die temperature: 78.96 C
reference
comment
旧version
最初は
sudo powermetrics | grep -e "CPU die temperature"
にしてたけどproc_pidpath ***** failed(0)
が出てきてウザかったので上記のcommandに変更.
awkできない
よくわかんないけど
sudo powermetrics -s smc | grep "CPU die temperature"| awk '{print $4}'
とかやって温度の数値だけ抜き出そうとしても何も出てこない.
最初のgrep
はできているのに...?
#これはいける
echo "CPU die temperature: 65.67 C"| awk '{print $4}'
65.67
Venture不可
3rd party appが必要っぽい
terminalの表示名を変更する
shell変数のPS1
を変更するとterminalで常に表示されているuser名とかcurrrent directoryとかが表示されているのが変更できる.
user名@PC名 current directory %
export PS1="%C "'%% '
こうすると
current directory %
こうなる.
reference
comment
zshで%
をescapeするには%%
.
プロンプトと言うらしい.
shellで小数の桁指定
(ba)shだとたぶんpythonとか使うのが一番簡単(なんだそれ)
python -c "print(f'{1.22/2:.2f}')"
0.61
zshならprintfでOK
printf "%.2f\n" $((1.22/2))
0.61
comment
bashの小数演算がめんどくさすぎる.
python version 3.6以上で使えるf-stringというのを用いている.
1.22/2
を.2f
で表示してくださいという意味になっている.
TODO
- formatの記法
- shell変数
${A}
を含む場合,Pythonのplace holderにつかう括弧と衝突するのでなんとかしないといけない
小数の割り算を計算をしてから整数に変換
echo "$A/$B" | bc -l | xargs printf "%.0f"
scale
がややこしいのでbc -l
にしてscale=20
になるようにしている
整数にするのは"%.0f"
が楽
画像とかの変換系
探せばすぐ出てくるけど探すのが面倒で...
pdf→png
brew install poppler
pdftoppm {input.pdf} {output.file} -png
{output.file}
は拡張子なし
dpiの変更
-r {value} # DPI (default: 150)
-rx {value} # 横方向のDPI (default: 150)
-ry {value} # 縦方向のDPI (default: 150)
他に使いそうなoption
-singlefile #単一page pdfを変換するときに指定すると出力されるfile名に番号がつかない
svg→png
inkscape -w 1024 -h 1024 input.svg -o output.png
Markdownでacuteとか
HTML用に特殊文字が用意されている.
acute
Poincaréとか
&{}acute;
で{}にalphabetが入る.
Poincaré
のように書く.
あるやつとないやつがある
é
みたいに番号で直接指定も可能
umlaut
Schrödingerとか
&{}uml;
で{}にaiueoyAIUEOY
が入る.
Schrödinger
のように書く.
double acute
ő
ø(空集合記号∅ではない)
o slashとかいうらしい.
Møllerとか
ø
ちなみに空集合記号∅は∅
reference
comment
番号の方はUnicodeで分かりやすい方はHTML用に用意されているものっぽい.
VESTAの使いかた
- 水素結合は
bond
からOH結合から消せる - 一部の原子だけ表示するには
boundary
から - abc軸を表す矢印は消せる
スライドデザイン系
レインボーカラーセットをやめろ
視覚的な問題かと思ったらcolormapのような値と色に対応関係があるものに使うと誤解を招くみたいな話だった明朝体を使うな
黒を使うな
>
を1つだけ挿入する
空行を含めて全ての行頭にsed -i -e 's/^$/> &/' -e 's/^\([^>]\)/> \1/' your_file.text
Hermite行列の指数函数がunitaryになるとき係数は純虚数
Hermite行列
このとき
まず, Herimite行列はunitary行列で対角化可能なので,
この表式を用いると
となる.
次に,
となる.
最後に
となることに注意すると
となる.
そのためには
これは
これらの記号を含むpasswordの生成
pwgen 12 -cnysB1 -N1000| grep -E '^[a-zA-Z0-9\-\.@+$#!/_]{12}$'
homebrewでinstallしたときにPATHを解決しない場合がありcompile時にinclude/link optionを指定する必要がある場合がある.
- brewの用語でkeg-onlyという
- 例えば, LAPACK/BLASをinstallしたときにAccelerate frameworkと衝突しないようにするために発生する
-
brew info openblas
とかやると見れる
OpenBLAS
LDFLAGS: -L/opt/homebrew/opt/openblas/lib
CPPFLAGS: -I/opt/homebrew/opt/openblas/include
- 渡すべきPATHは環境によって異なる可能性があるためPATHは適宜書き直す必要がある.
- とにかくhomebrewの下にある
openblas/lib
とopenblas/include
の場所を渡せば良い.
For pkg-config to find openblas you may need to set:
export PKG_CONFIG_PATH="/opt/homebrew/opt/openblas/lib/pkgconfig"
LAPACK
export LDFLAGS="-L/opt/homebrew/opt/lapack/lib"
export CPPFLAGS="-I/opt/homebrew/opt/lapack/include"
For pkg-config to find lapack you may need to set:
export PKG_CONFIG_PATH="/opt/homebrew/opt/lapack/lib/pkgconfig"
OpenMP
libomp is keg-only, which means it was not symlinked into /opt/homebrew,
because it can override GCC headers and result in broken builds.
For compilers to find libomp you may need to set:
export LDFLAGS="-L/opt/homebrew/opt/libomp/lib"
export CPPFLAGS="-I/opt/homebrew/opt/libomp/include"
LLVM Clang
If you need to have llvm first in your PATH, run:
echo 'export PATH="/usr/local/opt/llvm/bin:$PATH"' >> ~/.zshrc
For compilers to find llvm you may need to set:
export LDFLAGS="-L/usr/local/opt/llvm/lib"
export CPPFLAGS="-I/usr/local/opt/llvm/include"
Modules
To activate modules, add the following at the end of your .zshrc:
source /opt/homebrew/opt/modules/init/zsh
You will also need to restart your terminal for this change to take effect.
brewで入るHPC用soft
以下全てbrew install hoge
の形
# build
cmake
gcc # GNU C compiler
llvm # LLVM clang
ninja
# BLAS/LAPACK
lapack
openblas
scalapack
# MPI
open-mpi
mpich
# OpenMP
libomp
# Misc
juliaup # julia
rustup-init # rust
# package manager
conan
spack
rootでMPI実行
Intel oneAPIの初期化
source /opt/intel/oneapi/setvars.sh
PostgreSQL
To start postgresql@14 now and restart at login:
brew services start postgresql@14
Or, if you don't want/need a background service you can just run:
/opt/homebrew/opt/postgresql@14/bin/postgres -D /opt/homebrew/var/postgresql@14
buildが終わったら通知する(macOS)
こういうやつ
BUILD_COMMAND && osascript -e 'display notification "Build finished" with title "Build"'
通知をoffにしていると表示されないのでその場合はpopup windowにする
こういうやつ
BUILD_COMMAND && osascript -e 'tell app "System Events" to display dialog "Build finished"'
shellの函数にしてみた
再帰的にtouch
find . -type f -exec touch {} +
Limaでx86_64 VM on M1 Mac
brew install lima
intel macで使っていたHomebrewをM1 macでそのまま使うと不具合が出る
自分はlimaのinstallでこけた.
おそらくx86_64 or AArch64がどうとかキレられたのはこれのせいな気がする
1. Homebrewをuninstallする
NONINTERACTIVE=1 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/uninstall.sh)"
2. Homebrewを再installする
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
最新のcommandは以下で確認
参考文献
スパコンにninjaを入れる
前提
- Git
- CMake
- sudo不可
やること
sudoなければsource build
build command
git clone https://github.com/ninja-build/ninja.git
cd ninja
cmake -Bbuild-cmake -DCMAKE_INSTALL_PREFIX=$HOME
cmake --build build-cmake
cmake --install ./build-cmake
補足
-
build-cmake
はbuild用のdirectory名なので変更して良い -
-DCMAKE_INSTALL_PREFIX=$HOME
は$HOME
(=loginしたときに最初にいるdirectory)にbinaryを置く設定.~/bin/ninja
のようにinstallされる. したがって$HOME
の部分は自分がinstallしたい場所に変更して良い.
参考文献
クリップボードに何か処理してクリップボードにコピー
pbpaste | なんか処理する | pbcopy
Shell: 標準出力の最初のn行を飛ばす
tail -n +[n+1]
[n+1]
は実際は数値なので注意(e.g. 最初の1行を飛ばす:tail -n +2
)
known_hosts
にある鍵の消し方
WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!
とか出たときにknown_hosts
にある鍵を消さないといけない.一応手でも消せるが
ssh-keygen -R [host name or IP address]
で消せる.
uname -m
とarch
の違い (macOS)
$ uname -m
arm64
$ arch
arm64
$ uname -m
x86_64
$ arch
i386
Z shellで読み込まれるprofile/rc filleとその順番
各dotfileにechoを入れて検証(macOSで試しただけ)
zsh --login
)
login shell (.zshenv
→.zprofile
→.zshrc
zsh
)
非login shel l(.zshenv
→.zshrc
zsh --login --norcs
or zsh --norcs
--norcs
を付けるとlogin shellか非login shellかに関わらず何も読み込まれない
他に.zlogin
や.zlogout
などがあるが自分は使用していないのでパス.
一応zsh -x
で確認は可能
水平に出力を連結~hcat的な: paste
- 引数はfile名
- 連番は
paste list-[1-3].dat
- 不連続あるいは非番号は
paste list-{24,56}.dat
fileから特定の列を最初の列に新しく追加して水平方向に連結
awk '{print $4}' list[1-4].dat | paste <(for i in $(seq -w 0.0 0.1 1.0); do echo "$i" ;done) - - - -
A0 posterをA4に分割して印刷する用のpdfを作成
brew install mupdf
mutool poster -x 4 -y 4 input.pdf output.pdf
GitHub Copilot
fish移行memo
大体ここに書いてある
.zshrc
& .zprofile
→ ~/.config/fish/config.fish
source ~/.config/fish/config.fish
変数とexport
-
HOGE=fuga
→set HOGE fuga
-
export HOGE=fuga
→set -x HOGE fuga
https://natsukium.github.io/fish-docs-jp/tutorial/shell_variables.html
.venv
-
. venv/bin/activate
→source .venv/bin/activate.fish
https://qiita.com/kaito__/items/512b6de678d88c85aa7d
Homebrew
同じ
eval (/opt/homebrew/bin/brew shellenv)
算数は良さそう
echo "${x}${y}"
みたいなことがしたい場合,単にecho "$x$y
でよい.文字を混ぜる場合はそこだけ二重引用符で囲めば良い:echo $x"と"$y
補完
→で受諾
Option→で一部を受諾
一時的にPATHを通す(prepend)
set -gx PATH hoge $PATH
PATH
の通し方
fish_add_path hoge
設定はoptionで良しなにやる
fish_remove_path
はない
そして多分今後実装もされない.
$fish_user_paths
というlistにfish_add_path
で追加されたpathが入っているので消したいpathがいればそのindexを取得してset -e
で消すということを自分でしないといけない.
以下のような函数
# https://github.com/fish-shell/fish-shell/issues/8604#issuecomment-1169638533 より
function remove_path
if set -l index (contains -i "$argv" $fish_user_paths)
set -e fish_user_paths[$index]
echo "Removed $argv from the path"
end
end
を定義しておけば
remove_path some_path
で消せる
vi mode
以下を実行
fish_vi_key_bindings
defaultのemacs keybindingを残す場合
fish_hybrid_key_bindings
defaultに戻す
fish_default_key_bindings
-
functions alias_name
でalias(函数)の中身を確認できる -
functions -n
で定義されている函数一覧が出る
fish_add_path
の挙動
fish_add_path hoge
とするとhoge
をfish_user_paths
にprependし,fish_user_paths
をPATH
にprependするという挙動のよう.
以下のように一見Homebrewと関係ないpathの設定をしただけなのにHomebrewのpathが変わってしまうというのを踏んでしまった,
$ fish_add_path hoge
$ eval $(/opt/homebrew/bin/brew shellenv)
$ which brew
/opt/homebrew/bin/brew
$ eval $(/opt/homebrew/bin/brew shellenv)
$ fish_add_path hoge
$ which brew
/usr/local/bin/brew
-
eval $(/opt/homebrew/bin/brew shellenv)
で評価されるもののうち,実際に関係あるのはfish_add_path --global --move --path "/opt/homebrew/bin" "/opt/homebrew/sbin";
のみだと思われる. - 自分の場合,上記コマンド実行以前に
fish_user_paths
の末尾に/usr/local/bin
が入っていたため,fish_add_path hoge
をeval $(/opt/homebrew/bin/brew shellenv)
の後に実行すると/usr/local/bin
が/opt/homebrew/bin
より先に来てしまうという現象が起きていた.
Notion, Obsidian, Logseqの比較
Notion
- 良いところ
- みんな使ってる
- 悪いところ
- 重い
- localなmarkdown fileが生成されない(他のtoolはhoge.mdが作成される)
- 日本語の後に
$$
を入力して数式modeにしようとしても数式がrenderingされない($$
の前にspaceが必要)
Obsidian
Logseq
依存関係導入されたがもう使われていないHomebrew formulaの削除
brew autoremove
iterm2
- 設定→General>Selcetion>Copy to pasteboard on selectionをオフ
-
Cmd
+c
がDeepLショートカットと競合するため - 参考:https://gitlab.com/gnachman/iterm2/-/issues/9656
-
pane分割したときにfocusしていないtabが暗くなって見づらい(減光(dimming)というらしい?)
→Settings
→Appearance
→Dimming
→Dim inactive split panes
からチェックを外す
pane分割したときだけcurrent directoryでsessionを開始したい
Settings
(⌘
+,
)→Profiles
→(設定したいprofileを選択)→General
→Working Directory
の項目でAdvanced Configuration
を選択→Edit..
ボタンを押してWorking Directory for New Split panes
の項目でReuse previous session's directory
を選択
交換関係(交換子)の積の公式
[A,BC]=B[A,C]+[A,B]C
[AB,C]=A[B,C]+[A,C]B
[A,BCD]=BC[A,D]+B[A,C]D+[A,B]CD
[ABC,D]=AB[C,D]+A[B,D]C+[A,D]BC
[AB,CD]=A[B,C]D+AC[B,D]+[A,C]DB+C[A,D]B
A\left[B,C\right]D+AC\left[B,D\right]+\left[A,C\right]DB+C\left[A,D\right]B
C
C言語を学びたての人のための電卓自作
低レイヤを知りたい人のためのCコンパイラ作成入門
Cの未定義動作
ARM macでALAMODEのbulid
必要なpackageのinstall
brew install cmake llvm fftw eigen boost open-mpi openblas spglib
- apple clangを使う場合はllvmは不要.以下のcmake optionもclang(++)の指定部分も不要(やっても問題ない)
source codeの取得
git clone https://github.com/ttadano/alamode.git
cd alamode
cmakeの実行
cmake -Bbuild -S. -DCMAKE_CXX_FLAGS="-O2" -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ -DSPGLIB_ROOT=/opt/homebrew/Cellar/spglib/2.5.0_1 -DFFTW3_ROOT=/opt/homebrew/Cellar/fftw/3.3.10_1
-
-DCMAKE_CXX_FLAGS
から-xHOST
を外さないとcompileできないので注意.- Intel compilerなら大丈夫(なはず)
-
-DSPGLIB_ROOT
や-DFFTW3_ROOT
はinstallしたversionによって変わってしまうのでbrew info fftw
やbrew info spglib
をして確認する
buildの実行
cmake --build build
tutorial
macのshellとGNU shellとの非互換性
macのshell toolがなんなのかよくわかってない
-
sed
の-E
-e
optionを使うとfilename-E
みたいな名前のback upが生える
https://stackoverflow.com/questions/34533893/sed-command-creating-unwanted-duplicates-of-file-with-e-extension -
head -n
で-行番号
が使えない→head: illegal line count -- -2
ghead
でおk -
sed
: https://zenn.dev/ultimatile/articles/4e78c2484277cf - echoの
-n
がわからない(/bin/sh
限定) - grepもoptionが違うっぽい
https://zenn.dev/masaki_mori72/articles/cf55f180320953
空行と#
から始まる行以外を表示
grep -v '^\(#\|$\)'
@
をuser mentionにしない方法
TwitterでU+2060 (word joiner)で@
の後ろに不可視空白を入れている
ちょうど奥村先生のtweetに実際の例があるのでコピペで使える
code片の場合,コピペすると不可視空白を消さないと当然動かないのでやめた方が良いかもしれない...