Mkdir700's Note

Mkdir700's Note

最新文章

在 zsh 里同时用上 Vim 和 Emacs 快捷键

在 zsh 中使用 vi 模式可以让命令行享受到 Vim 的编辑能力,但会丧失一些常用的 Emacs-style 快捷键。通过在 vi 插入模式下重新绑定这些快捷键,可以实现在普通模式下使用 Vim,插入模式下保留 Emacs-style 的优势。配置灵活且简单,能够让使用者在命令行输入时既能享受 Vim 的强大功能,又能保留熟悉的 Emacs-style 操作。对于习惯了 Vim 却不愿舍弃经典操作的用户来说,这套混合配置绝对值得一试。
VIM
31
0
0
2025-08-21

macOS 代码签名配置指南

This article provides a comprehensive guide on configuring macOS code signing and notarization to ensure the proper distribution and functionality of applications on macOS. It outlines the prerequisites such as an Apple Developer account and necessary developer certificates. The steps include obtaining developer certificates, generating an app-specific password, configuring GitHub secrets, verifying the setup, addressing common issues like "No identity found" and "Invalid or inaccessible developer team ID," and emphasizing security considerations like protecting secrets and managing certificates effectively. The guide also offers related links for further reference.
103
0
0
2025-06-20

如何对特定 Commit 中的指定文件进行 Revert

在日常开发中,需要对特定 Commit 中的指定文件进行回滚操作,可以选择不同的方法:使用 `git checkout` 进行简单回滚,使用反向补丁进行精确控制,使用交互式 Revert 处理复杂场景,或者手动编辑处理简单更改。每种方法都有适用的场景和优点,如操作简单直观、最大控制灵活性等。在执行回滚前,需要做好准备工作并验证回滚结果,同时要注意确认目标 Commit、检查依赖关系、进行充分测试以及及时沟通团队。这些高级技巧可以帮助更精确地管理代码版本,但操作时应谨慎,并记得做好备份和验证工作。
53
0
0
2025-05-26

Rust 项目中解决依赖重复编译问题:以 objc2 为例

在开发桌面剪贴板同步应用(UniClipboard)时,遇到了一个令人蛋疼的问题:即使只修改一些与 objc2 库完全无关的代码,每次构建时 Rust 编译器仍然会重新编译 objc2 库,严重影响了开发效率。问题包括 objc2 库编译耗时长、无谓的重复编译和循环依赖。为解决这一问题,优化方案包括优化 Cargo 配置并行编译、使用 sccache 加速编译、根据依赖包设置不同优化级别、优化缓存策略以及改进增量编译。实施优化后,首次完整构建时间略有增加,但增量构建时间减少了80%以上,开发体验显著提升。经验总结包括理解依赖关系、差异化处理、充分利用缓存和权衡取舍。这些优化技巧适用于处理慢速编译依赖的 Rust 项目,能显著提高开发效率。
154
0
1
2025-03-29

Rust 中优雅地实现类型转换:从自定义方法到通用 trait

在 Rust 开发中,需要进行类型转换时,优化类型转换代码是一个常见问题。起初通过自定义静态方法实现,但不够"Rust 风格"。尝试使用 Rust 标准库提供的 From trait,但遇到了参数个数错误。解决方法是使用元组将参数组合成一个。另一问题是 Path 和 PathBuf 的不匹配,通过泛型参数解决了这一问题。AsRef trait 在 Rust 中起着关键作用,提供了灵活的引用转换。通过这次重构,代码更符合 Rust 惯用法,接口更灵活,并利用了 Rust 强大的类型系统,这种模式可应用于需要类型转换的场景,特别是设计接受多种相似类型的 API。在 Rust 中需优先使用标准 trait 进行类型转换,利用 AsRef / AsMut 实现灵活的引用转换,通过泛型参数使 API 更通用。
125
0
0
2025-03-28

分布式事务的挑战:从 Saga 到 2PC,以及 SQLite 的局限性

在构建分布式系统时,数据一致性是关键挑战,本文探讨了Saga和两阶段提交(2PC)两种分布式事务管理模式,以及使用SQLite等嵌入式数据库时的特殊挑战。Saga模式通过拆分大型事务并补偿机制实现最终一致性,但面临数据可见性问题。相比之下,2PC提供强一致性但复杂且性能开销较大。SQLite由于文件级锁定机制,不适合2PC。解决方案包括接受Saga模式的局限性、更换数据库系统(如PostgreSQL)、重新设计系统架构等。在权衡一致性、可用性和性能时,需要根据具体场景选择最适合的方案。
59
0
0
2025-03-27

什么是 WebRTC 及简单实现

WebRTC 是一项开源技术,通过简单的 API 实现实时语音、视频通话和数据传输,无需安装插件。连接建立流程包括信令服务器连接确认、Offer/Answer 交换和 ICE 候选交换。核心组件包括信令服务器、RTCPeerConnection、Offer 和 Answer,提供连接管理和通信功能。ICE 技术解决网络连接问题,通过候选者收集和交换选择最佳路径。WebRTC 的应用示例是基于点对点的聊天系统,通过信令服务器转发 offer、answer 和 ICE candidate 实现通信。
142
0
0
2025-03-24

什么是向量数据库

向量数据库是一种索引、存储和提供对结构化或非结构化数据及其向量嵌入的访问的数据库,允许根据数据的向量距离或相似性进行高效的搜索和检索。文章介绍了向量数据库的核心概念,如向量嵌入,以及如何通过ANN算法实现高效向量搜索。相比传统数据库,向量数据库能更好处理非结构化数据,实现类似人类的语义搜索,提高用户体验和个性化。选择向量数据库需要考虑搜索延迟、内存占用、成本效率和与AI工具的集成能力。
99
0
0
2025-03-19

React严格模式下事件监听器失效

在基于 Tauri 和 React 的 UniClipboard 应用中,出现了与组件中事件监听器相关的问题。问题根源在于 React 的严格模式,导致监听器被设置和取消两次。通过尝试使用 useRef 失败后,采用了全局监听器状态管理的方案。这一方案通过外部全局变量存储监听器状态并在组件卸载时保持监听器活跃,成功解决了监听器失效的问题。通过解决这一问题,加深了对 React 组件生命周期、严格模式以及事件监听器管理的理解,为构建稳健的 React 应用提供了重要启示。
90
0
0
2025-03-18

Rust 异步线程安全问题解析与修复

在Rust异步编程中,当持有Mutex锁时使用.await会导致编译错误,因为MutexGuard不是Send的,违反了线程安全保证。正确的解决方法是在await前释放锁,控制作用域确保MutexGuard在await之前释放。其他解决方案包括使用tokio::sync::Mutex等专为异步设计的锁,以及使用更细粒度的锁策略。总之,在异步代码中要注意避免在持有Mutex锁时使用.await,释放所有MutexGuard后再进行异步操作,并考虑使用异步友好的锁机制。
119
0
0
2025-03-16
阅读更多