大象笔记

知者行之始,行者知之成

对于复杂业务逻辑代码的梳理方法

这两天遇到一个复杂的业务逻辑改动需求。 如果是第一次写,也许反而简单很多;但,现实是,需要在既有的逻辑代码上,去修改调整。 于是,我被难到了。。。 接到这个需求的第一天晚上,我看了半天,也整理了不少文档,硬是没有任何思路。 以为太晚了,可能大脑过于疲惫,于是拖到了第二天。但是第二天伊始,依旧没有头绪。 站立 & 纸和笔 恰好需要去车间跟设备进行现场调试,在等设备接线的过程中,我站在货架边,用纸和笔把逻辑梳理了出来。 没想到异常简单。。。 我觉得之前没有快速搞定,很大的问题在于陷入了之前代码的思维陷阱,总想着怎么在现有代码的基础上去改动。 而,用纸和笔快速梳理出来的根本原因是,先抛弃了现 ...

阅读全文...

使用国内源安装 Rust

这段时间写 Android 界面快吐了,极度枯燥,想学习一下 Rust 放松一下心情。于是在 Windows 11 的 WSL Ubuntu 中安装最新版本的 Rust。 下载安装脚本 参考 Rust 官网的新手文档 https://www.rust-lang.org/learn/get-started 在终端命令行中执行 curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh 但是这个安装过程非常慢,且没有进度条,估计是下载速度不行。 参照网上的做法,可以先下载官方的安装脚本,然后将其中的下载源替换为国内的源即可。 所以 ...

阅读全文...

VIM 在 tabnew 中打开目前鼠标所在行文本所指向的文件

例如,在 VIM 中打开某个文件,其中一行是文件路径,如: /etc/timezone 如果想在 VIM / NeoVIM 中,通过快捷键,在 tabnew 中打开目前鼠标所在行文本所指向的文件。 可以使用 Ctrl+w gf tips: ctrl + w 看似难记,实际跟分屏切换命令的前缀是一样的。 如果不想在 tabnew 中打开,而是当前 window,可以直接使用 gf 然后就能使用 buffer 相关的命令,在原文件与目标文件间切换。 使用场景 比如在代码注释/文档中,注明了相关联的代码文件,就可以直接写上目标文件的地址。 然后通过 gf 快捷键快速打开。 buffer 相关命 ...

阅读全文...

代码可读性, 开发效率与可维护性

为何今天才意识到代码可读性,可维护性的重要? 如果一份代码需要频繁修改,新增逻辑,及逻辑更新会不断破坏旧有逻辑。而逻辑本身又非常复杂。 这时代码可读性就非常重要了。 因为,在频繁改动的项目上,花在理解既有逻辑上的时间,可能比写代码的时间多 N 倍。 提高代码可读性,可以大大降低时间成本。 反面示例 最近在维护自己写的代码时,发现前期的每一次代码规范上的偷懒,都会影响后续修改代码的效率。例如: 变量名,函数名,图省事用了模棱两可的名字。 超长的函数 未处理的异常,错误 超长的代码文件,充斥着无尽的类和函数 无处不在的废弃的,但是没有清理的代码 增强代码可读性, 减少对外部文档的依赖 逻辑梳 ...

阅读全文...

手机自动化任务工具,解决下班忘打卡的烦恼

最近在调研 RPA (Robotic Process Automation) 自动化方案,突然想到平时经常忘记下班打卡,Android 手机上是否有类似的工具能实现自动打卡呢? 每次掏出蓝牙耳机,MIUI 都会自动打开网易云音乐,看起来是自动为我创建了一条自动任务规则。那么一定是可以自定义一个到了固定时间触发打开企业微信/钉钉的规则。 自动任务 查了一下,果然,小米手机系统的手机管家 APP 内置了一个自动任务的功能: 里面内置了一些常见的使用场景 可惜都不是我需要的。于是,点击右下角的添加按钮,新建一条自定义规则 触发条件是工作日下午 17:31,自动执行打开企业微信。 已有自动任务列 ...

阅读全文...

如何在写代码时保持愉悦的心情

与愉悦相对的就是焦虑,烦躁。 焦虑与烦躁 这段时间的情绪波动尤其明显,确切地说是最近两个月。根源是: 无穷无尽的开发需求,似乎没有做完的那一天。 例1: 主要工作变成了写 Android App,界面部分是大头,但是一个 App 给三四家客户各写一套, 每套界面还不一样,确实没啥新鲜感了。虽然写界面越来越熟练了,但是毫无意义,枯燥又乏味。 还要忍住不去吐槽客户新手设计师的奇葩设计。 例2: 另一个长期维护的项目,在有新功能的同时,还有既有功能的不断体验优化需求。 优化建议很合理,但是无休止地优化,影响了新功能的开发节奏,达不到自己上线的预期,于是焦虑就产生了。 经常在屏幕前,纠结半天要做什么, ...

阅读全文...

Android 点击设置菜单条目,基于 DialogFragment 实现弹窗

DialogFragment 在 android 3.0 时被引入。是一种特殊的 Fragment,用于在 Activity 的内容之上展示一个模态的对话框。典型的用于:展示警告框,输入框,确认框等等。在 DialogFragment 产生之前,创建对话框:一般采用 AlertDialog 和 Dialog。注:官方不推荐直接使用 Dialog 创建对话框。使用 DialogFragment 来管理对话框,当旋转屏幕和按下后退键时可以更好的管理其声明周期,它和 Fragment 有着基本一致的声明周期。且 DialogFragment 也允许开发者把 Dialog 作为内嵌的组件进行重用,类 ...

阅读全文...

对话机器人 Rasa(二十七):返回视频

虽然 Rasa 支持图片资源的返回,但是并不支持视频资源。 可以采用自定义字段的方式返回视频链接。 例如: utter_my_video: - text: "Watch video below" custom: video: "https://www.youtube.com/embed/qsKoT__cmAw?si=1hv4HoKA3ZcTvNCN" 这里的视频链接使用了 youtube 嵌入 iframe 中的视频源链接。 前端可以封装一个 video 卡片组件,将 youtube iframe 嵌入到页面中。 自定义字段直接返回 ifr ...

阅读全文...

入手了小米家的机械键盘

家里一直用的我买 Dell 台式机送的键盘,虽然鼠标已经坏了两个,但是键盘一直坚挺。 终于到了该退伍的时刻,最近 Ctrl 键越来越按不动,对于 Ctrl C / Ctrl V 程序员来说,这实在无法忍受。 特别是晚上写代码,本来就烦躁,然后 Ctrl C 还不好使,真有砸键盘的冲动。 于是我准备入手一把新键盘了。印象中这也是我第一次买键盘。。。 需求 唯一的需求就是带背光,因为有时候喜欢关灯写程序,没有背光,看不清键盘。 蓝牙还是有线 我担心背光影响电池续航,所以优先选择有线。 键盘的品牌 这个我倒是没有特别的喜好,之前用过公司发的 Cherry 机械键盘,但实际上感觉跟普通的 Dell, ...

阅读全文...

又到了每年双十一纠结阿里云服务器如何续费的时间 (2023版)

目前用的阿里云服务器是 2000 年双十一时参加活动购买的,买了3年。规格是 2 核 4G 内存,3M 带宽的版本。型号是 “共享标准型实例规格族s6”。 今年双十一正好到期。又要纠纷续费的问题了。纠结的原因无非就是太贵了。 续费价格 昨晚收到阿里云的推广邮件,说有一张3折的续费折扣券,但是只能续费1年。 限时续费1年3折,限1台1次 进入阿里云管理后台看,价格确实有点诱惑力,原价 ¥ 1839.60,折后 ¥ 788.40 今年,即 2023 年,阿里云优惠活动的地址是 2023阿里云金秋云创季-阿里云。 可以领一堆满减优惠券。 s6 的特点 s6的特点如下:相比上一代共享型实例规格族( ...

阅读全文...

react markdown 组件支持 table 表格渲染

发现默认安装的 react markdown 组件不支持 table 表格的渲染。 在官方文档里查了一下,需要安装额外的组件 remark-gfm 来支持 table 渲染。 安装 remark-gfm tyarn add remark-gfm 代码配置 import Markdown from "react-markdown"; import remarkGfm from "remark-gfm"; <div class="markdown_container"> <Markdown remarkPlugi ...

阅读全文...

Android 点击按钮显示悬浮菜单

需求 点击 Android 屏幕上的设置按钮,弹出一个悬浮菜单,显示具体的细分配置功能。例如: 时间设置 语言设置等 Material Design Menu 组件 https://github.com/material-components/material-components-android/blob/master/docs/components/Menu.md 也可用过输入框的下拉列表。 overflow, context, popup 的区别 Dropdown Menu 又细分为几种类型: Overflow menu: 溢出菜单,即 Android 界面右上角三个点,点开后显示 ...

阅读全文...