Skip to content
Calvin's Blog

摸鱼精选第 31 期

Jul 23, 2023 — Reading

学习怎么使用 useEffect 定制一个自己的 hook。

import { useEffect, useRef, useState } from 'react';
const useDebounce = (value, delay = 500) => {
const [debouncedValue, setDebouncedValue] = useState('');
const timerRef = useRef();
useEffect(() => {
timerRef.current = setTimeout(() => setDebouncedValue(value), delay);
return () => {
clearTimeout(timerRef.current);
};
}, [value, delay]);
return debouncedValue;
};

可能是市面上比较好的 Javascript 高级教程,适合有一定 Javascript 基础的同学学习。

作者很高产,写了很多其他的教程:

这篇文章是关于 TCP 长连接 CWND reset 的问题分析。作者在文章中描述了一个用户工单,其中用户在一个 50ms 延迟的环境中调用其他服务的延迟远大于 50ms,有 200ms 左右的延迟。作者通过分析日志和询问开发团队,最终发现问题是由一个 TCP 行为导致的。

SwiftUI 的 View 和 Environment 变量索引, 支持 iOS 13 到 17 的版本。

UICollectionView 的一些新接口用法,尤其是 Drag and Drop (opens in a new window) 接口。这个新接口是 iOS 11.0 就已经支持的了,但是我们日常开发中比较少用到。

一些 Xcode 调试小技巧:

Apple 官方的 APNs 调试控制台 web 网站,可以自定义各种消息,应该会比第三方的推送服务更稳定吧。

iOS 团队中大于 2 个人就遇到这种自动签名的问题,每个人都创建一个自己的 Development 和 App Store Distribution 的证书。但是 Profile 只认一个 Distribution 证书,每个人的创建日期又不一样,导致证书经常过期或者不知道使用睡的证书。

Fastlane 提出的一个办法就是将证书 key 保存在一个 git 仓库中,集中式管理,避免每个人手动创建的混乱。

这个开源库有意思的点是使用UIAlertController的私有属性contentViewController自定义一个 Alert 效果。

还可以看下iOS UIAlertController 高级自定义 (opens in a new window),这篇文章列举了 UIAlertController 所有的私有 api。

Swift 和 Objective-C 的 API 命名规范有些不同,在混编时,虽然编译器会根据一些规则重命名 Objective-C 与 Swift API 且通常结果还不错,但这毕竟是计算机的审美结果,有时会不尽如人意。本篇文章讲解了如何自定义重命名 Objective-C 与 Swift API,掌握它们就可以人为地改进重命名的 API,提升混编体验。

Apple 给的示例中 `NS_SWIFT_NAME`` 的应用场景:

iOS 17 中 UIKit 更新内容,作者很厉害,连续多年 WWDC 之后都写了类似的文章,包括 iOS 11 (opens in a new window), iOS 12 (opens in a new window), iOS 13 (opens in a new window), iOS 14 (opens in a new window), iOS 15 (opens in a new window), iOS 16 (opens in a new window)

可以驱动视图进行更新的源被称之为 Source of Truth,它的类型有:

避免重复计算的方法也就是针对这几个数据源的改变,尽量避免全局状态,尤其是 @EnvironmentObject 环境变量,只要声明了这个变量,无论使用与否都会在变量改变之后刷新。

其他建议

这篇文章主要讲了作者的团队为什么要将 SVG 转换为 Canvas。作者的团队在使用 React 处理与 SVG 交互时遇到了一些问题,他们希望能够找到更好的方法来编写交互处理代码。因此,他们决定从头开始编写一个新的交互处理系统,并使用 Canvas 来实现他们的目标。

2019 年的老文,但是这个知识点很多人不会用。其实就是 UIScrollViewContent Layout GuideFrame Layout Guide

本系列文章记录了使用 Rust 编程语言编写一个小型操作系统的详细过程。每篇文章包含所需所有所需代码和相关知识点讲解。

目前 flutter 和原生之间的互相调用方法有三种:Platform Channel ,官方库 Pigeon,FFI。

该仓库主要记录 NLP 算法工程师相关的顶会论文研读笔记。

讲述了如何更有效率地调试大型程序(以 C/C++为例)的方法和技能。书中例子不仅丰富而且都是从实际的工作经验提取,观点和方法有效且具有可行性。

涉及的话题有:

可用于嵌入式系统的 C++ 17 功能,应该不多吧,嵌入式能兼容到 C++ 14 就不错了。

这是一本免费的在线教科书。

编译器将用高级语言编写的程序翻译成用较低级语言编写的程序。对于计算机科学专业的学生来说,从头开始构建编译器是一个必经之路:一个具有挑战性且有趣的项目,它提供了对计算机科学许多不同方面的深入了解,其中一些方面理论性很强,另一些方面则非常实用。

本书提供了一个学期的编译器构建介绍,使读者能够构建一个简单的编译器,该编译器接受类似 C 的语言并将其转换为工作的 X86 或 ARM 汇编语言。它最适合具有一定 C 语言编程经验并学过数据结构和计算机体系结构课程的本科生。