I’m Zanxinz👋

“小速记” App 介绍

《小速记》各部分功能介绍 主页面,各个功能入口 ToDo 功能 新建 Todo 时,可设定 Todo 的表情 emoji 、时间段。 右滑删除,左滑完成 Todo,长按 Todo 可设定一个在几分钟后的系统通知推送(提醒这个 Todo) 每日打卡 可以新建任务,设定为每日打卡、每周打卡或每月打卡。 打卡任务有进度,任务完成后会将任务归档。 数字记录器 可以为某一件事情添加计数器,用于腐竹记忆生活中的琐碎数字。 数据 Todo、每日打卡、数字记录器是都作为任务,使用 CoreData 存放于本地。 对应的,有 ArchivedTodo、ArchivedDailyTask、ArchivedRecord 作为归档对象,在任务完成后作为记录存放于本地。 演示 App 使用视频演示

July 7, 2023

如何通过点击 UICollectionViewCell 跳转至对应的 UIViewController

跳转部分的实现 我需要从我的 HomeViewController 通过点击不同的 CollectionViewCell 跳至不同的 ViewController 思路: 首先是需要把目标 ViewController 存放起来,在点击 cell 时可以作为目的地进行 present 跳转。 因为我的多个不同的 ViewController 都继承自 UIViewController, 那么我想用它作为父类型存放在cell中。 先把 Main storyboard 存为当前类的属性,以方便初始化各个 collectionView 然后使用 storyboard 自带的动态反射方法 instantiateViewController,通过字符串找到对应的 ViewController 在 dataSource 的实现中,将 cell 的属性绑定为对应的 controllerView 目标。 最后是 didTapCell 方法,是点击后的具体要做的动作,即跳转。这里的 target 类型是 UIController。 发现这样实现不了,原因是第 1 步中 MainChoiceCell 中的 targetController 不能是 weak,若为 weak 那么它在被赋值然后在函数结束时(closure 结束)会释放引用也就是恢复为 nil,所以正确的做法应该是把 weak 去掉。 手指触碰 UICollectionViewCell 但未释放,这属于 Highlight UICollectionViewCell 底层来自 UIView。重写 highlight 的 willSet, 手指点在 UICollectionViewCell 区域会触发 highlight 置为 true ;手指不松开,移动到不属于 UICollectionViewCell 的区域,则会触发 highlight 置为 false。...

May 17, 2023

N4000 四网口工控机组网

需要用到的硬件 工控机本体这里称为 A, 一台可以连接 WiFi 或者可插入以太网网线的设备称为 B。 公网的接入端口线称为 C。 一个 Wifi 路由器D。 键盘与HDMI 显示器(用于命令行查看系统信息,可省略)、两条网线。 方法一:”不同网段“接法 软路由的 LAN 接 WiFi 的 WAN,连接 WiFi 的设备和直连软路由的设备不算是同一网段。 WiFi 所在 192.168.1.x 软路由所在 192.168.11.x 关键步骤: 以太网连接,从 C 上接一条网线到 A 的 eth1 端口。D 的 WAN 网口和 A 的 eth0 用网线连接。 使用设备 B,连接 WiFi,然后登入后台管理页面,网址一般在 WiFi 路由器背后有写明。 设备B 需要关键一步:设置为 自动 IP 分配,那么才可以在 B 上访问到 192.168.11.1 关键配置: 登入D 的 后台页面(依据不同品牌而定,我这里是 192.168.1.1)。WiFi 路由器 D 的设置,需要设置为 自动获得 IP 地址,拔掉 WiFi 的电源,重启,它会通过A、公网 C 自动获得 IP。这时,连接到该 WiFi 的设备就可以通过 192....

May 13, 2023

Hugo 的一些问题

若域名有变动 需要修改三个地方 workflow 文件夹里 Github Acction 配置文件 Action.yml 中的 cname: config.yaml 中的 baseURL Github repository setting Pages

March 11, 2023

Hugo 发布一篇文章的过程

安装 windows:确保有 hugo.exe 在工程目录下, 并且 .gitignore 里面写上 hugo.exe,即可 Mac:确保 hugo 已安装就可以 新建 一般,都在 post 文件夹下放 markdown 文件,使用不同文件夹来归类 hugo new post/tool/useHugo/publishArticle.md 书写 设定文章的 title, categories, tags 写入内容。标题大小从 ## 开始 本地预览 hugo server 编译成 html,输出到 /docs (路径与 GitHub Action 对应) hugo 到这里,就完成了写作 Git Push 先 fetch,再 commit,再 push。 Github Page 需要重新填写域名 因为 Github Action 在执行的时候会把 master 分支中的 /docs 内所有内容拷贝到 main 分支,这里面不包括 CNAME 文件。所以在 repository 的 setting 的 pages 重新填写域名。(问题已经解决,在 workflow action.yml 中添加 cname: 1-1....

March 11, 2023

Notion文件导出

Notion 批量文件导出,以 PFD格式 Notion 是一款 markdown 笔记软件,可以快速书写,多端同步,支持文件导出,十分方便。 我在 notion 中写了很多页面,有时要转移到别的地方保存,那么应该怎么做呢? notion 支持导出的文件格式:PDF,HTML,MD 可是,这几种方法都有缺点。 PDF:只能当前页面,导出所有子页面,需要升级 Pro HTML:多出了一些附带的文件,文件散乱,转移和浏览都不方便 MD:导出之后,图片和文本都分开,转移不方便,文件散乱 那么,有没有更简单的办法获取我自己写的许多页面,且保存为 PDF ? 有的,步骤如下: 在notion中包含子页面导出 markdown 使用 vs code 打开,使用插件 Markdown PDF 逐页导出。 具体操作步骤 下图可以看到我的一个页面包含了多个子页面。 右上角三个点的按钮,选择 export 导出 markdown 会得到页面和子页面的目录结构 使用 vscode 打开。 安装插件 ”Markdown PDF“ 搜索 Markdown PDF, 点击安装 install。 设置 ”auto convert when save “ 在插件库里可以看到已安装 Markdown PDF 这样一来,打开一个 md 文件,ctrl + s,它就自动转换为 pdf 并输出到源路径了。 当然,也可以自己设定输出的路径,方便批量管理。 总结 到这里,就实现了 Notion 写作内容的固化和转移啦!

March 11, 2023

Java

多线程 Java 多线程编程笔记 🔗

July 12, 2022

各种设计模式

Creational Object Created Pattern Factory Method Provide the method for creating an instance in the superclass, and allow the subclass to choose the type of the instance. 在父类中提供创建对象的方法,允许子类决定实例化对象的类型。 具备的部分:生产者协议、产品协议,往后就可以根据需要来扩展每一种产品。 具体的生产者比如 MongoCakeCreator 的存在是为了实现与产品相关的核心业务逻辑,而不仅仅是创建 MongoCake 实例。工厂方法将核心业务逻辑从具体产品类中分离出来。 // Creator protocol CakeCreator { func createCake() -> Cake func doSomethingForCake(cake: Cake) -> Cake } // Product protocol Cake { func doWork() } // ConcreteCreator class MongoCakeCreator: CakeCreator { var cake: MongoCake? func createCake() -> Cake { var cake = MongoCake() doSomethingForCake(cake: cake) return cake } func doSomethingForCake(cake: Cake) -> Cake{ cake....

July 11, 2022

Advanced Operators

Unlike arithmetic operators in C, arithmetic operators in Swift don’t overflow by default. If want to overflow by default, use the overflow operation begin with ampersand (&). For example, the overflow addition operator (&+). It’s so free to define custom infix, prefix, postfix and assignment operators, precedence and associativity values. Bitwise Operators Here we use a function to pad 0 for the number’s print result. func pad(num: UInt8, count: Int) -> String { var str = String(num, radix: 2) var res: String = str for _ in 0....

June 19, 2022

Access Control

Access control restrict access to part of the code form code in other source files and modules. It enable us to hide the implement detail of the code, and to specify a preferred interface which that code can be accessed and used. Set access levels to individual types (classes, structures, enumerations), as well as to properties, methods, initializers, and subscripts belonging to those types. Protocols can be restricted to a certain context, as can global constants, variable, and functions....

June 18, 2022