大象笔记

知者行之始,行者知之成

gorm preload 限制 field 字段

例如,我想用 golang gorm 查询订单表中关联的代理商名称,但是用 Gorm Preload 又会将代理商信息中多余的敏感信息取出来, 例如联系人等信息。于是就需要限制 Preload 的返回字段。 Models type Order struct { gorm.Model AgentId int // 代理商 id Agent Agent // 代理商信息 Status int } type Agent struct { gorm.Model Name string // 代理 ...

阅读全文...

Android SQLDelight (三) 查询数据并借助 Flow 更新到 RecyclerView

周五晚上直到 11 点也没有调通 Android SQLDelight Flow 的用法,由于周六早上 5 点半就要起床去参加运动会,所以就此作罢。今天去体育场路途遥远,于是路上查了一堆文档,才理清了思路。晚上回来,终于调通。 build.gradle 配置 dependencies { implementation "app.cash.sqldelight:coroutines-extensions:2.0.0-alpha05" } RecyclerView 监听数据变化 lifecycleScope.launch(Dispatchers.IO) { (activ ...

阅读全文...

Android SQLDelight (二) 向本地 SQLite 数据库插入数据

首先需要 在 Android 中配置好 SQLDelight 及数据库初始化,然后就可以测试写入数据了。 .sq 在 SQLDelight 的 sq 文件中补充用于插入的 SQL 语句: 一个用于插入 一个用于保存 save: INSERT OR REPLACE INTO items VALUES ?; insert: INSERT INTO items(name, num, notes) VALUES (?, ?, ?); 这里有个不好的习惯,就是表名用了复数,会导致生成的 kotlin data class 类名也是复数形式,影响代码可读性。 为了兼容旧版本的 app,所以没有改正 ...

阅读全文...

Android SQLDelight (一) 配置及数据库初始化

SQLDelight 官方的文档有点简略,有些步骤看不懂,而网上找到的大部分文章都是跨平台的配置, 而我只想做 Android 单平台的,于是详细记录了一下配置过程。 app build.gradle 注意是 app 模块的 build.gradle, 而不是整个项目的 build.gradle. plugins { id "app.cash.sqldelight" version "2.0.0-alpha05" } sqldelight { databases { Database { // This will be the name ...

阅读全文...

小林制药的《小池大鱼》

这个周我刷碗的时候,带着蓝牙耳机听完了小林制药掌门人小林一雅的《小池大鱼》。 真是一本通俗易懂,难得的好书。现在微信读书的自动朗读功能很惊艳,不会很生硬,超出预期。 利基市场 这本书里反复提到利基市场 (niche market) 这个名词,所以必须首先了解一下什么是利基市场。 利基市场是指一种小众但非常专注的市场,形容大市场中的缝隙市场,通常针对某个特定领域、行业或人群。这类市场由于规模较小,竞争相对较少,因此往往能够为企业提供更好的机会去建立品牌、实现盈利和发展业务。 利基市场的优势在于它可以通过独特的产品或服务来满足特定目标客户的需求,而这些客户可能在主流市场中被忽视或无法得到满足。因此 ...

阅读全文...

Android SQLDelight (六) 查看 Android Room 创建的 SQLite 数据库建表语句

为了将一个 Android App 由 Room 迁移到 SQLDelight 方案,首先需要了解既有 app 的表结构。 使用 Android Studio 自带的 App Inspection 将 Room 创建的 SQLite 数据库导出为 db 文件, 如 item_database.db。 打开 db 文件 使用 sqlite3 命令连上数据库文件,查看具体表的建表语句 sqlite3 item_database.db 注意是 sqlite3,而不是 sqlite. 否则会报错: > sqlite item_database.db Unable to open databa ...

阅读全文...

Android Studio 解决 Gradle 编译失败 Unsupported class file major version 61

今天在编译一个 2021 年写的一个 Jetpack Compose 应用时,报错: Unsupported class file major version 61 Android Studio 版本 Android Studio Flamingo 2022.2.1 Patch 1 报错原因 新版本的 AS 默认使用的是 Java 17 LTS,而这个历史项目的 Gradle 版本很低,不支持高版本的 Java。 具体原因是: Java 17 (major version 61) 编译的 class 文件,如果在 Java 16 及以下环境下运行,就会报错 Unsupported cla ...

阅读全文...

jetpack compose,xml layout 与 flutter 的选型问题

这个周末无论是去公司团结的路上,还是一家去永旺吃饭的间隙,我都在纠结这个事情。也是用这些零碎的时间片段在手机上整理了这篇笔记。 纠结的原因 计划将一个一年前用 jetpack compose 写的练手 android app 重构一下。没想到在没有任何推广,维护的情况下,积累了一些用户。 重构的原因是,有一些用户反馈的需求,我想实现一下。但是使用的 jetpack compose 版本太旧了,毕竟 compose 还处于飞速发展解决,一年一个新样子,甚至今年都成了 android studio 的默认模板。今年用新版本的 as 编译,一堆错误,甚至提示 kotlin 的版本都过低。导致没法继续 ...

阅读全文...

Gorm select 表里所有数据包括已经软删除的数据

又写了一天的 bug ... 被 ORM 折腾死。 没关系,又活了一天,已经很厉害了。。。 Bug 的根源 一个设备信息管理系统的表,里面会自动给设备生成设备 ID。 格式: 前6位为生产如期,如:211207,代表 2021年12月7日生产。 后3位为生产编号,如:001,代表当日生产的第一台设备。 编号的生成逻辑: sql like 取最新的一条 满足 211207 的记录,如果有,就判断最后三位 + 1 没有,就生成一条 001 这个逻辑跑了很久都没有出问题,但是今天在写一个新系统时,我偷懒 copy 过来了。 然后,另一个 bug 导致几条设备信息被软删除 (gorm 默认是使 ...

阅读全文...

新版本 Android Studio settings.gradle 中切换国内源

从 Android Studio Dolphin 2021.3.1 之后,国内源的切换配置就从 build.gradle 文件改到了 settings.gradle 文件。 修改之后,执行一下 Sync 就可以了。 具体配置 pluginManagement { repositories { maven { url 'https://plugins.gradle.org/m2/' } maven { url 'https://maven.aliyun.com/nexus/content/repositories/google' } mav ...

阅读全文...

万维广告的收益真是惨不忍睹

上周一时兴起申请并接入了万维广告,但是,测试了几天,效果很不理想。直接上数据吧。 虽然万维广告的展示内容,很清新,也是 IT 相关的广告,但是点击率极低,跟百度联盟简直是难兄难弟。都是 0 。。。尝试了几个位置,无论是醒目的地方,还是不醒目的地方,都没有任何效果。所以,我还是恢复了 Google 的广告位,将万维的放到了右侧侧边栏底部。毕竟 AdSense 即便不点击,也是有收入的,不愧是行业标杆。 为何点击率这么低 我的分析是: 相对 Google AdSense,万维的广告主质量还是低了很多,除了亚马逊这样的大厂广告,其他小厂广告没啥技术含量,怕是很难吸引目标人群。 广告形式虽然简洁, ...

阅读全文...

TeamsACS 在处理 BootStrap 事件时, 如何生成的密码

TeamsACS 是一个开源的 tr069 ACS 实现。其在处理 CPE 发送的 BootStrap 事件时,逻辑有点绕。 BootStrap 处理逻辑 判断 CPE 请求的 body 非空时,如果是 BootStrap 事件,生成连接用的账号/密码。注意,这里没有直接返回给 CPE,而是通过 golang channel 缓存了起来。 判断 CPE 请求的 body 为空时,不再判断事项类型,从 golang channel 中获取之前生成的账号/密码,以 soap 格式返回给了 CPE 我不太理解 tr069 协议为何要这样设计。为何要多走一步? 返回的 SOAP XML 数据格式 ...

阅读全文...