Mkdir700's Note

Mkdir700's Note

最新文章

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

在 zsh 里同时使用 Vim 和 Emacs 快捷键是一种灵活的混合配置方法。通过在 viins keymap 中重新绑定常用的 Emacs-style 快捷键,可以在插入模式下保留熟悉的操作方式。这样,在普通模式下享受 Vim 的强大编辑能力,在插入模式下继续使用 Ctrl-A/E/U/K 等经典 Emacs-style 快捷键。这种配置让两种操作习惯互补,简化了命令行操作的流畅性,非常适合习惯了 Vim 但不想放弃经典操作的用户。
VIM
99
0
0
2025-08-21

macOS 代码签名配置指南

本文介绍了在 macOS 上配置代码签名和公证的步骤。首先需要准备 Apple Developer 账户和开发者证书,包括 Developer ID Application Certificate 和 Developer ID Installer Certificate。接着通过生成开发者证书、转换为 base64 格式以及获取 App-Specific Password等步骤准备好所需信息。然后在 GitHub 仓库中设置 Secrets,包括 Apple ID、App-Specific Password、Apple Team ID等信息。最后验证配置文件和进行构建测试。文章还解答了常见问题并提出安全注意事项。整体是一份详尽的 macOS 代码签名配置指南。
251
0
0
2025-06-20

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

在日常开发中,精细化的版本控制操作特别有用,例如热修复场景、功能拆分、测试回滚和配置管理。解决方案包括使用`git checkout`直接回滚、使用反向补丁精确控制回滚内容、交互式Revert和手动编辑。最佳实践包括操作前的准备工作、验证回滚结果和提交信息规范。在回滚时需确认目标commit、检查依赖关系、进行测试验证并进行团队沟通。部分文件回滚是Git版本控制中的高级技巧,选择合适的方法取决于具体需求。任何回滚操作都应谨慎,并在操作前备份和验证。
106
0
0
2025-05-26

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

在开发桌面剪贴板同步应用(UniClipboard)时,遇到了一个令人困扰的问题:即使只修改与 objc2 库无关的代码,每次构建时 Rust 编译器仍会重新编译 objc2 库,严重影响效率。通过优化 Cargo 配置和使用 sccache 缓存工具,针对 objc2 库进行特殊处理,实现了显著的构建效率提升。优化策略包括并行编译、依赖差异化处理、缓存策略优化和增量编译改进,首次完整构建时间略有增加但增量构建时间减少超过80%。经验总结包括理解依赖关系、差异化处理、充分利用缓存、权衡取舍。这些优化技巧不仅适用于处理 objc2 库,也适用于其他 Rust 项目,提高了开发效率和编码体验。
235
0
1
2025-03-29

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

在 Rust 开发中,优化类型转换代码至关重要。通过使用 Rust 标准库提供的 From 和 Into trait,可以更符合语言惯用法地实现类型转换。在改进过程中,遇到了传入参数类型不匹配的问题,最终通过使用泛型参数的方式实现了更通用的 From 实现。AsRef trait 是实现灵活引用转换的关键工具,可以统一将一个类型引用转换为另一个类型,提高代码的灵活性和可复用性。通过这次重构,代码更符合 Rust 的惯用法,接口更灵活,利用了 Rust 强大的类型系统。在 Rust 中,优先使用标准 trait 进行类型转换,使用 AsRef / AsMut 实现引用转换,通过泛型参数使 API 更通用。
179
0
0
2025-03-28

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

在构建分布式系统时,数据一致性是核心挑战。本文探讨了分布式事务管理中的Saga和2PC模式,以及在使用SQLite等嵌入式数据库时的特殊挑战。Saga模式通过将大型事务分解为小型本地事务,并通过补偿机制来保证最终一致性,但面临数据可见性问题。相比之下,2PC提供强一致性,但复杂且增加性能开销。SQLite使用文件级锁定机制,不适合2PC。解决方案包括接受Saga模式的局限性、更换数据库系统或重新设计系统架构。选择解决方案时需要权衡业务需求和技术限制,以构建可靠的分布式系统。
102
0
0
2025-03-27

什么是 WebRTC 及简单实现

WebRTC (Web Real-Time Communication) is an open-source technology that allows web browsers and mobile applications to implement real-time voice, video calls, and peer-to-peer data transfer through a simple API without the need for any plugins or third-party software. The WebRTC connection establishment process involves multiple steps, including connecting to signaling servers, offer/answer exchange, ICE candidate exchange, and establishing connections. WebRTC core components include signaling servers, RTCPeerConnection for managing connections, offer/answer for session description, session description for communication capabilities and parameters, and channels for data and media transmission. ICE (Interactive Connectivity Establishment) is a key technology in WebRTC for solving network connectivity issues through NAT traversal, optimal path selection, and connection recovery.ICE components include candidates, STUN servers, and TURN servers, with a workflow that involves candidate collection, candidate exchange, connection testing, and selecting the best path. ICE is crucial for WebRTC to work in complex network environments, enabling connections in scenarios with private networks. An example of a peer-to-peer chat based on WebRTC involves a signaling server using Python's FastAPI, WebSocket for communication, and handling different types of signaling messages.
248
0
0
2025-03-24

什么是向量数据库

向量数据库是一种索引、存储和提供对结构化或非结构化数据及其向量嵌入的访问的数据库。像 Weaviate 这样的向量数据库允许根据数据的向量距离或向量相似性在大规模上进行高效的相似性搜索和检索。文章介绍了向量嵌入的概念,以及利用ANN算法实现高效向量搜索的方式。相比传统数据库,向量数据库更适用于存储非结构化数据,实现了高效的语义搜索,并支持向量索引及混合搜索功能。向量数据库在AI应用中扮演重要角色,为企业提供实时的准确相似性搜索,促进个性化和精准决策。
149
0
0
2025-03-19

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

在基于 Tauri 和 React 的 UniClipboard 应用中,事件监听器设置后却很快被取消,根源在于 React 的严格模式。严格模式下,组件会双重挂载和卸载,导致监听器状态异常。尝试使用 useRef 跟踪状态失败,最终采用全局监听器状态管理解决。此方案使监听器在严格模式下持续活跃,成功避免重复设置问题。总结强调了对 React 严格模式的了解、状态管理的重要性以及全局状态的合理使用,为正确管理事件监听器提供了指导。
137
0
0
2025-03-18

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

在 Rust 异步编程中,持有 Mutex 锁的情况下使用 .await 会导致编译错误,因为 MutexGuard 不是 Send 的,可能 violiate Rust 线程安全保证。要解决这个问题,正确的模式是在 await 前释放锁,通过额外作用域控制确保 MutexGuard 在 await 前被释放。其他解决方案包括使用专为异步设计的锁如 tokio::sync::Mutex,以及减少锁的持有时间。总体来说,在 Rust 异步编程中要注意避免在持有 Mutex 锁时使用 .await,释放所有 MutexGuard,考虑使用异步友好的锁,并优先使用作用域块控制锁的生命周期。
264
0
0
2025-03-16
阅读更多