大象笔记

知者行之始,行者知之成

NordicSemiconductor/Android-BLE-Library 监听连接状态变化

监听的目的 Android App 界面显示当前的蓝牙连接状态:断开/连接中/已连接 在断开时,自动重连 如何监听连接状态 (已废弃) 在 NordicSemiconductor/Android-BLE-Library 官方文档中没有找到相关的说明。 只能在 github 中搜索 no.nordicsemi.android.ble.BleManager 的 kotlin 代码。 确实找到不少参考项目。 例如: https://github.com/fbiego/ESP32_BLE_OTA_Android/blob/d10f6546f4371dd811767b5b4958c2aa891697 ...

阅读全文...

Android BLE 蓝牙操作设备三方库 NordicSemiconductor/Android-BLE-Library

为何要使用三方库 起因是我写的 Android 低功耗蓝牙 App 有几个现存的问题: 写操作的并发问题导致写入失败,需要一个队列。iOS 内置了这个实现,甚至连微信小程序都实现了,但是 Android 官方没有实现,渣渣。 信号不稳定,蓝牙断开连接,需自动重连 未来需要连接多个蓝牙设备,但是我目前的架构不支持 如果设备信息进一步增多,就要涉及到数据包的拆分,组合 我去自己实现,非常耗费时间,在我看来都是非常基础的功能。不如找个三方稳定的实现。 NordicSemiconductor/Android-BLE-Library 介绍 https://github.com/NordicSemic ...

阅读全文...

修改开源项目管理系统 Redmine 代码

修改顶部菜单 实际上就是先搜索页面内的 class name, 然后根据模板代码中的变量名,搜索 ruby 代码。 例如,顶部菜单的代码文件 grep "top_menu" -r ./ ./lib/redmine/plugin.rb: # +name+ parameter can be: :top_menu, :account_menu, :application_menu or :project_menu ./lib/redmine/preparation.rb: MenuManager.map :top_menu do |menu| ./test/uni ...

阅读全文...

android gradle 依赖版本号统一管理

在项目级 build.gradle 文件中 在 ext 代码块中定义 room_version。 ext { kotlin_version = "1.6.20" nav_version = "2.4.1" room_version = '2.4.2' } 在应用级 build.gradle 文件中 在依赖项列表末尾添加以下依赖项。 implementation "androidx.room:room-runtime:$room_version" kapt "androidx.room:room-compi ...

阅读全文...

同一台服务器上部署多套 Redmine 项目管理系统

需求 由于其他子公司也想使用 redmine 开源项目管理系统,然而数据又不想共享。 所以需要独立部署多套系统,在一台服务器上。 参考 主要部署细节参考第一次部署时整理的文档: 开源项目管理系统 Redmine 搭建 TODO [X] 设置新的二级域名 [X] 源码目录分离。防止有定制化开发的需求 [X] 新建数据库 [X] 确认没有 drop 数据表的操作 [X] 复制 nginx 配置 [X] certbot 生成 https 证书 [X] 使用默认账号密码 admin/admin 登录,修改成复杂的密码 [X] 修改默认权限配置 config/unicorn.rb 需要修改 unic ...

阅读全文...

他不去上班,他就 ...

大鸿两岁半了,脾气异常暴躁 🤬 上班 早上出门 姐姐:不想让爸爸去上班,在家玩多好 大鸿妹妹咆哮:他不去上班,他就死啦! ​ ​上班对我果然重要 /(ㄒoㄒ)/~~,续命,续命。。。 喝奶 大鸿 (老二,两岁半)在楼下玩耍。 一个老太问大鸿:你这么大了,怎么还喝妈妈的奶。。。 大鸿:用你管 !!! ...

阅读全文...

使用微软 Azure 接口做身份证或护照的 OCR 信息提取

接口文档地址 https://learn.microsoft.com/zh-cn/azure/ai-services/document-intelligence/concept-id-document?view=doc-intel-3.1.0&viewFallbackFrom=form-recog-3.0.0 python sdk https://learn.microsoft.com/zh-cn/azure/ai-services/document-intelligence/quickstarts/get-started-sdks-rest-api?view=doc-intel-3. ...

阅读全文...

The project is using an incompatible version (AGP x.x.x) of the Android Gradle plugin

今天在编译一个 github 上的 Android 项目时,报错 The project is using an incompatible version (AGP 8.1.0) of the Android Gradle plugin. Latest supported version is AGP 8.0.1 AGP 是什么 Android Gradle Plugin。 AGP(Android Gradle Plugin)是一个用于构建 Android 应用程序的 Gradle 插件。AGP 可以将 Android 项目中的源代码、资源和依赖项编译成可安装的 APK 文件,并提供了许多 ...

阅读全文...

Android Foreground Service 中,提示音循环播放及停止

需求背景 Android App 收到蓝牙推送的消息之后,播放提示音,且一直播放,直到收到停止的指令。 TODO [X] fragment 界面上增加两个按钮:开始,停止。方便测试 [X] 提取出播放和停止功能,封装成两个函数。便于测试 [X] 接收到停止指令后,关闭音频 [X] Foreground Service 中定义 LiveData,方便 fragment 点击按钮后操作。实际不需要,直接在 service 中定义成静态方法即可。 [X] 下载报警提示音 [X] 支持自定义音频文件。这个以后播放引导提示音频也能用到,只不过是只用一次 [X] 测试无误后,去掉开始按钮(隐藏),只保留 ...

阅读全文...

Kotlin ByteArray BCC 校验

在 Android App 中, 要对发送给蓝牙控制板的数据增加 BCC 校验位。此处使用 Kotlin 实现。 确认校验规则 这个取决于当前项目如何约定的校验规则,不具有普遍性。可忽略。 目前的规则是: 剔除头尾字节,及倒数第二个字节的校验位,然后对此范围的数据做 BCC 校验。 测试数据 使用收到的 BLE 数据包作为测试案例。 AB 00 06 A2 05 20 32 30 2E 37 31 AB BA 即: 00 06 A2 05 20 32 30 2E 37 31 对应的 BCC 校验位为: AB Kotlin 扩展 ByteArray 自动给一段 ByteArray 缀上 BC ...

阅读全文...

Kotlin ByteArray 元素大小范围

今天在用 Kotlin 写一段字节数据的 BCC 校验时提示错误信息。代码是: var data = byteArrayOf(0x00, 0x06, 0xA2) 报错信息: The integer literal does not conform to the expected type Byte Android Studio 中建议的写法是: 0xA2.toByte() 即 var data = byteArrayOf(0x00, 0x06, 0xA2.toByte()) 为何 0xA2 不在 Byte 的范围之内 Byte 的范围不是 0~255 么? 确实不是,byte 类型的 ...

阅读全文...

对话机器人 Rasa(十七):python custom actions 将 list 或 dict 存储到 slot

需求场景 在 rasa custom actions 的 python 代码中,需要调用一些三方 http api,并对查询结果进行缓存。 例如,调用天气查询接口一次查询未来三天的天气。将三天的结果放到一个 slot 中缓存。然后,用户通过聊天对话询问某一天的天气时,就可以直接返回 cache 中的结果,无需每次都调用三方接口。 rasa slot 是否支持 list,dict 类型 之前只用过 slot 存储 text,number 这样简单的基础数据类型。不确定是否支持 list 和 dict 这样的类型。 查了一下 rasa 的官方文档,确实支持,只需要将 slot 类型设置成 any。 ...

阅读全文...