- 在终端输入
netstat -ano | findstr 5555
获取占用 5555 端口的进程 pid tasklist | findstr pid
查看是那个进程占用了- 发现是 docker 占用了 关掉退出就好了
- 可以选择暴力一点的方法
taskkill /pid 1234 /f
(/f 指的是强行结束) - 利用进程的 PID 结束进程:
ntsd -c q -p 1332
(结束 explorer.exe 进程)
博客
代码人生:编织技术与生活的博客之旅
centos 安装 tmux
先设置个代理
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 然后重开就好了)
找不到 libevent 的问题
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 连接了。
关于专注上班
上班总爱划水,得思考解决方案。
微信
当水友们想认真上班的时候 分享几个不用退群的几个小技巧:
1.放弃电脑端微信 改用手机登录
2.把微信藏到隐藏图标里
藏起来就想不到啦
3.把任务栏隐藏,进入专注模式
鼠标帖到任务栏就出来了,问题是钉钉也看不到了。
4.把任务栏放到不常见的位置
如图把任务栏放到不容易看见的地方,就很少会注意到期动态。
退群了该看微信还是会看微信,重复,退群了该看微信还是会微信的,与群聊无关。
同时,即算关了聊天,看知乎,v2ex,或者逛github,都会是另一个角度的“微信”。
本 质上还是想放松一下(虽然多资讯会带来更多的决策负担,最好的方法还是啥也不做去放松)。
既然大脑想休息,建议是和读书一样,设定上下课时间,穿插休息时间,建议用番茄时间去管理自己。
专注工具
番茄时间
优缺点可以看看参考
- 推荐那种到时间了会锁定屏幕的软件
- Ubuntu推荐a pomodoro timer for gnome
- Windows直接用自带的闹钟和时钟,真香。
- Windows推荐一个番茄钟,也有github,用起来一般般,界面酷炫,但是我本身只需要到时间提醒的功能。
- 网页版番茄时钟
欢迎大佬们推荐一些好用的软件。
再讲讲下午太长的问题
A:下午好长。。。
B:番茄时间咯
B:坐25分钟(摸鱼or工作) 站5分钟(上个厕所喝杯水)
B:三个循环后有15分钟的找同事聊天时间
B:四五个循环就差不多要下班了
B:这样下午就不漫长了
A:工作太紧
B:人不是机器
B:不能可专注一下午
B:会坏掉的
vs_code 插件集
- 拿到了 GitHub Copilot 的使用权,真的很香,
- 为此开始尝试使用 vscode 编程折磨自己。
- 以前总说小体积 vscode 比不上 IDE pycharm,
- 确实没有插件啥也不是,有插件了估计比 pycharm 还重。
- vs code 选插件真的是很痛苦的事情,弄个表做个备份。
- aw-watcher-vscode - ActivityWatch 监控插件
- Code Spell Checker - 代码拼写检查
- Darcula PyCharm Theme Darcula - PyCharm 主题
- Deploy - 服务器部署
- Docker - docker 插件
- Foam for VSCode - 思维导图生成插件
- GitHub Copilot - github 代码补全插件
- GitLens — Git supercharged - 查看改动记录 ,文件历史
- IntelliJ IDEA Keybindings - IntelliJ IDEA 快捷键
- Jupyter ms-toolsai.jupyter - python jupyter 插件
- MagicPython - python 调试插件
- Markdown All in One - markdown 插件
- Markdown Links - markdown 链接图生成插件
- Markdown Notes - Markdown 贴条插件
- Markdown Preview Mermaid Support - markdown Mermaid 图插件
- markdownlint - markdown 代码检查
- Marp for VS Code - markdown 转 ppt
- Mermaid Markdown Syntax Highlighting - markdown Mermaid 语法高亮
- Note Sync - 把 vscode 当笔记用的时候的同步插件
- npm - npm 拓展
- Open Window Tab Context - 右键 tab 再新打开一个窗口
- Paste Image - markdown 贴图小助手
- Prettier - Code formatter - 代码格式化
- Pine Script Syntax Highlighter - pine 脚本语言代码高亮
- Pylance - python 拓展包
- Python - python 拓展包
- Python Docstring Generator - google 风格 python 文档快速生成
- Remote - Containers - docker 助手
- Remote - SSH - 远程连接助手
- Remote - SSH: Editing Configuration Files - 远程连接助手 2
- Remote - WSL - wsl 远程连接助手
- Remote Development - 远程部署合集包
- Vetur - vue 拓展包
- vscode-pdf - pdf 打开插件
- vsinder - 交友插件
- WakaTime - 活动记录统计插件
- vim - vim 拓展包
- git graph - git 图表
- Markdown Mind Map Preview - markdown 转思维导图
- vscode-office - markdown 所见所得
Microsoft-Todo-List 同步异常
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()
python-fire-help 标准输出
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 免费申请 HTTPS 证书
ssl
通过 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
- 写了个脚本:vim
/root/script/acme_job.sh
- 更新 acme
- 更新证书
- 官方说两个月会自动更新。因为 Nginx 占用会失败。
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 "==========================="
设置自动执行时间
设置执行时间:
- 05:02 执行脚本 (大概率不在这个时间段玩电脑)
vim /var/spool/cron/crontabs/root
2 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.
- ubuntu 需要 打开 crontab 日志
vim /etc/rsyslog.d/50-default.conf
- 打开文件,在文件中找到 cron.*,把前面的 '#'去掉,保存退出,输入
sudo service rsyslog restart
- 重启系统日志,然后稍微等下应该就能在
/var/log
目录下看到 cron.log,vim cron.log 就可以查看 cron 运行日志了。
acme.sh 报错 can not get domain token
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.
搭建 xray-shadowsock
参考
ssl
通过 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 启动 shadowsocks
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
客户端配置
- 去 xray-plugin 下载对应软件
- 放到 shadowsocks 客户端文件夹里
- 写入配置
{
"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
},
- 安卓用户点 这里 下载
后端工作的思路整理
随便写写
1. 监控与错误报警
- 普罗米修斯监控响应速率 由运维管理 grafana
- sentry 收集报错日志 保存错误触发条件 并报警
- traceback_with_variables 在日志中打印完备触发条件
- traceback.format_exc() 打印错误栈
2. 跟踪调试
- pysnooper 打印每一步
- IPython.embed 直接打开命令
3. 开发环境完备
- CI\CD 托管测试发布上线 节约时间
- PYPI 托管包
- versioneer 用 git tag 管理包版本
- pip-tools requirements 管理
- Git-hook 提交时单元测试检查
4. 偷懒
- cookiecutter 建立项目 单元测试 版本管理一步到位
- docker 自己弄个全家桶 pypi jenkins grafana sentry mongo redis mysql 一步到胃 # todo
- 弄个项目做为自己的脚本集入口
5. 项目结构问题
建议直接使用 cookiecutter
- 项目名中划线 包名下划线 避免环境疑难杂症
- models 文件夹 数据结构+数据库+对象行为
- views/apis 文件夹 视图相关只管接口
- env.py 定义基础组件
- config.py 配置管理
6.python 代码检查
Linting
- PyCharm 需要修改格式化
jetbrains://Python/settings?name=Editor--Code+Style--Python
Continuation indent = 4
flake8 # 代码检查
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.