大象笔记

知者行之始,行者知之成

Android BLE 蓝牙控制硬件设备(二)调大 MTU,一次读取所有配置数据

继续 Android 平板 App 控制设备运行的项目。 MTU 是什么 英文全称是,Maximum Transmission Unit。即一次最大可以传输多少字节。 默认情况下是 20 个字节。即,Android App 一次只能从蓝牙控制板那里最多读取 20 个字节的数据。微信小程序中也是同样的状况。 什么情况下需要调大 MTU 例如,一个设备的运行参数多达 50 个,每个运行参数用两个字节表示。 那么即便不使用 CRC 校验码,不使用协议头,要完整读取所有参数都需要 100 个字节。 即需要 5 个 20 字节的数据包才能读完。这样效率太低。 另外一个典型的场景就是 BLE 蓝牙语音对讲 ...

阅读全文...

对话机器人 Rasa(十二):用户会话 Session 管理

Rasa 可以管理用户 session,每个 session 由 conversation_id 唯一标识。 当你从 web 聊天组件或者 telegram app, fackbook messager 等不同的 channel 向 rasa webhook 发送一条消息时, 你所指定的 sender_id 即被转换为 conversation_id, 然后传递给 Rasa Core。 注意,默认情况下,Rasa session 是存储在内存中,即一旦你关闭 rasa 服务,session 就会丢失。 可以通过将对话信息存储到数据库来解决这个问题,例如,MongoTrackerStore, R ...

阅读全文...

Android BLE 蓝牙控制硬件设备(一)代码结构

没想到这个月的开发工作全部是 Android 平板相关,而且都要用到 BLE 蓝牙,一个是控制设备运行,一个是蓝牙对讲。 看来之前练手写的那个 Android BLE 调试工具真是派上用场了,大部分代码可以复用上。 需求 用 Android 平板通过 BLE 低功耗蓝牙控制硬件设备,例如,开始、暂停、显示运行状态等。 功能非常简单,时间就两个 fragment 界面就能搞定: 蓝牙设备列表页 (List Fragment)。用于显示扫描出来的附件蓝牙设备 具体设备的控制界面 (Home Fragment)。用于显示实时运行数据,及控件按钮 交互逻辑 打开 Android 平板 App 时, ...

阅读全文...

低碳水午餐食谱

最近,几位注重健康的好友,纷纷推荐了低碳水饮食。 而我,近几年放任体重增长,身材已经到了再不控制就会爆炸的地步。加之公司订的午餐过于油腻,是时候换换口味了。 低碳水饮食减肥的原理 低碳水饮食减肥的原理是通过限制食物中的碳水化合物的摄入量,使身体进入酮症状态,从而促进脂肪的代谢和减脂。 在传统的饮食模式下,身体主要从碳水化合物中获取能量,而碳水化合物的摄入量过高会导致血糖水平升高,身体释放胰岛素来降低血糖水平。但是,当摄入的碳水化合物过多时,身体会将其转化为脂肪储存起来,导致体重增加。 低碳水饮食的原理是通过限制碳水化合物的摄入量,迫使身体从脂肪中获取能量,从而促进脂肪的代谢和减脂。当身体摄入的 ...

阅读全文...

对话机器人 Rasa(十一):custom actions 中使用 python 设置 slot 值

例如,我想在 Rasa 对话过程中,缓存当前用户选择的服务 ID。 方便在调用其他业务接口时使用该 slot 的值。 custom actions 代码示例 actions.py 中,假设要将 my_slot 设置为 some_value: from typing import Any, Text, Dict, List from rasa_sdk import Action, Tracker from rasa_sdk.events import SlotSet class MyCustomAction(Action): def name(self) -> Text: ...

阅读全文...

golang gin graceful shutdown

在做一个微信支付的流程,担心经常更新程序导致服务中断,影响退款等逻辑,所以想加上 graceful shutdown 功能。 参考 Golang Gin 官方文档: https://gin-gonic.com/docs/examples/graceful-restart-or-stop/ 使用 Go 1.8 之后内置的 http.Server Shutdown() 方法,以实现 graceful shutdowns。 测试 // 测试 graceful shutdown // /api/testSleep?duration=20s func TestSleep(c *gin.Context) ...

阅读全文...

对话机器人 Rasa(十八):使用 docker compose 及 dockerfile 部署 python flask 图片服务

使用 Flask 的原因 因为我觉得用 Rasa 处理图片 base64 编码是不合理的,不适合 intent 识别,再者影响 rasa 接口的性能。 所以,独立出一个 flask 服务来处理图片上传的使用场景。 使用 docker 的原因 原本想在服务器上直接用自带的 python 3.8 部署一个 flask 服务,用来模拟一套接口, 方便 Rasa Actions 服务来调用测试数据。 其中 Rasa Actions 服务部署在 docker 容器中,但是其无法直接访问宿主机中的 flask 服务。 尝试了几种方式都不行,所以想干脆也把 flask 采用 docker 的部署方式。 ho ...

阅读全文...

微信支付商户后台设置自动提现规则

为了方便测试微信小程序的多商户分账功能,最好设置一下商户后台的自动提现规则。 否则会出现分账的订单,隔日在退款时没有足够的余额。默认规则会将所有余额在次日凌晨提现到对公账号。 进入微信商户后台 - 产品中心 - 自动提现 设置一个基础余额,比如,上面截图里的 200,超过这个值才会被自动提现到对公账号。 ...

阅读全文...

对话机器人 Rasa(十): 回复消息格式化,加粗换行等

例如,我想在 Rasa actions.py 中,对 dispatcher.utter_message 返回的消息进行格式化。 加粗 这里类似 Markdown 的语法,需要加粗的文本前后加双星号即可。 换行 使用 \n Rasa 会自动 trim 掉前后的空格。 示例: dispatcher.utter_message( text=f"**Reservation No.{index+1}** \n Name: {item['name']}" ) 效果: 注意 如果换了其他前端方案,例如 ChatUI,就不支持 markdown 语法了。需要自己去兼容。 ...

阅读全文...

MySQL 某个字段排序,按照指定值的顺序

没想到这么多年还是要继续写微信小程序会员卡开卡、扣卡这种逻辑,又是脑子炸裂的一天。 排序需求 会员卡使用状态字段,在数据库中的对应值如下 Status int // 卡状态。0 待使用; 1 已使用; 2 使用完; 3 已退卡; 4 退卡中 如果想按照如下顺序排序: 待使用 已使用 退卡中 使用完 已退卡 那么就不能直接使用 order by status asc 这种的方式。 指定值排序 解决方法是使用 SELECT * FROM user_card ORDER BY FIELD(status, 0, 1, 4, 2, 3) 注意: 如果字段包含的值不在指定的值列表中,则该字段的值 ...

阅读全文...

冰冷的 Android 空指针与暖心的 Google Play 韩国用户

睡前看了一眼 Google Play Console 里的 App 新版本发布情况,无意发现一条一小时前的应用评论。 是个韩国用户留的: 버그가 넘 심해요 ㅜㅜ 어플들어가면 자꾸 팅김요 ㅜㅜ 빠른시간에 수정부탁드립니다.유용하게 잘쓰고있는데 ㅜㅜ 翻译成中文是: 这个应用程序的错误太多了,每次进入都会崩溃。希望能尽快修复。我一直都在好好地使用它,但现在无法正常使用了。 上面这段翻译是用 Sage AI 翻译的,因为 Google 的翻译有问题,就是下面截图里的一小段英文(too bad),翻译成中文也是。 意外的是,在程序崩溃的情况下,用户依然给了五分好评。。。被暖到了 我 ...

阅读全文...

Action Required: Your app is not compliant with Google Play Policies

昨天晚上 11 点终于将之前的 jetpack compose 版没有 admob 广告的 android app 完美加上了大家喜欢且期待已久的广告功能。 但是今天早上收到了 Google Play 审核未通过的邮件,大致意思就是 app 不符合数据安全政策。 问题详情 Issue details We found an issue in the following area(s): SPLIT_BUNDLE 6: Policy Declaration - Data Safety Section: Device Or Other IDs Data Type - Device Or ...

阅读全文...