Skip to content
Wen's Blog

摸鱼精选第 10 期

Apr 30, 2022 — Reading

不同的开发语言适合不同的领域,例如 Python 适合做数据分析,C++适合做系统的底层开发,假如它们需要用到相同功能的基础组件,组件使用多种语言分别开发的话,不仅增加了开发和维护成本,而且不能确保多种语言间在处理效果上是一致的。本文以美团搜索实际场景下的案例,讲述在 Linux 系统下跨语言调用的实践,即开发一次 C++语言的组件,其他语言通过跨语言调用技术调用 C++组件。

本文提到在 Java 调用 C 库时,除了 JNI,还有 开源的 JNA 工具,这个 会比 JNI 少很多类型转换的操作,更加简便。

本篇从操作系统的视角介绍编程语言实现并发的底层概念,包括进程调度与 I/O 模型等

响应式 Web 设计已经将 Web 带到了今天人们所能接触到的每一个连接的屏幕上。Web 设计师和创意开发者用创造性的思维、大胆的想法和某种无畏的精神探索、测试和迭代他们的想法,使在线体验更有吸引力、更容易访问和更智能,推动了设计方法的发展。就好比这里所提到的 组件驱动式 Web 设计。

组件驱动式 Web 设计的到来或者说 CSS 容器查询、作用域样式、级联层控制等特性的出现,这些先进的特性使我们有机会从页面布局、全局样式和用户样式中孤立组件样式,从而实现更具弹性的响应式设计。这意味着你现在可以使用基于页面的媒体查询设计宏观布局,包括多屏或折叠屏的细微差异;同时使用基于容器查询给组件设计微观上布局,并添加基于用户偏好的媒体查询,来实现基于用户的独特偏好和需求的定制化体验。

这就是下一代响应式 Web 设计,也就是 组件驱动式 Web 设计(或开发)。它结合了宏观布局和微观布局,最重要的是,也将用户定制化和尺寸外形都考虑到了。

本文作者探究了不同编程语言的弱引用实现方法。

本文探讨了如何建立一种通用设计系统,能够用于 web、app 等平台,技术栈是 React、React Native、Tailwind,有点类似 Ant Design 之类的组件库。

本文作者逆向了 DeepL 的 Windows 客户端,发现了 DeepL 认证的秘密。

  1. DeepL 通过修改 ts 时间戳参数,在毫秒部分进行简单运算,导致与真实时间有几毫秒的误差,然后服务器通过反推简单运算判断是否伪造请求。
  2. 还有一个更隐藏的方法,通过在字符串 json 的某个字段后面增加空格校验,别人用工具格式化的时候一般会忽略掉这个空格,如下:
let req = req.replace(
"\"method\":\"",
if (self.id + 3) % 13 == 0 || (self.id + 5) % 29 == 0 {
"\"method\" : \""
} else {
"\"method\": \""
},
);

防止接口滥用,既可以用很高深的 ssl 协商之类的算法,也可以利用人心理的弱点。

7. git worktree 用法

Git 2015 年出的新功能 worktree,可以在一个 repo 下创建多个目录,每个目录都是完整的代码。这个功能的好处是可以同时打开两个分支,比如你通过

Terminal window
git worktree add feature1

创建了一个feature1的 worktree,那么在根目录下就有一个名为feature1的新目录,里面就是源分支的全部文件,这个源分支可以通过-b参数指定,默认就是你当前的分支。这时你就可以用 IDE 同时打开两个目录进行开发了,互不干扰。你在feature1的目录提交的代码会自动合并到源分支的。

让设计模式不再枯燥、难以理解的教程。

本文作者通过在 C++ 封装协程的实现,用 JNI 接口提供给 Java 使用。最后比较了 C++20、libco、ucontext 等协程库。

MVI 是 Google 在推出 Jetpack Compose (opens in a new window) 之后推荐的架构模式,更加强调单项数据流模式, 有点类似 MVVM + Redux。

得物 Android App 的重构经验,组件化设计,Google MVVM 模式的实践。

本文简单的介绍了基于 OpenGL 自制渲染模块的方法用于某些 UIKit 和 Core Graphics 不好实现的场景,模仿 Three.js (opens in a new window) 的 api 设计,用 JSON 作为采样点的描述文件,解析 JSON 生成顶点属性数组。

这是一个系统文章,包含 iOS / Android 音视频的操作介绍,流程包括采集、封装、编码、解码、解封装、渲染等。

Go 核心团队对 10 多年来 Go 演化发展的复盘,深入分析了那些对 Go 的成功最具决定性的设计哲学与决策。

本文概述了 RxJS 的一些常见用法和使用场景,并和 Redux 进行了比较。

本文提到 List 组件在使用 id 修饰符的时候会提前实例化对象,导致在大 List 的会卡顿:

List {
ForEach(items) { item in
ItemRow(item: item)
// 给每行记录视图设置标识
.id(item.objectID)
}
}

尽量不要使用id修饰符。