Skip to content
Calvin's Blog

摸鱼精选第 30 期

Jun 1, 2023 — Reading

这是《深度学习入门 4 - 强化学习》的配套题目,最近推出了中文版可以在线测试,不过讲解视频还都是日文的。

强化学习(Reinforcement learning,RL)讨论的问题是一个智能体(agent) 怎么在一个复杂不确定的 环境(environment) 里面去极大化它能获得的奖励。通过感知所处环境的 状态(state) 对 动作(action) 的 反应(reward), 来指导更好的动作,从而获得最大的 收益(return),这被称为在交互中学习,这样的学习方法就被称作强化学习。

章节内容:

@dynamicMemberLookup 对简化访问内部私有对象的字段有用,还可以仿造 RXSwift 的.rx语法,做一些链式的 keyPath 语法调用。

但是也有缺点,引用网友的话:

这个只能设置属性,而不能调用方法,像设置 UIButton 的 title 就不太好做 还有注册 tableView cell 等等。

参考:

Swift 的 Range 和 Objective-C 的 NSRange 不太一样。

本站中的内容来源于 spring.io (opens in a new window) ,原始版权归属于 spring.io (opens in a new window)。本站内容由 Spring Boot 中文社区 (opens in a new window) 进行翻译,整理。

消息推送服务

除了系统自带的消息通知渠道之外,我们也可以自己拥有一个消息推送服务。基于自部署的消息推送服务,我们可以配合其他自动化工具来监控通知或是短信,实现消息转发等功能。

可选服务包括:

n8n (opens in a new window) 类似于 iOS 的快捷指令,是一个开源、具备可扩展性、可自部署的工作流自动化工具,它不仅整合了国外 220 多种常用的应用服务,同时也拥有丰富的第三方模板社区以便人们分享自己的工作流。

但不同于移动端设备,n8n 是运行在服务器之上,在有效利用服务器资源的同时也可以让其他端设备享受到自动化的便捷。

Memos (opens in a new window) 是一款开源、可自部署的 Flomo 仿制项目,它大致还原了 Flomo 基本功能,并且也提供多用户注册;当然如果你像我一样只是自用,那么完全可以将其用作一个无话不说的「树洞」来使用。

DuckDB 是一款高性能分析型数据库。其 Sort 更是可圈可点,DuckDB 的 Sor 性能优于业界的其他数据库。

整体结构分为三层: 从下到上依次是:

  1. Core 部分的 timer_queue 实现
  2. 中间的 timer 调度器实现(多选一)
  3. 业务层使用的 service 和 timer 实现

架构不要过度设计,保持简单。

Flutter 用于桌面应用现在已经发布 1.0 的稳定版了,但是用于 TV 的遥控器适配,官方都没有宣布支持。作者的方案简单来说是用一个全局的遥控事件接收组件,统一 Focus 接收管理 ControlManager,然后在监听遥控事件的页面 mixin。

Fastify 是一种日益普及的替代 Express 的选择(关于为什么可以参考这里)。Damilola 探讨了 Fastify 的一些高级概念,以及逐步从 Express 迁移到 Fastify 的办法。

管理 Axios Token 的缓存 — 用于在有效期内管理认证令牌的缓存,以及透明地刷新 或 恢复它们(例如当后端在有效期截至之前撤销了令牌时)。

Flutter 对于手势事件的处理流程的思路其实非常直观,在 down 事件时通过 hitTest()确定可能触发手势事件的 Widget 并给它们设置优先级,再调用 dispatchEvent 对手势事件进行分发并向竞技场注册成员等待判定。在 handleEvent()时会根据条件解决冲突判定手势的胜利者。 本文通过源码分析对 Flutter 的手势事件分发与冲突处理进行了说明,同时通过 GestureDetector 的示例分析了不同冲突的具体处理方式,以及如何对手势事件进行拦截,希望对大家理解 Flutter 的手势事件有所帮助。

神农学 Swift 的笔记总结确实不错,是花了精力的,😄。

本文主要讲解 swiftlint 的使用,尤其是大型的 Swift 项目里,通过 git diff 来比较当前修改的文件或新增的文件,减少 swiftlint 全量检测的耗时问题。

介绍 Android/iOS 常见的内存泄漏问题。

OkHttp 在 Java 和 Android 世界中被广泛使用,深入学习源代码有助于掌握软件特性和提高编程水平。

本文首先从源代码入手简要分析了一个请求发起过程中的核心代码,接着通过流程图和架构图概括地介绍了 OkHttp 的整体结构,重点分析了拦截器的责任链模式设计,最后列举了 OkHttp 拦截器在项目中的实际应用。

新官网确实不错,各种示例讲解,对初学者很友好。

我只能说,为了 Apple 项目能用上 copilot,B 站也是够狠的。

主要优化手段以及目的:

  1. 使用动图逐帧加载的方案, 避免在动图展示之前就全部解码消耗太多内存, 并提升首帧耗时.
  2. 使用 Image 绑定帧缓存, 避免 YYAnimatedImageView 方案在滑动场景中不断加载新的动图并清空缓存导致一直在做解码, 从而引起 CPU 负载过高.
  3. 设置 SDImageCache 的内存缓存阈值, 避免 CPU 负载较高时 MemoryWarning 未及时触发, 导致 MallocException 崩溃.
  4. 使用 NSCache 代替 NSDictionary 做帧缓存, 避免系统压缩内存时带来额外 CPU 消耗, 并由系统自动释放帧缓存.
  5. 在内存不足导致解码失败时主动释放 SDImageCache 的 memoryCache, 避免其他业务申请不到内存导致崩溃.
  6. 设置开启图片下采样, 以合理使用内存.
  7. 在主线程滑动时, 暂停解码新的帧, 避免快速滑动场景浪费 CPU 资源.
  8. 完成图片通用加载组件, 在动图静态图复用的场景可以直接使用 QMAnimatedImageView, 组件不会造成额外性能消耗.
// 开启Clang Module的import方式
@import OCPodA;//与#import <OCPodA/OCPodA.h>效果一致,Clang有做自动转换成import Module的功能。
@import SwiftPodB;
// 不开启Clang Module的import方式
#if __has_feature(modules)
@import OCPodA;
@import SwiftPodB;
#else
#import "OCPodA.h"
#import "SwiftPodB-Swift.h"
#endif

Pipeline 作为多媒体框架引擎的核心思想,历史源远流长,从 Gstreamer 时代开始,逐渐大行其道,其设计思想在广义多媒体各个子领域都在广泛使用。

通过上面介绍的竞品多媒体框架,对比下来我们不难得出 pipeline 领域设计的关键点,但是最终 pipeline 领域设计还是要落实到具体的业务场景中,并结合具体的业务场景,设计出更加灵活、可靠、可拓展、可维护的媒体框架。

本文重点探讨全部模块化后带来的依赖解析瓶颈,主要包括对头文件增量编译分析等内容。

优化方案基于 Swift Toolchain 源码,本文不再探讨 Toolchain 相关基本概念及配置流程等,仅聚焦方案本身。

debounce 节流是 UI 的常规操作,要手写一个 debounce hook,说到底还是要有对 useEffect 的深刻理解。

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;
};

与 C++14 相反,C++17 具有许多新功能,其中一些功能在嵌入式系统领域是有益的。

这是介绍 HTTP/3 以及其底层协议 QUIC 的文档,介绍它们的目的、原理、协议细节以及实现等。

还有一篇详细讲解HTTP//2 (opens in a new window)的文档,主要内容包括该协议的背景、思想、协议本身的内容、对一些现有实现的探讨与对协议未来的展望。

GitHub Action 教程,想用 GitHub 官方的 CI/CD 的同学可以了解一波。