Python农历转换
在Python中进行公历转换农历, 是一件很简单的事儿.
>>> import datetime
>>> from zhdate import ZhDate
# 农历转公历
>>> date = ZhDate(2022,4,5)
>>> print(date)
农历2022年4月5日
>>> date.to_datetime().date().year
2022
>>> date.to_datetime().date().month
5
>>> date.to_datetime().date().day
5
Read More
内网穿透: 使用ssh tunnel将内网主机映射到公网
如果希望将一台内网中的主机发布到公网(使用阿里云/腾讯云中转的方式), 使得该内网主机可以在全球任意地点被访问, 仅需要用到ssh即可. 用到的原理就是ssh的remote port forwarding特性, 具体可参考本博客之前写的简单解释 ssh 中的 local port forwarding 和 remote port forwarding.
假设我们已经有了一台阿里云/腾讯云的主机, 其公网IP是1.1.1.1, 需要在ssh配置里启用GatewayPorts(否则ssh tunnel建立以后只会监听127.0.0.1)
在我们的内网主机上写入一个systemd服务
sudo vim /etc/systemd/system/[email protected] # 写入如下内容
[Unit]
Description=Persistent SSH Tunnel to from port 127.0.0.1:%i on this server to port 3389 on external server(1.1.1.1:3389)
After=network.target
[Service]
Environment="LOCAL_PORT=%i"
ExecStart=/usr/bin/ssh -NTC -o ServerAliveInterval=60 -o ExitOnForwardFailure=yes -R 3389:0.0.0.0:${LOCAL_PORT} [email protected]
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
参数解释:
T: 禁止分配伪终端
N: 不执行远程指令
C: 请求压缩所有数据
然后启用服务
sudo systemctl daemon-reload
sudo systemctl enable ssh-tunnel@22 --now
然后就可以通过1.1.1.1:3389来访问这台内网主机的22端口了.
参考文档: README-setup-tunnel-as-systemd-service.md
Read More简单评价surface laptop go
是的, 买了个surface laptop go, 来自微软官方商城的翻新产品, 十代i5, 8+128的配置, 2799的价格拿下.
外观图片我就不放了, 网上一大堆, 性能啥的也不再多说, 处理器的性能网上都是可查的. 这里简单写一下我认为的这个本子的优缺点吧.
advantages
- 田牌LOGO, 拿出去装X的时候逼格满满
- 做工不错, 哪怕是塑料机身, 也能看出来这不是一般的塑料, 不是外面的野鸡本
- 全帖合镜面屏幕, 不用担心落灰了, 这点对于有强迫症的我来说简直不要太好
- 微软键盘比较好用.
- 12.4寸的触屏, 加上1.1kg的体积, 真是又轻又薄, 满足对轻薄本的所有要求.
- 可能是所有surface笔记本/平板里面最薄的边框了
disadvantages
- 电池. 这一点真是最大败笔. 我进行了多次测试, 在将电池模式设置为倒数第二档(推荐模式)+80%的亮度时, 在youtube上观看了大约20分钟的视频, 下降了约8%的电量. 也就是说, 这台surface laptop go在满电的情况下, 最大只能坚持4小时. 在我后来的测试中, 如果大量浏览网页的话, 掉电会更快一些. 所以结论是, surface laptop go的实际续航在2-4小时之间. 这是将系统/固件更新到2022年1月25日的情况下得出的结论.
- 屏幕亮度低. 据称最高只有320尼特. 我的直观感受告诉我80%的亮度是能接受的最低亮度了. 事实上在一些比较明亮的场合, 可能需要将亮度调整到100%
- 分辩率低. 是的, 用惯了高分屏的人, 再用回颗粒感的屏幕, 会觉得有些不太舒服.
Conclusion
一直都觉得手上应该有个高逼格的本, 可以偶尔拿出去装X. 一直在surface系列和macbook air系列之间犹豫不决. 当然最重要的还是考虑到价格因素, 一直没有入手.
之前在顺电卖场摸过一些常见本. 对surface laptop go的外观一见倾心. 只论外观的话, 它是所有的surface产品里最符合我审美的一款产品. 只不过, 在顺电的时候, 没法详细的体验这款产品, 直到看到2799的官翻价, 才终于入手了.
一周的体验下来, 基本上也是对这个本有了一些了解. 如同网上说的那样, 这个本的优点和缺点都是非常明显的. 最令我震惊的还是电池的续航问题, 之前我经历过DELL/联想的多款笔记本, 都没有这么弱鸡的续航. 考虑到这一点, 我曾经在犹豫是不是要退掉这个surface laptop go, 后来朋友提醒了我, 看在它是一个2799的田牌产品, 不要想太多了.
一句话总结: 如果你只在意逼格+轻薄, 那它确实是一台相当不错的本. 但凡你对续航有一点要求的话, 那么它就不适合你.
这篇文章是在这台surface laptop go上面完成的.
Read MoreOpenVZ vps 使用 snapd 部署 certbot
在 OpenVZ 的 vps 上使用 snapd 时, 会出现如下提示
error: system does not fully support snapd: cannot mount squashfs image using "squashfs": mount:
/tmp/sanity-mountpoint-404380626: mount failed: Operation not permitted.
error: system does not fully support snapd: cannot mount squashfs image using "squashfs": mount:
/tmp/sanity-mountpoint-404380626: mount failed: Operation not permitted.
下面介绍解决办法:
sudo apt install fuse squashfuse snapd
sudo mknod -m 666 /dev/fuse c 10 229
sudo snap install core; sudo snap refresh core
sudo apt-get remove certbot
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot
参考文档.
Read MoreCreate Worldmap/Table panel in grafana with Elasticsearch datasource
某天接到一个需求, 即在Grafana中添加一个Table panel, 将AD系统里面登陆失败的用户都挑出来, 展示在table里面, 同时也将失败次数展示出来.


接下来看看Worldmap panel. 新版Grafana的很多设定都发生了变化.



简单解释 ssh 中的 local port forwarding 和 remote port forwarding
1, local port forwarding
ssh client端:
ssh server端: serverIP:80
如果希望在ssh client端访问ssh server端的80端口, 则可以运行
ssh -L 8000:serverIP:80 user@serverIP
然后就可以在client端通过访问127.0.0.1:8000达到访问server端80端口的目的
提示:
8000:serverIP:80这里的serverIP不一定要是server自己, 也可以是127.0.0.1, 或者是任何server端能够访问的远程地址.
然后就可以实现在ssh client端访问serverIP:80(即在client端访问127.0.0.1:8000)
下面是一个例子

如上图. 如果执行了
ssh -L 8000:10.10.1.11:80 [email protected]
那么, 访问192.168.56.101:8000则等同于访问了10.10.1.1:80
2, remote port forwarding
ssh client端: clientIP:80
ssh server端:
如果希望在server端访问client端的80端口
ssh -R 8000:localhost:80 user@serverip
然后就可以在ssh server端通过访问127.0.0.1:8000达到访问client端80端口的目的.
提示:
命令里的localhost指的是client侧的IP, 命令里的localhost不一定得是ssh client本身, 也可以是任何一个ssh client可达的地址.
server端默认是会监听127.0.0.1:8000, 如果想让server端监听0.0.0.0:8000, 需要将ssh配置中的GatewayPorts配置项打开
下面是一个例子
