大象笔记

知者行之始,行者知之成

第二次 php 网站被黑的经历

昨晚九点被拉回前公司,解决一个 php 网站被黑的问题。 现象 网站首页被篡改成了澳门特色网站。 从代码看,只有 index.php 文件被修改。确切地说是被完全覆盖了。 而且触发的时机也非常有趣,都是下午 5:31 分左右,在你正好下班的时候触发。。。 排查的思路 首先过了一遍线上变化的文件。没有发现问题。 然后在上传目录 grep 了包含 php 关键字的图片及其他格式的文件。抽查了几个,也没有问题。而且历史悠久,不太可能潜伏这么久。都没有发现问题。 因为同一个服务器上还有其他的网站也被同样篡改了。怀疑是另一个项目里有恶意代码,然后扫全盘,修改 index.php。但这也是一个猜测,需 ...

阅读全文...

PyTorch 学习计划及相关学习资料

之前用 OpenCV 实现的一个小麦图像识别的 Android APP,但是做到第二版时, 想增加功能,发现大部分类似项目都是用 PyTorch 实现的,所以不得不换技术方案。 可是断断续续看了一个多月的 PyTorch,发现自学效果不佳,连代码都没怎么写。 可能都是在等车,或者车上看的,没有实际敲代码,所以理解不深。 PyTorch 市面上的书籍非常多,但我看的几本口碑不错的书,都是虎头蛇尾。 前面讲的挺细致,比如基础概念、一些原理之类的,还能接受。 但是,一旦到了解决实践问题的章节,需要大量代码说明的部分,就完全滥竽充数。 也不知道是为了水一本书,还是里面确实有核心的业务逻辑不舍得分享, ...

阅读全文...

Windows 11 安装 PyTorch

安装 conda 从介绍来看 conda 是一个比 pip 更强大的包管理工具,除了支持 python 的包管理也支持其他语言。 https://conda.io/projects/conda/en/latest/user-guide/install/windows.html 里面有两个安装包 Miniconda 和 Anaconda,如何选择呢? Miniconda installer = Python + conda Anaconda installer = Python + conda + meta package anaconda 大概 1500 个内置包,3G 空间 看起来 Mi ...

阅读全文...

Ant Design dateTimeRange 组件 UTC 时间的时区问题

后台用 InfluxDB 存储的时序数据,查询时需要使用 UTC 时间。 为了偷懒,我的后台 go 接口没有对时间字段做处理,想直接使用前端传过来的 UTC 时间格式。 于是出现了一个低级的前端 Bug。 功能异常的请求 请求链接格式: http://www.sunzhongwei.com/someAPI?current=1&pageSize=20&startTime=2022-08-09T01%3A10%3A16Z&endTime=2022-08-10T01%3A10%3A16Z startTime: 2022-08-09T01:10:16Z endTime: 20 ...

阅读全文...

升级 gopls 到最新版本

写了一段单元测试的代码,在 vim 中提示错误 func TestGenSlug(t *testing.T) { assert.Equal(t, "hello-world", genSlug("Hello World")) } 错误信息为: [gopls] cannot use t (variable of type *testing.T) as assert.TestingT value in argument to assert.Equal: wrong type for method Errorf (have func(format stri ...

阅读全文...

蓝牙网关 MQTT 的多设备接入及多型号兼容

多设备接入需求 多个设备接入 MQTT 多种设备型号的兼容。考虑到蓝牙网关/体征监测设备商可能停产,或升级。造成蓝牙协议变化。 MQTT Client ID 规范 终端类型 整机设备标识 DeviceID 座位标识 SeatIndex 例如:1/2/3 ...。以密封舱内多设备为例。 例如: - 蓝牙网关:gateway_<DeviceID>_<SeatIndex> - Pad: pad_<DeviceID>_<SeatIndex> 主要是为了防止 client id 冲突。 TOPIC 规范 mqtt 订阅回调函数中可以获取到消息的来 ...

阅读全文...

通过蓝牙网关下发指令,过滤掉蓝牙设备高频率的波形数据

问题 蓝牙设备默认会以每秒钟 350 次的频率向蓝牙网关发送实时波形数据(心电波形、血氧波形、呼吸波形), 然后蓝牙网关再将这些数据转发到服务器。 这些波形数据是没有记录价值的 蓝牙设备数量不可控,在数量多时,对服务器产生巨大的并发请求压力。我在开发机上 WSL Ubuntu 里部署的 EMQX 偶尔会扛不住挂掉。。。原因不明。 高频造成的数据黏包严重。例如蓝牙网关协议的数据包部分,能频繁看到多个蓝牙数据包拼接,且被截断的情况 蓝牙设备虽然支持禁用波形数据输出,但是每次重启都恢复原配置 过滤掉波形数据的方案 服务器端每十秒向蓝牙网关下发一次禁用波形数据的控制指令。 emqx 限速 http ...

阅读全文...

精益开发实战:用看板管理大型项目

无奈,本周要交一篇关于精益工作的思想汇报。我又不想直接去网上搜素 copy 一篇,就找了本精益开发的书看了一下,把读书笔记作为思想汇报交了应付了事吧。 借集团推进精益管理/生产分享汇报活动的机会,作为一名程序员,我也感觉收获良多。比如积压产品配件去库存,零件通用化等,都给了我很大的启发。同时我找了本跟自己日常开发工作相关的书深入学习了一下。书名是《精益开发实战:用看板管理大型项目》作者是 Henrik Kniberg。在这里谈谈我的学习心得: 切割大象 就将大型项目或产品,切分为小的,进度可控的一个个子项目,可以周期性发布。 最大程度降低大型项目风险的关键是找到“切割大象”的正确方式,也就是 ...

阅读全文...

订阅 MQTT 主题后,防止 go 程序退出 main

for 循环会彪 CPU,不好。找了一个 channel 的实现有效解决了这一问题。 实现代码 import ( "os" "os/signal" "syscall" ) func main() { channel := make(chan os.Signal, 1) signal.Notify(channel, os.Interrupt, syscall.SIGTERM) // MQTT 订阅逻辑 // ... <-channel } 代码分析 channel 的发送和接收数据都是阻塞 ...

阅读全文...

mqtt topic

mqtt 主题名字规范 大小写敏感。推荐使用小写 utf-8 至少一个字符,不要使用空格 结构化名字,以斜杠分隔。例如:house/room1/main-light 主题名长度上限 https://github.com/emqx/emqx/issues/3727 65535 内置的 $SYS 主题 只读 可以查询 broker 版本号,例如,$SYS/broker/version 查询当前时间 查询运行时间 主体何时被创建 当有订阅或者发布时自动创建。但是发布需要主题配置了 retained message 只有当有客户端订阅时,topic 才会被保留,否则会被销毁 订阅多个主题 ...

阅读全文...

蓝牙网关未收到蓝牙设备数据的问题定位

排查思路 [X] 先确定蓝牙设备是否有问题。手机连接蓝牙设备,查看是否能收到推送数据。 [X] 关闭蓝牙网关 [X] Android APP 工具 “BLE调试助手”。确实可以收到数据,需要订阅。 [X] 蓝牙网关调试助手,通过 UDP 接收蓝牙数据,方便调试 [X] 查看蓝牙网关实用手册。了解如何自动配对。果然里面的蓝牙通信测试工具里需要填写服务和特性的 UUID,以及 handle 和 cccd。 [X] 可以建立连接,但是无法收到数据。 最终还是咨询官方技术支持得到了解决。 原因是,我只填写了服务的 UUID,而没有修改默认的特性 UUID,导致获取的是无效的 handl ...

阅读全文...

荣获一张搞笑证书:Google Play Store Listing Certificate

这个证书的中文名是:Google Play 商品详情证书。主要是在 Google Play 里发布 App 相关的一些规范和技巧,倒是有不少的实用的内容,比如 App 名字规范、简介规范、详情规范等。对我而言,可以规避一些无效、或者违规的 ASO 尝试。 通过了 Google Play 商品详情证书考试,即可获得证书。 比较奇葩的是,学习课程是中文的,考试的时候是全英文的,大概 70 道题,我花了一个多小时考完,佩服自己的耐心。考完后头昏脑胀,感觉不值得浪费这个时间。基本上能看懂英文的都能通过这个考试吧,即便没有学过这个课程。 通过考试后,3个工作日会收到 Google Play Store ...

阅读全文...