跳到主要内容

博客

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

参考

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 分钟

随便写写

1. 监控与错误报警

  1. 普罗米修斯监控响应速率 由运维管理 grafana
  2. sentry 收集报错日志 保存错误触发条件 并报警
  3. traceback_with_variables 在日志中打印完备触发条件
  4. traceback.format_exc() 打印错误栈

2. 跟踪调试

  1. pysnooper 打印每一步
  2. IPython.embed 直接打开命令

3. 开发环境完备

  1. CI\CD 托管测试发布上线 节约时间
  2. PYPI 托管包
  3. versioneer 用 git tag 管理包版本
  4. pip-tools requirements 管理
  5. Git-hook 提交时单元测试检查

4. 偷懒

  1. cookiecutter 建立项目 单元测试 版本管理一步到位
  2. docker 自己弄个全家桶 pypi jenkins grafana sentry mongo redis mysql 一步到胃 # todo
  3. 弄个项目做为自己的脚本集入口

5. 项目结构问题

建议直接使用 cookiecutter

  1. 项目名中划线 包名下划线 避免环境疑难杂症
  2. models 文件夹 数据结构+数据库+对象行为
  3. views/apis 文件夹 视图相关只管接口
  4. env.py 定义基础组件
  5. 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.

随笔阅读需 2 分钟

  • [[自建 RSS 订阅]]

  • 在博客或者项目底端找到RSS连接,获取URL。

eg. https://anguswg.github.io/AngusWG/rss.xml

rss

  • IFTTT注册账号
  • CREATE NEW 创建一条新规则
  • IF RSS 增加条件 如果rss更新

search rss add RSS URL

  • THEN EMAIL

Trigger email

feedly

这里有另一个订阅方式 feedly 操作上也是获取RSS,贴上去就好了~

Outlook RSS(目前使用中)

outlook自带了一个rss订阅方案

  • 首先会把所有的文章都下载下来。
  • 我每天都会检查邮件,放在outlook反而更方便。
  • 不足是找不到订阅连接,所以都先放到了友情链接

编程阅读需 1 分钟

之前借着 v2ex 帖子
总结了下自己的咖啡感受。
顺便发个帖子。
屁大点事发个文系列

关于速溶

我一直喝的是速溶的

优缺点

  • 首先耗时不大,勺子挖一瓢,放热水按一下(电动的自动搅拌杯)。
  • 其次咖啡因摄入量可以自己控制。 不用一杯喝到晚上失眠。
  • 缺点是要洗杯子。偷懒就喝完咖啡再来杯热水,自动搅拌一下就当洗了。

牌子

  • 之前喝的 日本的 UCC117
  • 后面喝的 德国的 Tchibo (目前在喝这个)

知乎上推荐的就哪几种 一个一个试着来,
或者一次性一样都买一个,
好喝留着,不好喝的放公司让同事们自助。

关于自动搅拌杯

  • 之前买的热力转磁力的,转动不受控制、容易坏 、杯子容量还小。
  • 后面换了上电池的,400ml,其实容量也小,将就着用了 。( 31 ¥,要买请挑容量最大的)
  • 不用充电的、一是怕漏电,二是接口没得 typc-C 、麻烦、电池公司也有,而且基本上一个季度都不用换。
  • 电池仓防水做的也还行。

其他配件

牛奶+制冰机

在上家公司,和小伙伴 aa 买了制冰机。
公司本身有大盒脱脂牛奶无限量提供。
幸福感直接拉到最高。
这家马上也都要到位了。
改善工作环境小能手

关于咖啡机

  • 公司有咖啡机* 2,
  • 也有胶囊咖啡机* 1。

共同的问题是声音大,吵,听着就容易暴躁。

胶囊咖啡机要长期放水箱,水放久了就不太想用。

咖啡机我刚来的时候喜欢玩,后期发现是小强之家
把我恶心吐了。特别是放豆子和水箱的地方,简直就是自助餐。
只有公司请人清洗后,才会用一下(磨个豆子冲杯咖啡,中午可以打个奶泡玩) 。 清洗后第二天就不会用了(亲眼看到马上爬进去)。

小强之家

人会因为喝咖啡兴奋而胡说八道吗

是有可能的。喝咖啡后兴奋的原因主要是中枢神经系统受到咖啡因的刺激而产生的生理反应。

  • 一些可能会因此胡说八道的原因包括:
    1. 咖啡因的兴奋作用会增加脑内多巴胺等神经递质的分泌,降低自我约束能力。
    2. 兴奋状态下心率升高,血压变化,容易情绪化和不注意微细细节。
    3. 长期沉浸在兴奋状态下会降低逻辑思考和判断力,更容易随意想东想西。
    4. 个性因素,有些人激动起来更难控制自身。
    5. 太多咖啡中毒会引起焦虑不安等负面影响,信息输出难免涉及错误。
    6. 与他人交流时以上生理变化也难维持正常的社交技巧。

不过,这种可能性并非绝对,还会受个人体质影响。一般享受咖啡带来的好处即可,不建议狂饮成习惯。控制咖啡分量和精神状态尤为重要。

屁大点事阅读需 3 分钟

相关资料:

安装依赖

pip install pstats  
pip install snakeviz

获取程序运行数据

通过cProfile获取性能分析数据

  • cProfile自python2.5以来就是标准版Python解释器默认的性能分析器。
  • cProfile是一种确定性分析器,只测量CPU时间,并不关心内存消耗和其他与内存相关联的信息。
def run_1():  
"""your function """
pass


def profile_func(func):
import cProfile
file_name = "prof_{}_1.pstat".format(func.__name__)
cProfile.run("{}()".format(func.__name__), file_name)
import pstats
p = pstats.Stats(file_name).sort_stats("cumtime")
# p.print_stats("rqalpha_mod_ricequant_data")
p.print_stats("base_position")
return p


if __name__ == '__main__':
p = profile_func(run_1)

通过pycharm直接获取运行数据

Pycharm 右上角启动按钮旁边有性能分析按钮,
点击后会自动弹出pycharm自带的性能分析界面,
当然也可以复制.pstat文件地址,使用snakeviz进行分析(推荐)。


snakeviz 生成剖面图

运行目录下 命令行输入:snakeviz prof_run_1_1.pstat

点击生成的连接 查看柱状剖面图

image.png


gprof2dot 时间分析图

gprof2dot -f pstats mkm_run.prof | dot -Tpng -o mkm_run.png

image.png

Python阅读需 1 分钟

  • 屁大点事发个博文系列。
  • 参考

首先 QQ 输入法输入 now 会有一个自带的当前时间短语。

改成 iso 格式的日期

  • QQ 输入法自定义时间语句 $(Year)-$(month)-$(date) $(hour):$(minute):$(second)

添加自定义短语

好了,以后写 History.md 格式就好统一了。


.

屁大点事阅读需 1 分钟

彻底不用简书了,纪念一下。

一开始我的文章内容是基于简书 (www.jianshu.com),
也是因为简书,才喜欢上 markdown 语法。 简书的编辑器有所见即所得的 markdown 预览,
对于初学者就非常的直观。

简书编辑

简书实时保存很迅速,
在多端需要都有编辑(记录)的情况下,
右上角的按钮会实时显示成保存中,
每次保存都有历史记录,
给人非常安心的感觉。

保存 历史记录

老版本的简书文章界面非常的简洁,
隐隐有点苹果的高级质感,
现存版本的简书文章旁边都是广告,眼花缭乱。

老版本简书


营销文章占领平台,随着简书做大了,
很多机器人从 csdn 搬到了简书上,
但是对我单纯放内容的人而言,问题不大。

一次明星引战引到简书,简书开始了质量审查。
“我们”有种特性,上头传达命令时,说 10 分,下头的人做事,得要求 12 分。
于是乎简书的审查非常非常严,技术文章稍微沾点边就会锁定,哪怕以前的老文章也会被锁定。

锁定

再后面简书搜索功能关闭,至今(2021-05-17)未开。

感觉到简书离凉不久了,于是全部搬运到 github 上,
确实部分还未完成发表的文章放私有仓库编辑,再贴过来不方便,
但是胜过审查不严格,技术讨论自由。

  • 掘金

偶尔试过掘金的编辑。
掘金的文章质量目前来看还是很好,
再一个文章编辑带色彩,目前来看比简书要舒服很多。
但是考虑到万一哪天突然有了敏感词,
所以还是换本地 github 来的舒服。

掘金编辑

  • OneNote

已经用了 outlook + Microsoft todo。
也想着用 OneNote 去做笔记及文章发表,
但是最新版的对 markdown 并不友好,且国内同步是个很大的问题。
所以还是选择了当前的方案。

最终还是 vs code 的方案去写,也开始尝试接触 Vue 的框架去弄 blog。 未完成的写在 github 私有项目里,写完了的文章复制过来。 用了几个插件,保证舒适度,感谢插件开发者的贡献。

  • Markdown All in One # markdown 基本需要都在里面了
  • Note Sync # 实时同步到 github 上,建议配置 dev 分支,写好了 merge 一下。
  • Mermaid Markdown Syntax Highlighting # 画图专用
  • Marp for VS Code # markdown to PPT

目前用于写博客还挺舒服的。


今天把简书的内容全部搬过来,简书彻底废弃,特此纪念一下。

_

随笔阅读需 3 分钟

记录一下一些 Pycharm 的不爽点。 多了的话就换 vscode 为主力了。

coverage

  • 在多项目下,report 是显示第一个项目的 report 导致覆盖率为 0。
  • .coveragerc 能识别不跑的代码,但是不能识别不现实,不跑会导致覆盖率下降。 目前用注释干掉了 (# pragma: no cover)。

pycharm 打不开问题

问题连接

首先确定 wsl 是否能打开

然后 WORKAROUND: run the following commands in the Administrator console (cmd.exe):

netsh int ipv4 set dynamicport tcp start=49152 num=16383 netsh int ipv4 set dynamicport udp start=49152 num=16383 If the above doesn't help, please try these commands instead:

net stop winnat net start winnat

提示 Package requirements 'traceback_with_variables’, 'sentry_sdk' are not satisfied

  • 改包名到正确包名
    • traceback-with-variables
    • sentry-sdk
  • 右下角编辑器 - manage packages - python package - 设置(小齿轮)- 增加 Package Repository

doctest 不支持

随笔阅读需 1 分钟

  • 下载 cygwin

  • 安装时选择包 make

  • C:\cygwin64\bin添加到系统环境变量第一条 ,放后面会有 bug.

  • 然后就可以用了

  • 有挺多 Linux 命令的,在没有将 wsl2 作为主力平台的时候,cygwin 的挺多命令能弥补 windows 的部分不足。

编程阅读需 1 分钟

下载官方的部署项目

git clone https://github.com/getsentry/onpremise.git
cd onpremise
git chechout 9.1.2

docker 换源

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://hkoa9dfz.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

安装

export SENTRY_IMAGE='sentry:9.1.2'
./install.sh

运行 Sentry docker-compose up -d

Bug

解决 sentry 安装时的 could not translate host name “postgres” to address: Name or service not known

docker rmi postgres
docker pull postgres:9.6

更新后发现表不兼容
偷懒直接删掉了

编程阅读需 1 分钟