IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

最新文章

采集自各技术站点的近期文章。

IT AI/ 2026-06-03 09:03:23 / 累计浏览 62

在macOS上用命令/脚本进行OCR提取文字内容

在macOS系统上进行OCR文字提取,可直接调用系统原生能力,实现速度快且识别效果较好,但要求系统版本为10.15或以上。文章主要介绍了两种具体实现路径:一是使用通过Homebrew安装的开源工具Tesseract,并提供了命令行示例,包括基础识别及结合`-l chi_sim`参数指定中文语言识别;二是使用Python库`ocrmac`,它是对macOS系统能力的封装,需要在虚拟环境中安装。文章给出了批量处理脚本及Python编程实例,重点分析了`ocrmac`库的关键参数配置:推荐使用`framework="livetext"`进行识别,该方式虽将结果拆分为单字符,但置信度高;同时需通过`language_preference`如`['zh-Hans']`明确指定中文,否则默认识别英文效果不佳。文中对比了不同`framework`与`recognition_level`参数组合下的识别差异,并最终提供了包含Tesseract、ocrmac、EasyOCR等在内的多个相关工具参考链接。

本机暂存
IT DevOps/ 2026-06-03 09:03:23 / 累计浏览 45

类unix系统上如何快速批量重命名文件

在macOS中文环境下,系统生成的文件名常带空格,这对终端操作很不友好。这篇分享从作者的实际痛点出发,详细讲解了如何将文件名中的空格批量替换为下划线。 文中提供了两种清晰的方案:一个`rename1`函数专门处理当前目录,另一个更强大的`rename22`函数则利用`find`命令递归处理子目录。关键点在于`find`的`-execdir`选项,它确保命令在文件所在目录执行,避免了路径问题。代码示例完整,解释了参数含义,甚至考虑了文件名含特殊字符的情况。 作者在开头特别提到,这类具体场景的解决方案,如今通过向AI大模型精准提问,往往能快速找到线索或思路。这不仅是一篇实用的Shell脚本指南,也侧面提醒我们,善用AI工具能有效拓展解决实际问题的能力边界。

本机暂存
IT 开发者/ 2026-06-03 09:03:23 / 累计浏览 49

露营装备清单整理

本文整理了一份全面的露营装备清单,旨在帮助露营爱好者,特别是新手,提前做好充分准备。清单涵盖六大核心系统:**基础装备**包括帐篷、天幕、折叠桌椅、营地车及防潮垫等,为露营提供基本生活与休息空间;**餐厨装备**详列了炉具、锅具、餐具、水具及保温箱等,保障户外饮食需求;**辅助工具**涵盖充电宝、防晒防虫用品、头灯及急救包,确保安全与便利;**休闲装备**如蓝牙音箱、户外影院等,丰富营地活动;**消耗材料**则包括饮用水、清洁用品及各类燃料;针对烧烤爱好,另设**烧烤装备**专题。 对于计划过夜露营者,清单额外强调了睡袋、枕头、照明设备、洗漱用品及简单药品的必要性。文章同时提供了十项重要**注意事项**,包括结伴而行、选择正规营地、保持通讯畅通、携带充足饮用水、谨慎生火、制定计划以及环保意识等,这些原则对于保障露营安全与体验至关重要。清单最后还提及了针对特定场景(如汛期或山区露营)的装备建议,体现了其实用性与针对性。

本机暂存
IT 后端/ 2026-05-23 20:34:36 / 累计浏览 158

让 AI 把我的 PHP 博客重写成 Go

作者尝试将一个运行近20年的古老PHP博客系统重构为Go语言。项目启用了Claude Code的Superpowers插件,通过结构化问答明确了技术选型:采用Go的Gin框架、GORM作为ORM,并构建Vue 3 SPA前端,保持与原MySQL数据库100%兼容。AI助手在确认需求后,自动生成了包含项目结构、API设计等详细规划文档,并利用子代理驱动开发模式执行了约22个开发任务,最终生成一个约35MB的单文件可执行程序,集成了前端SPA。 实现过程并非一帆风顺,主要挑战在于处理历史遗留数据。最复杂的是对UBB标记语法的解析与渲染,因内容已含HTML实体转义且标签存在嵌套,作者编写了34个测试用例才覆盖所有边界情况。此外,需为三代不同的旧URL格式实现301重定向以保持外链有效,并调整了附件链接的解析逻辑以适配反向代理路径。数据库中的标签词频统计也因数据陈旧而改为通过关联查询实时计算。 最终项目产出包括约2800行Go后端代码和2000行Vue前端代码,实现了完整的REST API、JWT认证、防盗链等40余个端点。作者评价整个过程耗时约两三小时,主要负责需求反馈与测试,AI则负责编码、构建与部署,认为这种人机协作模式展现了AI在复杂工程任务中的实用潜力。

本机暂存
IT 后端/ 2026-05-17 23:38:01 / 累计浏览 212

errno 的实现

POSIX标准对errno的定义从早期的外部变量演变为可修改左值的宏,旨在解决多线程环境下共享全局变量导致的错误码覆盖问题,确保线程安全。FreeBSD的具体实现采用函数指针间接调用模式:errno宏展开后会调用__error()函数获取int指针。在单线程场景下,__error()通过函数指针返回全局变量__libsys_errno的地址。当程序链接线程库libthr时,其构造函数会调用__set_error_selector,将函数指针切换至线程安全版本__error_threaded。该函数会检查线程初始化状态:若当前线程非初始线程,则返回该线程pthread结构体中独立的error字段地址;否则仍回退使用全局存储。这种设计既保证了主线程在线程库初始化前的可用性,又为每个工作线程提供了独立的错误存储。此外,libthr还通过弱符号引用提供了兼容路径,并将一系列可能阻塞的系统调用替换为线程化版本,以处理取消点等线程语义。

本机暂存
IT 前端/ 2026-05-17 14:50:00 / 累计浏览 125

CSS 中的标点悬挂及其现状

标点悬挂是一种排版微调技术,通过让标点悬出段落对齐边界来保持正文文字边缘整齐,从而提升阅读体验。在中文排版中,它源自西文排版,但中文传统强调版框概念——内容需完全放入版心,因此标点悬挂通常仅在行尾进行,以避免零碎空隙,维持网格式密排模式,增强可读性。简单套用西文规则可能导致版面怪异。CSS 定义了 hanging-punctuation 属性来实现这一效果,语法如 hanging-punctuation

本机暂存
IT 安全/ 2026-05-10 18:36:52 / 累计浏览 338

Postmortem: 关于 xzutil 后门事件的一些事后复盘

这篇讲的是2024年3月震惊开源社区的xzutil后门事件的一次深度复盘。与许多聚焦于“漏洞如何被发现”的文章不同,作者以非事件第一发现者的社区成员视角,梳理了从攻击者潜伏、到恶意代码合入、直至被偶然揭露的完整时间线。 文章的核心在于拆解攻击者的精密手法:攻击者如何通过长期经营信任、利用维护者精力有限的空隙,将恶意代码巧妙伪装成性能优化提交。复盘特别指出了这次供应链攻击的深远影响,它暴露了关键基础设施软件维护的脆弱性,以及一个“单点”维护者可能带来的系统性风险。 作者并非止步于描述事件,而是从技术社区协作模式的角度给出了思考:当项目的健康度与少数关键人物深度绑定时,我们该如何建立更健壮的防线?这种基于具体事件、指向系统层面的反思,让这次复盘超越了单纯的事件记录,为每一位开源参与者提供了审视自身所处生态安全的实用视角。

本机暂存
IT 后端/ 2026-05-10 18:35:06 / 累计浏览 197

嵌入主线程消息循环的任务调度器

这篇文章聚焦于将基于多线程调度器的项目 `soluna`,移植到 WebAssembly 等非 Windows 平台时遇到的核心难题。作者从项目维护的实际需求出发,解释了为何在可能退化为单线程的环境中,模拟出 `ltask` 调度器的能力成为关键挑战。 文中介绍的核心实现思路颇具巧思:将原本独立的任务调度器巧妙地“嵌入”到主线程自身的消息循环里。这意味着主线程需要同时承担两份工作——既要处理自己的消息队列,又要扮演调度器的角色,为其他逻辑“线程”(通常是协程)分配执行机会。作者没有停留在理论层面,而是深入探讨了如何在单一线程上,通过协作式调度和精心设计的队列,来模拟多线程环境下的任务切换与调度行为。 这种设计确保了项目的多线程调度架构得以保留,其核心价值不因平台变化而丧失。文章清晰地展示了一个现实场景下的工程权衡与技术适配过程,对于需要处理类似跨平台移植问题,或是对单线程高并发模型感兴趣的开发者而言,提供了非常具体的实现参考。

本机暂存
IT DevOps/ 2026-05-10 17:49:31 / 累计浏览 142

git submodule 与 subtree 的异同

最近有开发者在整理代码仓库、尝试将代码与数据分离时,借助 `filter-repo` 等工具,引发了关于究竟该用 `git submodule` 还是 `git subtree` 的思考。这篇文章就深入对比了这两个看似功能相似、实则内核与适用场景迥异的 Git 功能。 两者最核心的差异在于代码的“存在形式”。`submodule` 像是一个精确的指针,它只在你的主仓库中记录一个指向特定子仓库提交的链接。因此,主仓库保持精简,但每次克隆或拉取后,你都需要额外执行 `git submodule init` 和 `update` 来同步子模块内容,管理上更为“显式”。 相反,`subtree` 则采用“拿来主义”,它将子仓库的代码内容直接合并到主仓库的指定目录下,代码成为主仓库历史的一部分。你无需额外步骤就能看到并编辑全部代码,操作更直接,但代价是主仓库的历史记录会膨胀,且后续同步上游更新时可能产生更复杂的合并。 这种差异直接决定了它们的适用场景。如果你的子项目是清晰分离、需要独立版本管理且上游更新频繁的组件(例如共享库),`submodule` 提供了干净的隔离。若你只是希望将某个外部项目的某次快照代码嵌入你的项目,或对代码的便捷访问和单一仓库管理的需求高于历史清洁度,那么 `subtree` 的“一体化”方案会更简单省心。文章通过一个真实的代码整理场景,清晰地剖析了这两种方案的优劣与选择依据,能帮助开发者在项目管理和代码组织时做出更合适的决策。

本机暂存
IT 开发者/ 2026-05-10 17:39:55 / 累计浏览 206

C++ 中的 main 定义

这篇讲的是 C++ 最新标准里一个看似微小却影响行为的细节调整:关于 `main` 函数的定义。 作者直接指出了核心变化——根据最新的 C++ 标准草案,程序入口函数 `main` 不再允许被 `extern "C"` 这样的 linkage-specification 修饰。文章引用了标准原文,明确了这一点。对于很多习惯了在某些项目或编译器下这样写来避免名字修饰的开发者来说,这可能会造成困惑或编译错误。 文章进一步解释了背景:在旧标准和实际编译器实现中,`main` 作为程序入口点,其链接约定有着特殊的隐含处理。允许用 `extern "C"` 修饰是一种非正式的宽容行为,但新标准明确了这一行为是不符合规定的。文章通过展示错误用法与正确用法的代码对比,清晰地指明了正确做法——只需遵循基本的 `main` 函数签名即可。 这提醒我们,依赖编译器的“非标准特性”或历史宽容行为存在风险。随着标准演进,这些模糊地带正在被澄清。对于需要严格符合标准的代码,尤其是跨平台项目,留意此类细节更新很有必要。

本机暂存
IT 前端/ 2026-05-07 14:28:05 / 累计浏览 182

如何使用CSS判断鼠标从哪个方向进入元素?

这篇讲的是前端开发中一个很实用的细节:如何用纯CSS或结合少量JS,来精准判断鼠标是从哪个方向进入一个元素的。作者从常见的菜单悬停效果切入,直接对比了两种主流思路。一种是利用JavaScript监听事件来计算方向,另一种则是通过巧妙的CSS变量与伪元素配合,仅用`mouseenter`触发就能实现方向感知。文章不仅展示了最终效果,还拆解了每种方案的核心实现逻辑,比如CSS方案中如何通过过渡属性控制伪元素的“展开”动画,从而自然呈现进出方向。作者对比了两种方案的代码量、性能开销以及适用的场景,指出纯CSS方案在轻量级交互中更显优雅,而JS方案在复杂逻辑中则更灵活。读完后,你不仅能直接套用代码,更能理解这些技术选择的权衡点。

本机暂存
IT DevOps/ 2026-05-07 14:12:03 / 累计浏览 184

OpenClaw 发展历程表:从 clawdbot 到 openclaw

这篇梳理了开源 AI 代理平台 OpenClaw 从 v2026.1.5 开始的完整演进时间线。文章不只是简单罗列版本更新,而是通过关键版本节点,勾勒出项目从“接入模型的机器人”成长为“AI 工作台”的完整轨迹。 作者指出,从 v2026.1.5 开始,项目以“clawdbot”为名稳定发布,随后在 v2026.1.14-1 至 v2026.1.16-2 期间,通过引入网页搜索、浏览器控制、Hooks 等能力,快速具备了 Agent 系统雏形。中间一段因商标压力短暂更名为“Moltbot”的插曲也被记录下来。 最重要的拐点出现在 v2026.1.29,项目正式、全链路地更名为 OpenClaw。此后,经过 v2026.2.1 的系统性收口,到 v2026.3.12 带来 Dashboard v2 与 Provider 插件架构,平台化方向日益清晰。最终,项目在 2026 年 3 月 1 日,其 GitHub Star 数超越 React 成为非聚合类项目之冠,成为影响力出圈的标志性时刻。整篇文章通过时间线与关键变化解读,生动展示了一个项目在品牌、技术与社区三个维度的协同进化过程。

本机暂存
IT 开发者/ 2024-03-12 22:57:01 / 累计浏览 3,113

竞业协议的相关文章收集

这篇关于国内竞业协议现象的深度合集,汇集了多篇重要文章的核心观点与案例。文章直指国内互联网行业竞业协议被普遍滥用的现状——本应仅针对高管、核心技术及保密人员的限制,已下沉至应届生甚至实习生,成为企业“拿捏”员工的工具。作者梳理了相关法律要点,例如竞业期限最长两年、补偿金一般不低于离职前12个月平均工资的30%,并强调连续三个月不支付补偿则协议自动失效。 合集进一步引入硅谷视角作为对比:加州早在1872年便立法禁止竞业协定,学者认为这促进了人才流动与创新,是硅谷保持活力的源头之一。而美国联邦贸易委员会(FTC)更在2023年提议全国禁止,指出竞业协定会压缩薪资、阻碍创业。通过汇集国内“全网通缉”式的极端案例与硅谷的开放模式,文章呈现了两种截然不同的人才观与创新生态。它既为从业者提供了应对竞业限制的实用法律知识,也引发了对于人才价值与企业权力边界的思考。

本机暂存
IT DevOps/ 2022-09-03 23:31:12 / 累计浏览 5,167

apt 的 update 和 upgrade 命令的区别是什么?

这篇文章聊的是Linux系统更新中一个经典但容易混淆的问题:apt命令的update和upgrade到底有什么不同?作者从实际使用场景切入,指出两者的关键差异——update只负责同步软件源的元数据缓存,让你的系统知道有哪些包可以更新;而upgrade才是真正执行下载和安装升级操作。 文章进一步对比了apt和apt-get这对“兄弟命令”的表现。虽然基础功能相似,但apt update会贴心地显示可升级包的数量,apt-get则不会。更实用的是,apt upgrade可以直接升级Linux内核,而apt-get upgrade无法做到这点,必须使用更复杂的dist-upgrade命令。 作者用命令执行结果的截图和流程对比,把技术细节讲得很清楚。最后还分享了一个小观点:既然这两个命令总是配合使用,为什么不合并成一个呢?这反映了作者对命令行工具用户体验的思考。

本机暂存
IT 开发者/ 2022-07-24 20:47:15 / 累计浏览 4,413

一个 VLA (可变长度数组)的实现

这篇讲的是作者如何用C语言实现一个更实用、更安全的可变长度数组库。C99引入的VLA特性因安全问题已被MSVC和Linux内核相继放弃,但在日常开发中,变长数组的需求依然存在。现有的通用方案,如C++的std::vector或简单的void*实现,在类型安全、性能(堆内存分配)和与特定运行时(如Lua)的集成方面各有不足。 作者的方案核心是将VLA拆分为抽象的“句柄”和类型化的“访问器”。通过`vla_using`宏,在栈上创建一个指向实际数据的原生指针作为访问器,同时关联句柄,从而在保证类型安全和原生数组访问性能的同时,提供了清晰的API。为兼顾临时使用与持久引用的不同场景,方案统一了栈上缓存与堆分配的切换逻辑。 更巧妙的一点是,作者针对与Lua交互的场景,实现了利用Lua GC管理内存的第三种模式:小块内存直接分配在C栈上,大块内存则转为Lua临时userdata,随函数退出自动回收,省去了手动清理的麻烦。整个实现展示了如何在C语言的限制下,通过宏技巧和分层设计,构建出一个既高效又贴合实际工程需求的通用数据结构。

本机暂存
IT 算法/ 2022-07-24 20:46:45 / 累计浏览 4,003

用邻接表实现无向图

这篇讲的是作者在游戏管道系统扩展中,如何用邻接表实现一个无向图数据结构。作者从原有的液体管道系统(采用类似树的固定数组存储)出发,面对电线网络等新需求——节点无方向且可多邻接,决定重新设计。核心思路是将节点id与边关系分离,便于模块化复用。具体实现上,每条边用32位紧凑表示(16位端点id对,小id在低位确保唯一性),并设计了一个巧妙的结构:在边数据中加入两个链表指针,分别指向两端点所属的边集合,从而支持高效遍历。 更精巧的是,作者进一步压缩了存储:通过将其中一端点的边集合连续排列,另一端以链表链接,并用“反转端点id”来标志链表结束(通常小id在前),最终每条边只需48位。文章以九宫格网格图为例,完整演示了如何从节点索引开始,逐步追踪并找出顶点5的全部四条邻接边。作者坦言这种无向图实现并非日常工作所需,但经过半天编码,能写出这样紧凑高效的结构让他颇为满意,其压缩方案甚至可能具有一定的原创性。

本机暂存
IT 安全/ 2022-06-19 22:51:51 / 累计浏览 4,308

洋葱式信息安全观察:信息安全与业务浪涌

这篇从信息安全三属性中的“可用性”切入,聚焦电商大促、春运抢票、核酸扫码等场景下频繁出现的“业务浪涌”现象。作者借用电气工程中的“浪涌”概念,将其映射到互联网系统中瞬间爆发的业务压力。 文章系统分析了导致可用性瓶颈的几种典型系统依赖模式,包括纵向扩展、集群、分布式计算及跨云外部依赖。核心在于,面对几乎不可避免的流量高峰,如何进行系统性防御。作者提出的解决思路涵盖四个层面:顶层的架构设计(需考虑全链路扩展性)、底层的资源设计(强调云资源的弹性冗余与调度)、面向服务的QoS与SLA设计(为流量分级和资源调配提供依据),以及具体的缓存、队列、读写隔离、降级限流等技术手段。 最后,文章点明其核心观点:业务浪涌是可预测和可预防的,通过架构、资源、服务与技术的协同设计,能够有效构建系统的“防浪涌”能力,避免雪崩效应,保障关键业务在极端流量下的稳定运行。

本机暂存
IT AI/ 2022-06-19 18:18:07 / 累计浏览 5,160

文言文白话文互转:文言文转白话文(现代文),白话文(现代文)转文言文

这篇讲的是作者利用一个开源的文言文-现代文平行语料库,动手实践了双向互译模型的全过程。起点是东北大学团队整理的约96万句对经典古籍对齐数据,这份珍贵语料覆盖广且经过人工校对,为模型训练打下了基础。作者基于此,训练了文言文转白话文、白话文转文言文两个独立的神经网络机器翻译模型,并将它们集成到AINLP公众号,用户可通过指令直接测试。文中展示了几个转换示例,说明了模型已能完成基本互译,不过作者也坦诚效果基于现有数据和模型,“仅供一乐”。整体来看,这是一次从优质语料获取、模型训练到功能部署的完整技术实践,让古籍翻译的探索变得具体而可玩。

本机暂存
IT 安全/ 2022-06-19 18:15:01 / 累计浏览 4,755

一句话crontab实现防ssh暴力破解

这篇讲的是如何用一条crontab命令,为公网VPS搭建一道自动化的SSH暴力破解防火墙。 针对公网VPS即便更换非标准端口也难免被扫描和试探的问题,作者提出了一种轻量却高效的解决方案:将一条Bash命令放入crontab定时任务,实现自动监控与封禁。这条命令会通过`journalctl`查询最近24小时内的SSH登录日志,用`awk`统计出失败次数超过5次的来源IP,最后自动将这些“坏人”IP追加到`/etc/hosts.deny`黑名单中。 文章最巧妙的地方在于,用短短三个管道符串联起日志查询、统计分析与访问控制,既利用了系统原生日志工具,又结合了简单的文本处理,最终实现了从发现到封禁的全自动闭环。作者还贴心地指出,命令可根据是否使用systemd系统灵活调整日志来源,增强了实用性。 对于运维人员或个人站长而言,这提供了一个零成本、即刻生效的防护思路,无需依赖额外软件,用系统自带工具就能构筑起第一道安全防线。

本机暂存
IT 数据库/ 2022-06-19 12:01:23 / 累计浏览 5,209

Python连接 MySQL 数据库的超时问题

这篇文章深入分析了Python开发中一个常见的“坑”:使用Flask-SQLAlchemy连接MySQL时,为何会突然抛出“MySQL server has gone away”的异常。作者从实际案例出发,先拆解了MySQL服务端的`wait_timeout`机制(默认8小时,常被企业调至600秒)和Flask-SQLAlchemy客户端的连接回收策略(`SQLALCHEMY_POOL_RECYCLE`默认2小时),指出了问题的核心——两端的超时设置不匹配,导致数据库端已关闭空闲连接,而客户端仍试图使用该失效连接。 针对这个具体的超时错位问题,文章提供了三种切实可行的解决方案:一是执行无意义的`SELECT 1`来预先检测连接活性;二是调整客户端的回收时间,使其低于服务端超时阈值(文章推荐使用新的`SQLALCHEMY_ENGINE_OPTIONS`配置方式);三是使用后主动关闭连接。作者结合企业实践,最终选择了调整客户端配置这一更便捷的方法。 文章的分析紧扣故障现场,将超时参数的具体数值、异常产生的典型堆栈以及配置修改的代码示例一一呈现,为遇到同类问题的开发者提供了清晰的排查路径和落地参考。

本机暂存