环境note
环境note
About OS
win
windows python通过pip install是要现编译的,VS的编译输出是中文,termianl下就显示乱码。需要win11打开”区域“,管理-更改系统区域设置,打开utf-8支持,就不会乱码了。但这么做,别的地方可能乱码。不是永久方案,需要用时打开一下。可以看下VS能不能改语言,别用中文。
windows装dlib用pip一般会报编译错误。
conda install -c conda-forge dlib
下载的依赖比较多,能安装成功。
Windows下的终端Terminal加入snippet,参考https://github.com/microsoft/terminal/issues/6412#issuecomment-964343941。我个人常为OpenMLDB加的snippet:
{
"command": {
"action": "sendInput",
"input": "set @@execute_mode='online';\r"
},
"name": "on"
},
{
"command": {
"action": "sendInput",
"input": "set @@execute_mode='offline';\r"
},
"name": "off"
},
{
"command": {
"action": "sendInput",
"input": "set @@sync_job=true;\r"
},
"name": "sync"
},
{
"command": {
"action": "sendInput",
"input": ":set mouse-=a\r"
},
"name": "mouse"
}
不需要快捷键,Ctrl+Shift+P
可以根据name快速选择,快捷键还懒得记。
遇到git clone error: invalid path
,用wsl git,然后再mv过去,windows git有点坑。
wsl2+docker
注意windows的docker不用wsl2就跑不起来,先装wsl2,要不要长期使用另说。
wsl --install -d Ubuntu-22.04
网速正常的话,一般就安装好了。有时候会卡在诡异的地方,wsl命令分几个版本,默认版本用起来很不顺手,但一般懒得重新下。通常是ubuntu镜像下了,wsl内核没下,多跑几下install命令,可能就好了。
wsl涉及到使用ip就很麻烦,把这部分配置好,方便使用,见gist。
wsl2默认只有1个T,模型存的多就用完了,expand一下,不会重置环境,需要shutdown一下,见官方文档。
wsl2无论什么端口,从win都能用localhost地址访问到,这不代表ip就通了。localhost和127都可能无法等同,估计是wsl2只加工了localhost。
PowerShell
PowerShell在中文版windows上容易遇到编码问题,但更换英文版Windows很麻烦。
如果目的不是在shell中展示日志,可以使用vscode自动猜编码,使用正确的编码。shell中操作文件,只需要记得读和写都设置一下utf-8即可。
PowerShell自行启动的和vscode内启动的还可能使用不同的profile,在你使用的shell中打印可以知道应该修改哪个profile文件。
$profile
user profile在文档目录中,自己启动的名字是Microsoft.PowerShell_profile.ps1
,vscode用的是Microsoft.VSCode_profile.ps1
。两者都改了,还是可能无法作用于Start-Process重定向。测试不重定向,还是Start-Process,弹出的shell里都不会乱码。重定向的编码确实无法改变,Start-Process加load user profile也不行。
linux
用户直接用root也行,但一般还是新建用户,免密的正确配置法:sudo vim /etc/sudoers.d/ark
,添加ark ALL=(ALL:ALL) NOPASSWD:ALL
。
不要在/etc/sudoers
里加,那里不起作用。
macOS
homebrew
默认源太卡,容易install失败。换tuna的源,设置方法见homebrew,homebrew-bottles。(注意,这两个都要配置)。
gdb/lldb
mac中使用lldb,不需要指定bin。lldb -c /cores/xxx
即可。
vim
vim时用鼠标选择一段文本,可能进入VISUAL模式。VISUAL模式下的复制/粘贴/剪切得用y
,p
,d
。注意,VISUAL模式下复制的文本,不会记录在剪贴板,只能在vim中使用,拷贝不出去。
更习惯不进入VISUAL模式的话,set mouse-=a
。更改默认配置,把这个设置放在~/.vimrc
里。
python
python源可以用tuna的,有些网络华为源更快。
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple <pkg>
# 全局配置方法
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
python numpy大升级出现很多不兼容,一个通常适用的老版本:
pip install numpy==1.26.4
pip install scipy==1.12.0
pip install scikit-learn==1.2.2
bash
git
move or remove them before you merge, use this to get related files
git xxx 2>&1|grep -E '^\s'|cut -f2-|xargs -I {} echo "{}"
ps and network
no ps需要apt install procps
。
ps axu | grep xx | awk '{print $2}' | xargs kill -9
netstat -ltnup
run bins
运行当前目录下所有文件,测试时常用。
for f in *; do ./$f; done
top record
记录一段时间进程cpu mem等资源的变化,适合抓出程序最大占用内存的时间点。
while true; do sleep 10 && top -b -p 25440 -n1 | tail -1 ; done >> process.top
# add time
while true; do sleep 10 && date && top -b -p 25440 -n1 | tail -1 ; done >> process.top
npm
如果目的是pnpm,不用单独下载npm,直接下载pnpm就行。 https://pnpm.io/zh/installation
如果是npm,下载nvm更合适管理node版本。
# windows https://github.com/coreybutler/nvm-windows?tab=readme-ov-file
# ubuntu https://github.com/nvm-sh/nvm.git/
nvm install lts
nvm on
npm i -g yarn
keyboard
rk61键盘配合mac使用,支持很差,还是需要改键。使用karabiner-element做改键。
可以直接修改~/.config/karabiner/karabiner.json
,注意里面的device是有vendor id和product id的,得填对,可以用karabiner直接查到。
windows下改键,使用PowerToys的键盘管理器。
docker
导入导出
千万不要用docker export/import,大的image导入导出都慢的可怕。用save/load。
换源
配置换源是个非常重的操作,要重启docker。不是必须这么做,一般先考虑给pull的地址加镜像前缀,比如daocloud的,具体去搜。
配置换源
就是registry-mirrors
这个配置项。linux直接在 /etc/docker/daemon.json
里改,mac/win可以在docker desktop设置里找到配置文件,也是一样的修改。
{
"registry-mirrors": [
"..."
]
}
重启后docker info
可以查看。
源的地址很容易失效,github有些项目会帮忙检查,即时去查一下,这里不提供了,以免失效。
tmux
tmux如果另一个没退,就又attach,可能分辨率会用另一个的,就会右边下边出现很多点点。tmux命令choose-client
,选择分辨率,选小的就能撑满屏幕。
默认choose-client
是shift-b,但我改了tmux的prefix,所以是ctrl-a,再shift-d。自己查自己tmux的keys,用choose-client
bind的key。
https://unix.stackexchange.com/a/174454 window name highlight
tmux里zsh无法用home end键:zshrc更改配置可以绑键
#Rebind HOME and END to do the decent thing:
bindkey '\e[1~' beginning-of-line
bindkey '\e[4~' end-of-line
case $TERM in (xterm*)
bindkey '\eOH' beginning-of-line
bindkey '\eOF' end-of-line
esac
#To discover what keycode is being sent, hit ^v
#and then the key you want to test.
#And DEL too, as well as PGDN and insert:
bindkey '\e[3~' delete-char
bindkey '\e[6~' end-of-history
bindkey '\e[2~' redisplay
#Now bind pgup to paste the last word of the last command,
bindkey '\e[5~' insert-last-word
debug
oom
怀疑进程被oom kill了,需要查日志,dmesg -T没有权限要求,但它的时间不准确,甚至可能是未来时间。最好查/var/log/messages,但它可能需要root权限。 Docker内的进程也是被物理机管理的,如果占满内存,也是会被kill,而且在物理机上会有日志。
GO
gvm来管理,但gvm要先下一个早期版本,才能去下一些高版本,依赖关系比较诡异,照着下面安装就行。
# -B 直接下binary,gcc编1.4可能有一堆c++ warning,编译通不过
gvm install go1.4 -B
# Set $GOROOT_BOOTSTRAP to a working Go tree >= Go 1.17.13.
gvm use go1.4 --default
# 装比1.17还高的时候有需要1.17作为基础,1.4直接装不了1.21。。。有毒
gvm install go1.17.13
gvm use go1.17 --default # 可以就用17这个版本当默认版
gvm install go1.21
Regex
虽然真的很难懂,但是确实用处很多,逃不开它的魔爪。测试工具推荐https://regex101.com/,有解释regex的意思,容易debug。
让AI先写,再自己用测试工具验证,是个比较高效的方法。
hive的regexp_replace好像不是遵守java的regex规则,比如dash '-'不需要转义,但是java里需要转义? '\-'"'这样的写法,hive里还会报错,得把-换回原始-,才能正常运行?