- 在终端输入
netstat -ano | findstr 5555获取占用 5555 端口的进程 pid tasklist | findstr pid查看是那个进程占用了- 发现是 docker 占用了 关掉退出就好了
- 可以选择暴力一点的方法
taskkill /pid 1234 /f(/f 指的是强行结束) - 利用进程的 PID 结束进程:
ntsd -c q -p 1332(结束 explorer.exe 进程)

代码人生:编织技术与生活的博客之旅
netstat -ano | findstr 5555获取占用 5555 端口的进程 pidtasklist | findstr pid查看是那个进程占用了taskkill /pid 1234 /f (/f 指的是强行结束)ntsd -c q -p 1332 (结束 explorer.exe 进程)
先设置个代理
export http_proxy="http://192.168.31.31:9999"
export https_proxy="http://192.168.31.31:9999"
yum install libevent ncurses
yum install libevent-devel ncurses-devel gcc make bison pkg-config
wget https://github.com/tmux/tmux/releases/download/3.2a/tmux-3.2a.tar.gz
tar -zxf tmux-*.tar.gz
cd tmux-*/
./configure
make && sudo make install
tmux -V
搞定

推荐一个使用说明(最下面有个配置推荐 放好~/.tmux.conf 然后重开就好了)
tmux: error while loading shared libraries: libevent_core-2.1.so.6: cannot open shared object file: No such file or directory

cp /usr/local/lib/libevent-2.1.so.6 /lib64/libevent-2.1.so.6
cp /usr/local/lib/libevent_core-2.1.so.6 /lib64/libevent_core-2.1.so.6

博客想加个 steam 连接,但是没有 logo。找了半天终于找到配置方案,记录一下。
首先要找到一个叫 iconfontCssFile 的配置,知道可以引用在线的 css。
然后进 https://www.iconfont.cn/ 搜 steam 找到自己想要的图片 点击购物车图标添加至购物车。

右上角购物车添加至项目,没有就自己创建一个项目。
添加后就可以在项目中生成在线地址了。

好了,通过 vdooing 的配置已经加上 steam 连接了。

上班总爱划水,得思考解决方案。
当水友们想认真上班的时候 分享几个不用退群的几个小技巧:

藏起来就想不到啦

鼠标帖到任务栏就出来了,问题是钉钉也看不到了。

如图把任务栏放到不容易看见的地方,就很少会注意到期动态。

退群了该看微信还是会看微信,重复,退群了该看微信还是会微信的,与群聊无关。
同时,即算关了聊天,看知乎,v2ex,或者逛github,都会是另一个角度的“微信”。
本质上还是想放松一下(虽然多资讯会带来更多的决策负担,最好的方法还是啥也不做去放松)。
既然大脑想休息,建议是和读书一样,设定上下课时间,穿插休息时间,建议用番茄时间去管理自己。
优缺点可以看看参考
欢迎大佬们推荐一些好用的软件。

再讲讲下午太长的问题
A:下午好长。。 。
B:番茄时间咯
B:坐25分钟(摸鱼or工作) 站5分钟(上个厕所喝杯水)
B:三个循环后有15分钟的找同事聊天时间
B:四五个循环就差不多要下班了
B:这样下午就不漫长了
A:工作太紧
B:人不是机器
B:不能可专注一下午
B:会坏掉的


Microsoft Todo List 最近一直连接不上,
根据 这个帖子,
设置使 To Do 网络连接独立就好了,非常有用。
因为安装了 Todo List 的设备很多,一个一个设置比较麻烦。 于是写了一个 python 代码来执行。
需要的同学直接运行下列代码执行:
python -c "from urllib.request import urlopen ;exec(urlopen('https://github.com/AngusWG/TestProject/raw/master/%E5%B7%A5%E5%85%B7/to_do_list_sync_error.py').read())"
不能访问 github 的记得开全局 翻墙
写了个直接性 github 上代码的工具,用这个好看一丢丢。
pip install run_web_pycode
pyw https://github.com/AngusWG/TestProject/raw/master/%E5%B7%A5%E5%85%B7/to_do_list_sync_error.py

源码如下:
#!/usr/bin/python3
# encoding: utf-8
# @Time : 2021-06-20 11:44:27
# @author : zza
# @Email : z740713651@outlook.com
# @File : to_do_list_sync_error.py
import os
import winreg
from typing import Optional
def get_todos_key() -> Optional[str]:
reg_path = r"Software\Classes\Local Settings\Software\Microsoft\Windows\CurrentVersion\AppContainer\Mappings"
access_key = winreg.OpenKey(winreg.HKEY_CURRENT_USER, reg_path)
try:
n = 0
while True:
sub_key_name = winreg.EnumKey(access_key, n)
sub_key = winreg.OpenKey(access_key, sub_key_name)
display_name = winreg.QueryValueEx(sub_key, "DisplayName")[0]
# print(display_name)
n += 1
if "Todos" in display_name:
print(display_name)
print(sub_key_name)
return sub_key_name
except WindowsError:
return None
def service() -> None:
key = get_todos_key()
if key is None:
raise KeyError("Can't find Microsoft.Todos key in registry")
command = f"CheckNetIsolation.exe loopbackexempt -a -p={key}"
os.popen(command).read()
result = os.popen("CheckNetIsolation.exe LoopbackExempt -s").read()
assert key in result, "设置失败"
print("设置成功")
if __name__ == "__main__":
service()

fire 是一个比 click 更有使用体验的命令行工具包。
但是在 help 命令中,会进入 man 的交互模式里,不能直接打印到标准输出里。
看了下 Issue,有几种解决方案,记录一下。
修改 fire.core.Display
if __name__ == "__main__":
# Make Python Fire not use a pager when it prints a help text
fire.core.Display = lambda lines, out: print(*lines, file=out)
fire.Fire(...)
更改 PAGER 环境变量(推荐)
* windows 上设置 setx PAGER type
* linux 上设置 export PAGER=cat
在程序中修改环境变量
os.environ["PAGER"] = 'cat'
def _fire_print_prepare() -> None:
"""help to print mode `setx PAGER cat`"""
import os
import platform
from shutil import which
if os.environ.get("PAGER"):
return
if which("cat"):
os.environ["PAGER"] = "cat"
elif platform.platform().startswith("Windows"):
os.environ["PAGER"] = "type"
通过 acme.sh 生成证书并自动更新
curl https://get.acme.sh | sh
apt install socat
/root/.acme.sh/acme.sh --register-account -m my@example.com
/root/.acme.sh/acme.sh --issue -d www.mydomain.com --standalone
/root/.acme.sh/acme.sh --upgrade --auto-upgrade
需要先关闭 nginx systemctl start nginx
/root/script/acme_job.sh
echo "start acme.sh $(date +"%Y-%m-%d %H:%M:%S")"
systemctl stop nginx
/root/.acme.sh/acme.sh --upgrade --auto-upgrade
/root/.acme.sh/acme.sh --renew -d www.mydomain.com --force
/root/.acme.sh/acme.sh --renew -d www.mydomain2.com --force
systemctl start nginx
echo "finish acme.sh $(date +"%Y-%m-%d %H:%M:%S")"
echo "==========================="
设置执行时间:
vim /var/spool/cron/crontabs/root2 5 * * * /usr/bin/bash /root/script/acme_job.sh > /var/log/acme_job.log
查看自动更新脚本日志
tail /var/log/acme_job.log
tail /var/log/cron.log
查看日志docker logs ss-libev -f --tail 20
2021/09/10 10:08:03 http: TLS handshake error from 192.168.1.1:999: remote error: tls: bad certificate
2021/09/10 10:08:04 http: TLS handshake error from 192.168.1.1:999: remote error: tls: bad certificate
2021/09/10 10:08:05 http: TLS handshake error from 192.168.1.1:999: remote error: tls: bad certificate
2021/09/10 10:08:06 http: TLS handshake error from 192.168.1.1:999: remote error: tls: bad certificate
/root/.acme.sh/acme.sh --upgrade --auto-upgrade[Fri 10 Sep 2021 10:11:37 AM CST] Renew: 'www.mydomain.com'
[Fri 10 Sep 2021 10:11:37 AM CST] Using CA: https://acme-v02.api.letsencrypt.org/directory
[Fri 10 Sep 2021 10:11:37 AM CST] Standalone mode.
[Fri 10 Sep 2021 10:11:37 AM CST] LISTEN 0 511 0.0.0.0:80 0.0.0.0:* users:(("nginx",pid=1481169,fd=8),("nginx",pid=898219,fd=8))
LISTEN 0 511 [::]:80 [::]:* users:(("nginx",pid=1481169,fd=9),("nginx",pid=898219,fd=9))
[Fri 10 Sep 2021 10:11:37 AM CST] tcp port 80 is already used by (("nginx",pid=1481169,fd=8),("nginx",pid=898219,fd=8))
80 [
[Fri 10 Sep 2021 10:11:37 AM CST] Please stop it first
[Fri 10 Sep 2021 10:11:37 AM CST] _on_before_issue.
vim /etc/rsyslog.d/50-default.confsudo service rsyslog restart/var/log 目录下看到 cron.log,vim cron.log 就可以查看 cron 运行日志了。Error, can not get domain token "type":"http-01","url":"https://acme.zerossl.com/v2/DV90/chall/ZlNEi3nO05c_rSrqfaId_A","status":"invalid","error":{
Please add '--debug' or '--log' to check more details.
通过 acme.sh 生成证书并自动更新
curl https://get.acme.sh | sh
apt install socat
/root/.acme.sh/acme.sh --register-account -m my@example.com
/root/.acme.sh/acme.sh --issue -d www.mydomain.com --standalone
/root/.acme.sh/acme.sh --upgrade --auto-upgrade
mkdir /etc/shadowsocks-libev
# vim /etc/shadowsocks-libev/config.json
{
"server":"0.0.0.0",
"server_port":9000,
"password":"password",
"timeout":300,
"method":"aes-256-gcm",
"fast_open":true,
"nameserver":"8.8.8.8",
"mode":"tcp_and_udp",
"plugin":"xray-plugin:tls;host=www.mydomain.com",
"plugin_opts":"server"
}
docker pull teddysun/shadowsocks-libev
docker run -d -p 9000:9000 -p 9000:9000/udp --name ss-libev --restart=always -v /etc/shadowsocks-libev:/etc/shadowsocks-libev -v /root/.acme.sh:/root/.acme.sh teddysun/shadowsocks-libev
{
"server": "www.mydomain.com",
"server_port": 9000,
"password": "password",
"method":"aes-256-gcm",
"plugin": "xray-plugin",
"plugin_opts": "tls;host=www.mydomain.com",
"plugin_args": "",
"remarks": "mydomain.com",
"timeout": 5
},
随便写写
建议直接使用 cookiecutter
Linting
jetbrains://Python/settings?name=Editor--Code+Style--Python
Continuation indent = 4flake8 # 代码检查
flake8-black # black 风格检查
flake8-import-order # import-order(isort)check
flake8-bandit # 安全代码
flake8-annotations # 函数注释检查
flake8-builtins # python builtins 是否被变量名占用
flake8-variables-names # 变量名可读性检查
flake8-functions # 函数检查 长度+参数长度+返回值长度
flake8-expression-complexity # 函数复杂性检查(层数)
# not use
flake8-bugbear # For Flake8 finding likely bugs and design problems in your program.
