微信小程序开发 - 第二篇

噗噗订阅管理 - release-1.3.0 底部查看更新内容 准备开始慢慢更新 完成上一版开发后一直没管,想着就自己管理一下订阅,避免扣费。不过前两天看到微信数据显示有几十个用户陆续打开过小程序,既然还是能被人看见而且可能使用,那就继续更新。 如果有任何建议,欢迎在小程序中的设置页面的反馈中提出。 Echarts 之前草草地做了历史数据页面,这次整理了一下小程序中基础使用Echarts的步骤 根据官方提供的模版项目把ec-canvas这个文件夹复制到自己项目中:https://github.com/ecomfe/echarts-for-weixin/tree/master/ec-canvas ec-canvas.js中有个isUseNewCanvas的变量,把默认值改成true,这样可以避免一个Canvas 2D警告 (Javascript项目跳过)Typescript项目需要给echarts.js添加类型声明文件,主要就是setOption这个方法。1 官方例子pages文件下随便找个例子抄一抄,完成自己页面中文件修改就可以展示图表了 index.json index.wxml index.js/ts pages/multiCharts下面展示了如何创建多个图表 pages/lazyLoad下面展示了如何懒加载图表,即可以先异步请求数据,再根据数据展示图表 推荐使用lazyLoad的方式来创建多个图标,充分利用selectComponent()的灵活性 更新内容 右上角按钮历史数据改成数据分析,并修改了数据分析页面的图表。 不过周末时间有限,只加了汇总数据,后续添加各月详情列表。 删除主页“各类别金额”部分,鸡肋。 更换底部添加按钮图标,统一风格。 修改添加页面图标选择的样式,统一风格。 图标选择popup内增加了类别选择,方便查找。 未来计划 Release-1.4.0 给订阅类别添加颜色,方便区分 在数据分析页面添加每月的详细数据列表 Release-2.0.0 离线数据,现在所有操作都是实时的,没有网络无法使用。 Release-2.1.0 添加新计划时能有更视觉化的操作方式,快速选择新计划的时间范围 类型定义代码 declare module "echarts" { interface ECharts { setOption(option: EChartOption, opts?: EChartsOptionConfig): void; } interface EChartOption<TSeries = EChartOption.Series> {} namespace EChartOption { type Series = any; } interface EChartsOptionConfig { notMerge?: boolean | undefined; lazyUpdate?: boolean | undefined; silent?: boolean | undefined; } }  ↩︎

2025年3月17日 · 1 分钟

RUST on Esp32 (std) - 2

又学一门新语言 在开始单片机开发学习之前,针对esp32上较常使用的几个开发工具和语言做了一点研究。 工具主要有乐鑫官方提供的 ESP-IDF,以及 MicroPython 和 Arduino。 ESP-IDF是乐鑫官方提供的开发框架,支持C/C++,是最底层的开发方式,也是最灵活的。 MicroPython是Python的一个子集,支持Python语言,是最简单的开发方式。 Arduino是一个开源的硬件开发平台,支持C/C++,简单而成熟,是最流行的开发方式。 考虑到生态、性能以及拓展性。决定排除MicroPython。但是我之前一直从事软件开发,基本用的都是Java/Kotlin,Python,JavaScript等不需要考虑内存释放的高级语言,对于C/C++这种底层语言,还是上大学的时候学了一点,基本都忘记了。所以这次需要从底层语言开始重新学习。 然后找到了esp-rs,发现ESP-IDF也支持Rust,而且最近Rust很火,大概看了一下语言特性,它的语法还是比较直观简洁的。无论C/C++还是Rust都要从头学,所以决定干脆学习Rust。 有趣的特色 一些通用或比较简单的编程概念就不赘述了,可以通过查阅文档快速了解rust中的写法。不过Rust有一些很不同的语法和特性,这里简单列举一下。 强大的枚举类型 - Enum https://kaisery.github.io/trpl-zh-cn/ch06-01-defining-an-enum.html Rust的枚举类型是一种强大的数据类型,它可以包含多个不同的值,每个值可以是不同的类型。枚举类型可以用来表示一组相关的值,比如颜色、方向、状态等。 enum Message { Quit, Move { x: i32, y: i32 }, Write(String), ChangeColor(i32, i32, i32), } 不一样的接口 - Trait https://kaisery.github.io/trpl-zh-cn/ch10-02-traits.html Rust的Trait类似于其他高级语言中的接口,但是更加强大。Trait是一种抽象类型,它定义了一组方法,但是没有提供方法的具体实现。Trait可以被用来定义方法的签名,然后在具体的类型上实现这些方法。 Trait可以被用来实现多态,可以在不同的类型上实现相同的Trait,然后通过Trait对象来调用这些方法。 pub trait Summary { fn summarize(&self) -> String; } pub struct NewsArticle { pub headline: String, pub location: String, pub author: String, pub content: String, } impl Summary for NewsArticle { fn summarize(&self) -> String { format!("{}, by {} ({})", self.headline, self.author, self.location) } } 独特的内存管理 - 所有权 https://kaisery.github.io/trpl-zh-cn/ch04-01-what-is-ownership.html ...

2024年12月4日 · 1 分钟

RUST on Esp32 (std) - 1

主要内容 在 macOS 上安装 esp32-s3 开发环境 (std版) std和no_std std 概述 ...

2024年10月29日 · 2 分钟

微信小程序开发 - 第一篇

背景 今年被几个订阅扣了不少钱,所以想找一个订阅管理软件,但是没有找到满意的,大多数订阅管理软件中每一条记录都只能有一个价格,一个连续周期。 但是我有不少订阅的价格一直在变化(从折扣到原价,改变订阅套餐等)。我希望能够在一个订阅里管理价格的变化,并能统计相关支出和提醒。 所以打算自己写一个。然后开始考虑是做一个APP还是小程序。相比较而言的话,小程序的开发成本更低,而且不需要用户安装,并且现在APP通知有点被滥用,可能提醒效果还不如小程序,所以决定先做一个小程序。 开发体验 小程序从2018年开始就已经火了,现在都已经2024年了,相关文档,教程,工具都已经很成熟了。所以整体开发体验算是相当流畅了(抛开测试部份)。 不过小程序认证以及版本审核还是有点繁琐的。如果是企业帐号应该会方便不少,但是个人的话,只能跟着相关条款修改了。 开发工具 用的都是比较常见的技术栈了。 前端 微信开发者工具 后端 App: Nodejs + Nestjs Data: Python + FastAPI 数据库 Sqlite MongoDB 缓存 Dragonfly (Redis) 部署 Kubernetes (测试环境) Docker Compose (生产环境) 生产环境架构 部署在一台阿里云的机器上,使用Docker Compose管理容器,毕竟只有一个机器,Kubernetes有点大材小用。 使用Traefik作为反向代理,同时也是HTTPS证书管理工具(Let’s encrypt)。 部署了一个MongoDB Express,并没有向外暴露,方便查看和管理MongoDB。 开发流程 毕竟是个小项目,所以开发流程尽量简单。利用Github Actions做CI/CD,每次push都会自动运行测试,然后release分支会打包Image并推送到Docker Hub。 然后在Kubernetes(测试环境)上拉取最新的Image做测试。最后没问题再部署到生产环境。 其他 暂时先分享这么多,贴上一个小程序的二维码,万一被有缘人看见了,欢迎体验。

2024年10月24日 · 1 分钟