Mkdir700's Note

Mkdir700's Note

最新文章

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

许多开发者在使用 zsh 终端时习惯打开 vi 模式,但这会使 Emacs-style 快捷键失效。通过在 viins keymap 中重新绑定这些快捷键,可以实现“混合流派”,即在普通模式下享受 Vim 编辑能力,在插入模式下继续使用 Emacs-style 快捷键。配置 viins keymap 可以让你在普通模式下像使用 Vim 一样操作,在插入模式下保留 Emacs-style 操作,兼得两者优势。如果你喜欢 Vim 且不想放弃经典的 Ctrl-A/E/U/K 操作,这套混合配置值得一试。
VIM
18
0
0
2025-08-21

macOS 代码签名配置指南

本文介绍了在 macOS 上配置代码签名和公证的步骤,确保应用程序能够正常分发和运行。前置要求包括拥有付费的 Apple Developer Program 账户和开发者证书。步骤包括获取开发者证书、获取App-Specific Password、配置GitHub Secrets以及验证配置。常见问题包括构建时提示“No identity found”和“Invalid or inaccessible developer team ID”,解决需要验证Team ID格式和账户权限。安全注意事项包括保护 Secrets 和证书管理。详细步骤和注意事项可以确保应用在 macOS 上正常工作。
80
0
0
2025-06-20

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

在日常开发中,需要回滚特定 commit 中的指定文件,可以利用 Git 版本控制的高级技巧。不同场景下可以采用不同的方法,如使用 `git checkout` 直接回滚,使用反向补丁精确控制回滚内容,或者通过交互式 revert 处理复杂场景。对于简单更改,可以手动编辑文件。在进行回滚操作前,需要做好准备工作、验证回滚结果并规范提交信息。选择合适的回滚方法取决于具体需求,但无论何种方法,都要谨慎操作并确保备份和测试工作。Git 提供了灵活的工具,能帮助开发者更精确地管理代码版本。
48
0
0
2025-05-26

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

在开发桌面剪贴板同步应用时,遇到了一个令人困扰的问题:尽管只修改了与 objc2 库无关的代码,但每次构建时 Rust 编译器仍会重新编译 objc2 库,影响开发效率。问题在于 objc2 库编译耗时长且存在无谓的重复编译,导致循环依赖和构建效率低下。为解决这一问题,优化方案包括调整 Cargo 配置、使用 sccache 加速编译、实施并行编译提升、依赖差异化处理和优化缓存策略。优化后,首次完整构建时间略有增加,但增量构建时间减少超过80%,开发体验也得到明显改善。从经验总结中可得出,理解依赖关系、差异化处理、合理利用缓存和权衡取舍对优化构建至关重要。这些优化技巧不仅适用于处理 objc2 库,也可应用于其他包含慢速编译依赖的 Rust 项目,提高了 Rust 项目的开发效率。
137
0
1
2025-03-29

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

在 Rust 开发中,优化类型转换代码是常见需求。通过使用 Rust 标准库提供的 <code>From</code> trait,改进了从 <code>Payload</code> 和路径创建 <code>ClipboardMetadata</code> 的方式。在处理 <code>Path</code> 和 <code>PathBuf</code> 类型不匹配的问题时,采用了泛型参数方式实现更通用的转换方法。重要性在于使用 <code>AsRef</code> trait 可灵活进行引用转换,设计更灵活的 API,并避免重复实现。通过这次重构,代码更符合 Rust 的惯用法,接口更灵活,利用了 Rust 强大的类型系统。优先使用标准 trait 进行类型转换,使用泛型参数使 API 更通用。
111
0
0
2025-03-28

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

在构建分布式系统时,数据一致性是关键挑战。文章比较了Saga模式和两阶段提交(2PC)两种分布式事务管理方式的特点。Saga将大事务拆分为小事务,通过补偿机制保证最终一致性,但面临数据可见性问题。2PC提供强一致性,但复杂且性能开销大。对于SQLite等嵌入式数据库,因为采用文件级锁定机制,不适合2PC。解决方案包括接受Saga的局限性、更换数据库系统至支持分布式事务的以及重新设计系统架构。在选择方案时,需综合考虑业务需求、技术限制,在一致性、可用性和性能之间寻求平衡。
51
0
0
2025-03-27

什么是 WebRTC 及简单实现

WebRTC是一项开源技术,允许实现实时语音、视频通话和点对点数据传输,无需安装插件。WebRTC连接建立过程包括信令服务器中转、Offer和Answer交换、ICE候选交换,并建立数据通道进行直接通信。核心组件包括信令服务器、RTCPeerConnection、Offer和Answer、会话描述和通道。ICE是解决网络连接问题的关键技术,包括NAT穿透、最佳路径选择和连接恢复。实现基于WebRTC的点对点聊天需建立信令服务器,处理不同类型的信令消息如offer、answer和ICE candidate。
111
0
0
2025-03-24

什么是向量数据库

向量数据库是一种通过向量嵌入进行索引、存储和提供访问的数据库,用于快速查找和检索相似对象,有时也被称为向量搜索引擎。向量数据库通过向量搜索实现数据检索,利用向量嵌入表示数据对象,例如文本数据的向量嵌入能捕捉词语的语义相似性。为了提高检索效率,向量数据库采用近似最近邻方法来搜索相似对象,如 HNSW 算法。与传统数据库相比,向量数据库优化存储非结构化数据及其向量嵌入,支持语义搜索,具有更高的灵活性和效率。对于AI应用程序,向量数据库是关键组件,能够管理和搜索高维向量嵌入,在推荐系统和NLP任务中提供价值见解,实现个性化搜索,保证数据检索的实时性和准确性。
82
0
0
2025-03-19

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

在基于 Tauri 和 React 的 UniClipboard 应用中,遇到了与组件中事件监听器相关的问题。在 React 严格模式下,事件监听器被设置后很快就被取消,与预期行为不符。问题根源在于严格模式导致组件经历双重挂载和卸载。尝试使用 useRef 失败后,最终采用全局监听器状态管理方案解决问题,使监听器持续活跃。通过全局状态管理,避免了监听器被重复设置和取消的问题。解决方案有效,事件监听器成功保持活跃状态,不再出现取消和停止监听的日志。总结提到了了解 React 严格模式、状态管理重要性、全局状态的使用和避免在清理函数中关闭永久资源等知识点。
80
0
0
2025-03-18

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

在 Rust 异步编程中,持有 Mutex 锁时使用 .await 会导致编译错误。由于 MutexGuard 不是 Send 的,跨越 await 点可能在不同线程间切换,违反 Rust 的线程安全保证。正确解决方法是在 await 前释放锁,通过作用域控制确保 MutexGuard 在 await 前被释放。若需频繁使用锁,可考虑使用专为异步设计的锁如 tokio::sync::Mutex,并减少锁持有时间以提高效率,保持锁的安全使用方式是 Rust 异步编程的关键原则。
105
0
0
2025-03-16
阅读更多