关于一个失误的反思

用AI辅助写了一些代码autotrader,根据行情的实时来分析并且决定买卖crypto的合约, 然而并没有做到逐行代码检查,导致实际使用中出现异常损失,事后发现异常才回来重新审视代码。

在自己做的一些事情上,需要100%的专注,我需要的是坚定的信念和精确的计算,如果做不到,就没有办法达到想要的成绩。

之前也有过类似的错误,没有经过严格测试和验证,导致损失。这次是逻辑经过了验证,但是没有将两种模式合并到一起测试,虽然单独两者都可以正常执行逻辑也验证过。

不要对任何未经测试的路径抱有侥幸心理,特别是当代码是AI生成的情况下,没有完全理解的情况下,直接上线用。

 

整理Centos的启动管理(借助Chatgpt)

将这个 `updateddns.sh` 脚本放在 `startscript.sh` 中运行是可以的,但并不是最佳实践。因为它是一个无限循环的脚本,可能会带来一些问题,如无法平稳重启、停止或监控。最佳实践是将它转换为一个 **systemd** 服务,这样可以更好地管理它的启动、停止和重启。

### 最佳实践:将 `updateddns.sh` 作为 systemd 服务运行

#### 1. 编写 Shell 脚本
确保你的 `updateddns.sh` 脚本可执行,且放置在适当的目录(如 `/usr/local/bin/`):

“`bash
#!/bin/bash
while true
do
sleep 1m
myip=$(curl v4.ident.me)
curl http://***:***@api.dynu.com/nic/update?myip=$myip
sleep 2m
done
“`

确保脚本有执行权限:
“`bash
chmod +x /usr/local/bin/updateddns.sh
“`

#### 2. 创建 systemd 服务文件
在 `/etc/systemd/system/` 目录下创建一个 `.service` 文件,例如 `updateddns.service`:

“`bash
sudo nano /etc/systemd/system/updateddns.service
“`

服务文件内容如下:

“`ini
[Unit]
Description=Update DNS with Dynu API
After=network.target

[Service]
ExecStart=/usr/local/bin/updateddns.sh
Restart=always
RestartSec=60

[Install]
WantedBy=multi-user.target
“`

– `ExecStart`:指定你的脚本路径。
– `Restart=always`:确保脚本在失败时自动重启。
– `RestartSec=60`:在脚本意外退出后 60 秒再重启。

#### 3. 启动并设置开机启动
接下来,刷新 systemd 守护进程,启动服务并设置为开机自动启动:

“`bash
sudo systemctl daemon-reload
sudo systemctl start updateddns.service
sudo systemctl enable updateddns.service
“`

#### 4. 检查服务状态
你可以通过以下命令查看服务状态,确保它正常运行:

“`bash
sudo systemctl status updateddns.service
“`

### 为什么这样做是最佳实践?
– **可管理性**:通过 systemd,你可以轻松启动、停止和重启服务,避免手动操作。
– **自动重启**:如果脚本意外退出,systemd 会自动重启它。
– **日志记录**:使用 `journalctl` 查看服务的运行日志,更易于调试和监控。

这样,你的脚本运行更加安全、稳定,并且方便管理。

转载–通过chatgpt来理解不太熟悉的知识

ESP8266-01S模块给大家带来了更多的想象空间,但是具体使用过ESP8266的GPIO引脚的同学一定也遇到ESP8266上电时GPIO引脚抖动的问题。如果把GPIO作为输入引脚、点亮LED、连接其他模块等作用,这个抖动都还时可以接受,上电时无非就是LED闪烁一下,但是如果把GPIO连接继电器模块,感受就比较直接:继电器闭合又马上断开,会导致继电器后的用电器发生闪断,有可能烧毁。

1、ESP8266-01S的GPIO抖动现象

经过实际测试发现ESP8266-01S在如下情况下会发生GPIO状态的抖动:

1)上电的一瞬间GPIO0、GPIO2都会从高电平变为低电平,然后再变为高电平

2)将GPIO0配置为输出时,GPIO0马上从高电平变为低电平。GPIO2也存在同样的问题

 

2、ESP8266-01S的GPIO抖动原因

通过查询资料发现时芯片bug,emm… 芯片的bug我还是第一次听说,有人也使用测试仪进行了测试给出了实锤的证据。最开始学习时发现上电时LED会闪两下,一直以为自己的代码问题,当使用了继电器模块才发现上电瞬间ESP8266-01S的GPIO电平变化并不受代码的控制。至于具体的产生原因咱们也不去过多的去了解,最重要的是想一个办法来解决问题。

 

3、ESP8266-01S的GPIO抖动解决方案

ESP8266-01S的GPIO抖动解决方案有多种

方案 优点 缺点
方案1 根据官方文档修改官方代码并重新编译固件 一劳永逸,彻底解决问题 难度巨大
方案2 不使用GPIO0和GPIO2接继电器,使用TXD和RXD引脚接继电器 解决方式简单可靠 串口不能使用,调式不方便
方案3 继电器电路增加电容滤波,上电时滤除电流的高频抖动 引脚GPIO0和GPIO2、串口都能够正常使用 需要改动硬件电路;

继电器关闭时会出现一点点延迟;

如果快速上电又下电依然存在抖动

我相信具有折腾精神的同学都会选择方案3,当然我也选择了方案3,但是方案3依然存在不小的坑,接下来我会做一个大概的分析。

1)ESP8266-01S继电器驱动电路原理图

首先大家要先看看ESP8266-01S的驱动电路,来了解一下GPIO引脚是如何让继电器工作的

1.png

这个是某宝上畅销的一款ESP8266-01S继电器电路原理图,使用引脚GPIO0来驱动继电器(这里我很困惑大家买了以后都是如何解决抖动问题的),这个电路是带光耦隔离、mso管驱动的,该有的基本上都有,唯一不足的就是没有考虑ESP8266-01S引脚抖动问题。

2)ESP8266-01S继电器改进电路原理图

ESP8266-01S的继电器驱动电路修改也很简单,就是再电阻R2边上并联一个点解电容到地,也许已经有同学发现了这个电容没有容值,先别着急,要看完才能知道为什么。

3.jpg

假设使用引脚GPIO0驱动继电器,GPIO0为低电平时继电器闭合,引脚GPIO0为高电平时继电器断开。

原理如下:上电时当ESP8266-01S的引脚GPIO0突然变为低电平时,光耦工作,光耦的引脚3输出低电平,这时新加的电容就会开始充电,mos管的引脚1依然保持高电平,如果直到电容充满电光耦的引脚3一直保持低电平那么电流就会流过电阻R2,把mos管的引脚1就会被拉低,继电器闭合;如果电容还没充满电光耦的引脚3就变为了高电平,那么就不会有电流留到电阻R2,mos管的引脚1依然保持高电平,继电器就不会闭合。

 

3)ESP8266-01S继电器驱动电路电容选择

明白了原理,接下来就是确定电容的容值了。

首先分析一下:ESP8266-01S上电时GPIO引脚会发生一次抖动,我们标记为抖动A;当代码初始化时把GPIO引脚初始化为输出时GPIO引脚会突然变为0,然后再通过代码把引脚输出置为1,又会发生一次抖动,我们标志为抖动B。

如果只有抖动A,就是你的电路只需要解决ESP8266-01S上电一瞬间的抖动A,这个电容容值选择10~100uF就可以;

如果解决GPIO0的抖动A和抖动B,这里假设ESP8266-01S上电后代码马上去初始化引脚GPIO0,这个电容容值是220uF左右;

如果解决GPIO2的抖动A和抖动B,这里假设ESP8266-01S上电后代码马上去初始化引脚GPIO2,这个电容容值是470uF左右;

至于为什么GPIO0和GPIO2选择的容值不一样,我猜测是因为官方代码里GPIO0和GPIO2的初始化时间不一样。

 

回忆

一个夏日的午后,小男孩躺在床上,带着一点不情愿地躺着,窗外阳光明媚,屋子里却没有那么明亮,甚至还有些黑,原来是因为窗户外面就是一堵墙,隔了不到两米,墙上爬了葡萄藤,给斑驳的水泥墙上点缀出绿色的生机。知了一直叫个不停,这样一个无忧无虑的夏日,永远铭记在了小男孩的记忆里。

再探IPv6

终于将Wordpress迁移到了NAS上,做好了反向代理,基本上达到目的,迁移过程也是比较费力,主要几个点:数据库恢复时没有auto_increment属性,导致无法新建文章。链接地址需要更新,在其中一个数据表中。删除.user.ini文件。

回来IPv6, IPv6目前在提速,各种基础设施都已经开始支持或者即将支持,电信的5G网络已经达成,宽带网络似乎也已经能够使用,但是偶尔会获取不成功?腾讯的云服务器似乎已经支持,但不去折腾,轻量云在某些区域已经开始试点,铺开也是早晚的问题。

目前发现IPv6能够给某些直播软件带来不错的观看体验,特别是电视直播软件,在翻墙方面,亚马逊的服务器默认支持IPv6,因此如果NAS本地有IPv6地址,从亚马逊过来的流量将直接通过IPv6,myqnapcloud.com的DDNS似乎更新IPv6的地址并没有IPv4迅速,使用IPv6的好处是,可以在不开放端口映射的情况下,直接去访问NAS的web服务器,这给访问带来很好的体验。

NAS上IPv6和IPv4是两个不同的防火墙,因此需要同时设置两个类型,因为不清楚对方过来访问的时候,到底是使用IPv4还是v6。

 

 

 

最近一些折腾记录

买了一个机柜,把一些网络设备塞进去,内网网速提升千兆,UPS换电池,能够正常工作了!

NAS:千兆有线网络,开启IPv6,gitea服务器,进入机柜居住;

苹果盒子:千兆有线,进入机柜;

树莓派+bt:WIFI新HA 带zigbee,更多新功能可以探索;

汽车GPS软硬件更新,蓝牙开锁;

Vps不续费及加购,墙是真的狗🐶:不续费腾讯云,加购亚马逊ls,为加密货币…

希望迁移一切顺利,家庭服务器YYDS

出海

最早能够追溯到2020年,当时有一闪而过的念头,但是并未实施,2023年换完工作,手上多了一些money,就水到渠成的打通了money出海的通道,虽然很基础,但是却是0-1的转变,很难得。

相信后面的篇章会更加跌宕起伏,是时候尝试更多的赚钱手段,这也是从twitter获取到的信息,把他转化为自身实践的一个例子。

家庭网络开启ipv6

最近看到推文,ipv6的源能够看到高清频道,且网速很给力,于是按捺不住打开了路由器的ipv6开关,想体验一番。

ipv6目前已经相当普及,只是担心会对当前的网络造成影响,一直没有付诸实施。打开之后,ipv4与ipv6共存, 旧有设备基本不受影响。Apple TV上的stash正常运行,APTV播放器播放ipv6的源正常,NAS通过v6访问正常。

目前感觉v6访问更加流畅,感觉ios系统下的应用更加成熟,完成度更高。