跳到主要内容

博客

代码人生:编织技术与生活的博客之旅

配置完后,感觉 gitalk 的 clientID 和 clientSecret 不能直接放项目中,毕竟是开源的。

参考 action 的配置,在项目设置中找到 secert 配置,增加两个环境变量。

.github\workflows\ci.yml下面的 action 配置,增加如下配置:

GITALK_CLIENTID: ${{ secrets.GITALK_CLIENTID }}
GITALK_CLIENTSECRET: ${{ secrets.GITALK_CLIENTSECRET }}

config.js 中使用配置的环境变量名称就好了。

clientID: process.env.GITALK_CLIENTID,
clientSecret: process.env.GITALK_CLIENTSECRET,

本地测试因为填写了 feedback 为博客地址,会导致登陆后默认指向线上博客地址,所以本地测试没有成功。

好了博客评论系统开启了,其实相关评论都到 issus 里去了,还有点不习惯。

具体配置有啥不懂的,可以看看本项目的源码。

编程阅读需 1 分钟

pycharm使用远程环境后

会将远程的python环境download下来

然后放到pycharm的缓存目录下

在远程端口更新某个包后

本地的缓存还是这个包的老版本缓存

在debug打断点的时候会贼难受

目前还没有找到解决方案

记录一下。

参考:

解决方法:

  1. Try Settings | Project ... | Project Interpreter | Gear button | Show all | Show paths for the selected interpreter | Reload list of paths solution 1

  2. Go to External Libraries in the project tree and expand it. Right click on "Remote Libraries", you will see an option to "Synchornize 'number'"(并没有找到这个按钮) solution 2

3."Invalidate Cache/ Restart" under file menu but still the update of remote library.

编程阅读需 1 分钟

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

参考

编程阅读需 1 分钟

先设置个代理

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

问题 1

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

.

随笔阅读需 1 分钟

博客想加个 steam 连接,但是没有 logo。找了半天终于找到配置方案,记录一下。

首先要找到一个叫 iconfontCssFile 的配置,知道可以引用在线的 css。

然后进 https://www.iconfont.cn/ 搜 steam 找到自己想要的图片 点击购物车图标添加至购物车。

右上角购物车添加至项目,没有就自己创建一个项目。

添加后就可以在项目中生成在线地址了。

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

编程阅读需 1 分钟

上班总爱划水,得思考解决方案。

微信

当水友们想认真上班的时候 分享几个不用退群的几个小技巧:

1.放弃电脑端微信 改用手机登录

2.把微信藏到隐藏图标里

藏起来就想不到啦

3.把任务栏隐藏,进入专注模式

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

4.把任务栏放到不常见的位置

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

把任务栏放到左边

退群了该看微信还是会看微信,重复,退群了该看微信还是会微信的,与群聊无关。

同时,即算关了聊天,看知乎,v2ex,或者逛github,都会是另一个角度的“微信”。

本质上还是想放松一下(虽然多资讯会带来更多的决策负担,最好的方法还是啥也不做去放松)。

既然大脑想休息,建议是和读书一样,设定上下课时间,穿插休息时间,建议用番茄时间去管理自己。

专注工具

番茄时间

优缺点可以看看参考

欢迎大佬们推荐一些好用的软件。


再讲讲下午太长的问题

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

  • 拿到了 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 所见所得

编程阅读需 2 分钟

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()

随笔阅读需 1 分钟

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"
Python阅读需 1 分钟

  • 证书
  • [[搭建 xray-shadowsock]]
  • 推荐一个新的证书申请 certbot
  • [[certbot 证书]]

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.
  • 参考
  • /root/.acme.sh/acme.sh --issue -d www.mydomain.com --standalone --server https://acme-v02.api.letsencrypt.org/directory
编程阅读需 2 分钟