摸鱼精选第 32 期
1. 2023 春夏季开源操作系统训练营
本教程展示了如何 从零开始 用 Rust 语言写一个基于 RISC-V 架构的 类 Unix 内核 。
2. PromptPerfect
本网站针对 GPT 的 Promt 进行优化。大部分人能够说话,但不懂聊天,俗称口才不行。感觉在 GPT 领域也是一样,同一件事,不同的 Promt 得出的答案有很大区别。
3. Uber Go 语言编码规范
本指南的目的是通过详细描述在 Uber 编写 Go 代码的注意事项来管理这种复杂性。这些规则的存在是为了使代码库易于管理,同时仍然允许工程师更有效地使用 Go 语言功能。
中文翻译:uber_go_guide_cn
4. 成为搞懂 GPT 的少数人
本文档为《前沿课—吴军讲 GPT》的课程笔记。 每小节包含两部分: 1.课程关键句(问题) 2.思维导图(点 开更清晰)
5. Is Parallel Programming Hard, And, If So, What Can You Do About It?
本书是 Linux 内核大牛 paul 的力作, 主要讲解并行编程的内容。
最新的英文版是 v2023.06.11a。
有一个很老的中文翻译版本:《深入理解并行编程》
6. chinese-poetry: 最全中文诗歌古典文集数据库
最全的中华古典文集数据库,包含 5.5 万首唐诗、26 万首宋诗、2.1 万首宋词和其他古典文集。诗人包括唐宋两朝近 1.4 万古诗人,和两宋时期 1.5 千古词人。数据来源于互联网。
7. Codeium for Xcode
Xcode 最让开发者诟病的可能就是开放性了,插件 API 能做的事情太少,只能针对 Editor 部分加砖添瓦。但还是有很多人在 Xcode 上面不懈努力,尤其是 Copilot 出来之后,iOS/Mac 开发者对 VS Code 简直是羡慕嫉妒恨,所以 Copilot for Xcode 出来了。但是 Copilot 或者 chatGPT 都要收费,所以目前我的 VS Code 使用的是 Codeium,一个免费的 AI 代码助手。
8. Building a design system with Tailwind CSS: A step-by-step guide
学习如何在 Figma 中创建一个设计系统,并逐步练习,包括创建 Figma 样式和变量,以实现一致和高效的设计工作流程。
9. 尼尔森十大交互原则
尼尔森的十大可用性原则被广泛运用于网页、APP 以及各种人机交互领域。
10. Node.js Best Practices
Node.js 最佳实践。
有中文翻译: nodebestpractices
11. Riverpod 学习笔记
-
Riverpod 之 Provider(一),使用 Provider 讲解了 WidgetRef 和 Ref 的 watch 要点
-
Riverpod 之 StateProvider(二),讲解了 StateProvider 的内部流程,主要涉及的是其内部的名叫 state 的 Provider。
-
Riverpod 之 Provider&StateProvider(三),讲解了 Provider 和 StateProvider 的组合使用。
-
Riverpod 之 StateNotifierProvider(四),介绍了 StateNotifierProvider 的使用。
-
Riverpod 之 FutureProvider(五),介绍了 FutureProvider 的使用。
-
Riverpod 之 select(六),介绍了 Provider 的 select 方法使用和原理。
-
Riverpod 之 family(七),介绍了 family 方法得使用和内部流程
-
Riverpod 之 autoDispose(八),介绍了 autoDispose 方法的使用和内部流程
-
Riverpod 之 override(九),介绍了 override 属性的使用和内部流程
12. RocksDB 源码学习
RocksDb 源码剖析系列
13. Bad practice: capturing a method reference
在使用 Swift 的 Combine 时,注意订阅事件时的sink(receiveValue:)
方法如果传递是实例方法 handle(value:)
,会默认 capture self。
class ViewModel {
var cancellables = Set<AnyCancellable>()
init() {
publisher
.sink(receiveValue: handle(value:))
.store(in: &cancellables)
}
func handle(value: String) {
// `self` can be used here
}
}
这里相当于:
class ViewModel {
...
init() {
publisher
.sink(receiveValue: {
self.handle(value: $0)
})
.store(in: &cancellables)
}
...
}
14. 深入理解 Observation - 原理,back porting 和性能
在 WWDC 23 中,Apple 推出了全新的 Observation 框架,旨在解决 SwiftUI 上的状态管理混乱和性能问题。这个框架的工作方式看似非常神奇,甚至无需特别声明,就能在 View 中实现属性粒度的订阅,从而避免不必要的刷新。本篇文章将深入探讨背后的原理,帮助您:
- 理解 Observation 框架的实质和实现机制
- 比较其与之前解决方案的优势所在
- 介绍一种把 Observation 前向兼容到 iOS 14 的方式
- 探讨在处理 SwiftUI 状态管理时的一些权衡与考虑
15. 领悟到 NSCoding 是一个坑,Apple 花了 10 年时间
本文主要阐述以下观点,如果你早已知晓,请忽略本条内容:
- Apple 在 2008 年 7 月 11 日 推出的 iOS2 里,带来了 NSKeyedArchiver、NSKeyedUnarchiver,2018 年 9 月 10 日发布的 iOS12 几乎废弃了 NSKeyedArchiver、NSKeyedUnarchiver 中所有的方法,甚至包括 init 方法。Apple 花了 10 年时间,发现 NSCoding 是一个坑。
- iOS6 推出的 NSSecureCoding 是高配版本的 NSCoding,NSCoding 并不适合你用,请及早弃坑。而这不是你的问题,是 NSCoder、NSKeyedArchiver、NSKeyedUnarchiver 内部实现有问题。iOS6 修复了 NSCoder 的问题,iOS12 修复的是 NSKeyedArchiver、NSKeyedUnarchiver。
- UIKit 出厂时还在用 NSCoding,Foundation 出厂时,标配 NSSecureCoding。
- Foundation 中任何类都可以遵循 NSCoding,但是 NSObject 出厂时,并没有遵循。所以实现
-initWithCoder:
时,不能总是调用父类的[super initWithCoder:]
,有时要调[super init]
。 - Nib 与 Storyboard 方式加载的 UIViewController ,是通过
-initWithNibName:bundle:
来声明文件路径,-initWithCoder:
与 NSKeyedUnarchiver 来加载的。了解这一点,有助于理解 UIViewController 生命周期。 - 当一个对象被初始化时,init 方法可能并不会被执行,可能是通过执行
-initWithCoder:
初始化,所以只在 init 进行初始化,可能会丢失数据、属性。-initWithCoder:
常常被忽略。
16. iOS 限制输入表情(emoji),出现九宫格不能输入的解决方法
九宫格预览时,会用 ➋➌➍➎➏➐➑➒ 替代 A-Z 的位置,当 用户在预览选择了具体的词汇之后,textField 的 text 才会回调真实的文本。
17. Swift 结构化并发进阶
本文章基于 WWDC23 中 Beyond the basics of structured concurrency 进行创作:
- 结构化任务在任务取消上相较于非结构化任务的优势
- 结构化任务在任务优先级传递上的优势
- 结构化任务结合 TaskLocal 包裹值在单个任务中复用任务维度属性的优势
- 结构化任务在全链路性能追踪中的优势
18. 美团前端研发框架 Rome 实践和演进趋势
本文整理自美团技术沙龙第 76 期《大前端研发协同效能提升与实践》,为大家介绍了美团到店前端研发框架 Rome 实践和演进趋势。
具体来讲,本文首先介绍了 Rome 整体的工程生态、演变路径、规模化升级以及工程框架外的开发辅助工具;第二部分,重点阐述了如何做框架度量和相关的业务实践;最后做整体的总结以及对工程框架的下一阶段的思考。希望能对大家 带来一些帮助或启发。
19. 一文揭秘饿了么跨端技术的演进、实践与落地
本文会先带领大家一起简单回顾下跨端技术背景与演进历程与在这一波儿接着一波儿的跨端浪潮中的饿了么跨端现状,以及在这个背景下,相较于业界基于 React/Vue 研发习惯出发的各种跨端方案,饿了么为什么会选择走另外一条路,这个过程中我们的一些思考、遇到及解决的问题和取得的一些成果,希望能给大家带来一些跨端方面的新思路。
20. Redis Sorted Set 底层实现原理深度解读与排行榜实战
本文主要探讨了 Redis Sorted Set 数据类型底层的实现原理和游戏排行榜实战。