Mkdir700's Note

Mkdir700's Note

最新文章

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

在 zsh 中使用 vi 模式带来了类似 Vim 的编辑能力,但却失去了一些常用的 Emacs-style 快捷键。通过在 viins keymap 中重新绑定这些操作,可以在普通模式下享受 Vim 强大功能,在插入模式下继续使用熟悉的 Emacs-style 快捷键。这种混合流派让两种操作习惯互补,使命令行操作更加灵活。配置方法简单,适合习惯 Vim 却又不想放弃 Ctrl-A/E/U/K 这些经典操作的用户尝试。
VIM
61
0
0
2025-08-21

macOS 代码签名配置指南

配置 macOS 代码签名和公证是确保应用在 macOS 上正常分发和运行的重要步骤。前置要求包括 Apple Developer 账户和开发者证书。获取开发者证书的步骤包括在 Apple Developer 网站创建证书,导出为 p12 格式,然后转换为 base64 格式。接着,需要获取 App-Specific Password 和配置 GitHub Secrets。验证配置包括检查配置文件和测试构建。常见问题涵盖构建时的提示、开发者团队 ID 的问题以及公证失败等。在安全注意事项中,提醒保护 Secrets 和进行证书管理。这些步骤和注意事项有助于确保应用的安全性和正常运行。
173
0
0
2025-06-20

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

在日常开发中,通过 Git 进行部分文件回滚是一项重要的技巧。文章介绍了四种方法:使用 `git checkout`、反向补丁、交互式 Revert 和手动编辑,分别适用于不同场景。方法一简单直观,方法二适用于精确控制回滚内容,方法三提供最大灵活性,方法四适用于简单更改。在回滚前需要做好操作准备和提交信息规范,确保回滚的准确性和系统正常运行。选择合适的方法取决于具体需求,但无论如何,操作前都应该做好备份和验证工作。
71
0
0
2025-05-26

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

在开发桌面剪贴板同步应用(UniClipboard)时,遇到了一个问题:即使只修改与 objc2 库无关的代码,每次构建时 Rust 编译器仍会重新编译 objc2 库,严重影响开发效率。问题源于 objc2 库编译耗时长、无谓的重复编译以及循环依赖。为解决此问题,优化措施包括优化 Cargo 配置、使用 sccache 缓存工具加速编译。主要优化原理包括并行编译提升、依赖差异化处理、缓存策略优化和增量编译的改进。经过优化后,首次完整构建时间略有增加,但增量构建时间减少了80%以上,开发体验显著改善。从优化过程中得到的经验包括理解依赖关系、差异化处理、充分利用编译缓存以及在速度和代码质量之间做出权衡。这些优化技巧不仅适用于处理 objc2 库,也适用于其他包含慢速编译依赖的 Rust 项目,可以显著提高项目的开发效率。
192
0
1
2025-03-29

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

在 Rust 开发中,优化类型转换代码是一项常见任务。文章介绍了从自定义方法到通用 trait 实现类型转换的过程。通过使用 Rust 标准库提供的 From 和 Into trait,实现了更符合 Rust 风格的类型转换方式。在遇到 Path 和 PathBuf 类型不匹配的问题时,通过使用泛型参数实现了更通用的转换方式。重点强调了 AsRef trait 在灵活引用转换中的重要性,使得代码更符合 Rust 惯用法,并能接受多种相关类型的参数。这种模式适用于需要设计接受多种相似类型参数的 API,在 Rust 中,建议优先使用标准 trait 和 AsRef / AsMut trait 实现灵活引用转换,通过泛型参数使 API 更通用。
154
0
0
2025-03-28

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

构建分布式系统时,保证数据一致性是挑战。文章讨论了Saga和2PC模式,Saga通过补偿机制保证最终一致性,但面临数据可见性问题;2PC提供强一致性,但复杂且增加性能开销。在使用SQLite等嵌入式数据库实现2PC时,受文件级锁定限制。解决方案包括接受Saga模式局限性、更换数据库系统或重新设计架构。权衡一致性、性能与可用性至关重要。
83
0
0
2025-03-27

什么是 WebRTC 及简单实现

WebRTC是一项开源技术,通过简单的API实现实时语音、视频通话和数据传输,无需安装插件。WebRTC连接建立流程包括信令服务器中介、Offer/Answer交换、ICE候选交换和数据通道通信。WebRTC核心组件包括信令服务器、RTCPeerConnection、Offer和Answer、会话描述和通道。ICE技术解决了NAT穿透、最佳路径选择和连接恢复等关键问题,包括候选者、STUN服务器和TURN服务器。ICE工作流程涉及候选者收集、交换、连接检查和路径选择。通过基于WebRTC的点对点聊天示例,了解了信令服务器的实现。
183
0
0
2025-03-24

什么是向量数据库

向量数据库是索引、存储和提供对结构化或非结构化数据及其向量嵌入访问的数据库。它允许在生产环境中快速查找和检索相似对象,有时被称为向量搜索引擎。通过向量搜索和向量索引,在大规模数据集中快速找到相似对象的方法是使用近似最近邻 (ANN)方法。向量数据库与传统数据库的区别在于优化的数据类型和高效的语义搜索能力。通过向量搜索,检索不再依赖于精确匹配,使其对同义词具有鲁棒性。向量数据库架构由多个索引组成,支持各种应用场景的向量搜索需求。向量数据库已成为AI应用中的关键组件,为企业提供语义搜索、个性化和实时数据处理的能力。
115
0
0
2025-03-19

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

在基于 Tauri 和 React 的 UniClipboard 应用中,遇到了与组件中事件监听器相关的问题,导致监听器被设置后很快就被取消。问题根源在于 React 的严格模式,在 <code>main.tsx</code> 中使用了 <code>&lt;React.StrictMode&gt;</code> 标签。严格模式会执行双重挂载和卸载,在 <code>useEffect</code> 中设置监听器被执行两次,导致取消和重新设置监听器的现象。尝试使用 <code>useRef</code> 失败后,最终采用全局监听器状态管理,并在组件卸载时保持监听器活跃。实施后,监听器成功保持活跃状态,解决了 React 严格模式下事件监听器失效的问题。通过解决过程,学习了 React 组件生命周期、严格模式及事件监听器的正确管理方式。
110
0
0
2025-03-18

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

在 Rust 异步编程中,持有 Mutex 锁时使用 .await 会导致编译错误,因为 MutexGuard 不是 Send 的,违反了线程安全。解决方法是在 await 前释放锁,通过作用域控制确保 MutexGuard 在 await 前释放,提取需要的数据,并避免线程安全问题。其他解决方案包括使用 tokio::sync::Mutex 或减少锁的持有时间。在异步编程中要注意不在持有 Mutex 锁时使用 .await,释放 MutexGuard 后再执行异步操作,以确保线程安全与代码正确性。
156
0
0
2025-03-16
阅读更多