大象笔记

知者行之始,行者知之成

运费毛利计算器,输入公里数/单价/运费,计算毛利率

今天一位大象计算器微信小程序的热心用户“好梦”加我,希望能实现一个运费毛利率计算的功能。 她之前是在 Excel 表格里用公式自动计算的,但是希望能在手机上通过小程序来计算毛利。 原因是: 因为我们随时随地要计算,下班也要计算,就是不想开电脑 为了勤劳勇敢的中国人民业余时间能远离笨重的电脑,特别是在这个炎热的夏天,我决定牺牲小我成全大我, 在烟台今夏最热辣的一天,抱着滚烫的电脑,在中暑头痛欲裂的情况下 Ctrl-C Ctrl-V 实现了运费毛利计算功能。 功能界面 运费毛利计算功能概要 输入: 公里数 每公里单价 运费(报价) 折扣 税率 点击计算按钮,自动得出: 含税合同价 (公 ...

阅读全文...

Kotlin Flow 基础概念

本以为我的 Android 开发技术已经天下无敌了😅,没想到连 Flow / Channel 我都第一次见。。。不得不说 Android 的新概念层出不穷。 周末看了一堆文档,有了一个大概的了解。我发现微信公众号的文章质量还真是高,不少高手都做了详细的对比说明。 但是最终我一个也没有关注,从这些人的近期推文看都堕落了,不是贩卖焦炉,就是无脑卖其他骗子的课。扯远了,开始正题。 Flow 为何而生 一个挂起函数 (suspending function) 可以异步地返回一个值,但是没法多次返回。于是 Flow 就诞生了。 这也是为什么 Flow 获取 select 结果不需要加上 suspend ...

阅读全文...

Android Fragment 顶部菜单右上角添加删除/搜索按钮

例如,我想在 Android APP 首页顶部显示搜索按钮,在详情页顶部显示删除按钮。 叫 Menu 还是 Top App Bar 搜素 Android Menu https://developer.android.com/develop/ui/views/components/menus 在官方文档里可以看到: XML View 中称之为 Menu Jetpack Compose 中称之为 Top App Bar Activity 中添加还是 Fragment 中添加 You can declare items for the options menu from either you ...

阅读全文...

对话机器人 Rasa(九): docker compose 同时部署 rasa core 和 actions 服务

尝试手动启动了两个 docker containter: 一个用于 rasa core 一个用于 rasa actions 但是,发现测试对话不涉及 actions 服务的,一切正常返回; 但是跟 actions 相关的,没有任何返回。 查看 docker 容器日志 docker logs -f <containter-id> 这样就能实时查看 docker 容器中 rasa 的运行日志,跟 tail -f 效果等同。非常方便。 异常日志 查看了一下 rasa core 的日志: rasa.shared.exceptions.RasaException: Failed to ...

阅读全文...

对话机器人 Rasa(八): actions 通过 Python 查询天气信息

非常典型地一个应用场景,即通过 rasa 从提交消息中提取城市和时间,然后调用三方天气接口查询天气,再返回用户。 但是按照官方文档,及电子书,网上资料里配置,jieba dict 也好,lookup table 也好,都会因为 DIETClassifier 报奇怪的异常。我感觉是版本的 bug,目前还没有定位到问题。 折腾了两天,没有头绪,看了部分 rasa 源代码,印象也非常不好,许多配置规则没有在文档中体现,需要看源码才能理清。 距离这个项目验收的时间不多了,我也懒得折腾,干脆直接在 actions 中直接获取消息原文,用 python 通过正则提取 entity,这本应由 DIETCla ...

阅读全文...

Android SQLDelight (七) 从 Room 迁移的改造点

继续将原有的 Compose 项目重写为 XML View,本来不想折腾,心想要不直接沿用原来的 Room 代码,但是看了 DAO 和 Repository 这种风格的代码,还是忍不了。 既然没有退路了,就得保证对历史数据的兼容。 数据库名称 注意,用 SQLDelight 指定数据库名称时,不要加 .db 后缀。否则跟之前 Room 生成的文件名不一致。 - val driver: SqlDriver = AndroidSqliteDriver(Database.Schema, context, "item_database.db") + val driver: Sq ...

阅读全文...

Android SQLDelight (五) 查询单条数据库记录,并更新 UI

之前用 Android SQLDelight 查询批量数据非常方便,没想到查询单条数据反而有点搞不清。 第一种做法 这样查询就是在主线程里,即 UI 线程。实际操作很快,没有任何卡顿。 val id = args.id if (id != 0L) { val item = viewModel.database.itemQueries.findOne(id).executeAsOne() binding.name.setText(item.name) binding.number.setText(item.num.toString()) } 第二种做法 val id = args.id ...

阅读全文...

Jetpack Navigation 在 fragment 间跳转时使用 Safe Args 传参数

在一个 Android APP 中,需要由 Fragment A 跳转到 B 时进行传参,官方推荐使用 Safe Args。 Safe Args 主打的就是类型安全 (type-safety),测试了一下。 配置 build.gradle SafeArgs 和导航组件的其它模块不太一样,它本身并不是一个 API,而是一个可以生成代码的 gradle 插件。 所以需要将它设置为 gradle 依赖,并且在构建时使其能够正确运行来生成所需的代码。 首先,在项目级 project build.gradle 中增加配置: buildscript { dependencies { ...

阅读全文...

Jetpack Navigation 点击返回 home fragment 时 onCreateView 被再次调用

在写一个 Android App,结构是一个 MainActivity,两个 fragment 分别是 home list fragment / detail fragment。 点击 home 页的 FAB 添加按钮,跳转 detail 页。 疑惑 我不明白为何 home fragment -> edit/detail fragment, 再返回时,home fragment onCreateView 又被调用了一遍。 navController.navigate(R.id.nav_edit) 难道,默认不支持 back stack ? 类似的问题 https://stackover ...

阅读全文...

如何快速水一篇软件系统使用说明书

这种文字性的工作要是没有一个大纲,很容易不知所措,写着写着就走神了,效率低下。 整理了一下流程,然后无脑照着做就行了。 流程 所有软件截图黏贴到 word 文档中。图片居中排版。 根据截图补充文字说明。开篇一张图,内容全靠... 生成目录。使用二级,三级标题,方便生成目录。WPS 支持一键生成目录,搜索目录功能即可找到此功能。 编写系统概述/简介。ChatGPT 伺候,全是应付性文字,生成一篇 800 字的内容之后修修补补即可。 软件功能说明书应该包含哪些内容 包含以下几个部分: 标题页和版权声明:这个部分主要包括文档的标题、版本号、作者、日期以及版权声明等信息。 目录:目录列出了整个文 ...

阅读全文...

Android SQLDelight (四) Hilt 将 database 依赖注入 ViewModel

由于使用的 Navigation UI 会在 navigate 时销毁 fragment 的 View,实际操作时,由 list to detail to list 这样的浏览路径,会导致 fragment onViewCreated 中的逻辑执行多次。这是不合理的,所以需要将相关逻辑挪到 view model 中 (fragment view 销毁了,但是 fragment 没有销毁,所以 view model 是安全的)。而 view model 中不应该去获取 fragment 或 activity 的实例,也就没法拿到之前偷懒放到 activity 中的 SQLDeligth Data ...

阅读全文...

对话机器人 Rasa(七):Action 支持 Python 查询今天星期几

场景 例如,跟 Rasa 机器人对话中,询问今天星期几,然后使用 Python 返回中文答复。 nlu.yml 增加自然语言解析: - intent: weekday examples: | - 今天是星期几 - 今天几号 - 今天的日期 domain.yml 增加 actions: intents: - weekday actions: - action_weekday rules.yml 配置映射关系 - rule: 星期几 steps: - intent: weekday - action: action_weekday actio ...

阅读全文...