专栏 04
前端与脚本
前端与脚本相关的小技巧和踩坑。
精选
Touch-Up:让任何触摸屏在 macOS 上即插即用,以及我做的那些修改
Touch-Up(shueber/Touch-Up)是一个 macOS 用户态触摸屏驱动,由 Sebastian Hueber 开发:市面上绝大多数触摸屏都遵循 USB HID,在 Windows 上插上就能用,接到 Mac 上却毫无反应,Touch-Up 就是补这个缺口——读取 HID 原始数据、解析成触摸点、注入成系统级鼠标事件,不需要内核扩展,安装后授予辅助功能权限即可使用。它有两个形态:Touch Up 工具 App(默认交互借鉴 iPadOS:轻点=点击、拂动=滚动、手指稍作停留再移动=拖拽、双指捏合=缩放、双指点击=右键,还可以开启「触摸窗口把它带到前台」)和 TouchUpCore 框架(把多点触摸数据暴露给开发者,App 本身就是集成示例,可参考 DebugView)。兼容性方面官方说法是「任何在 Windows 上能用的触摸屏都应该能用」,并在 Iiyama TF3222MC、T2336MSC-B2 和 3M C4667PW 上做过测试,Releases 页面提供带公证的构建包。本文记录我在 Fork(OnesZhang/Touch-Up,分支 feature/multi-finger-swipes,commit d7f2933,8 个文件约 +933/−15)上提交的功能:给三指/四指手势增加可自定义的键盘快捷键映射。做法分两层:TouchUpCore 里扩展 12 种可映射手势(三/四指上、下、左、右滑动 8 种,轻点 2 种,长按 2 种),委托协议 TUCTouchDelegate 新增 performKeyboardShortcutForGesture:(滑动识别完成触发一次)与 beginKeyboardHoldForGesture:/endKeyboardHoldForGesture:(长按按下映射键、手指全部抬起才松开),一次手势会话互斥地只判定为滑动/轻点/长按之一,手指移动超过阈值默认 10mm 判为滑动、几乎没动就抬起判为轻点、停住不动默认 0.35s 判为长按;手指按在屏上的整个会话期间鼠标事件被抑制,所以手势不会顺带移动光标或误点击。App 层整理了 48 条 macOS 常用快捷键目录 ShortcutPreset.catalog(含 8 个媒体键,走 NX_KEYTYPE_*),按调度中心与空间、窗口管理、应用切换、导航编辑、系统、媒体与功能键分类,每个手势可在设置里绑定任意预设或设为 Off 保留原光标行为,默认值接近触控板经典体验:三/四指滑动映射调度中心与空间切换、长按映射 fn、轻点关闭;映射持久化在 UserDefaults,设置界面新增 Multi-Finger Shortcuts 分区并适配新旧两套 SwiftUI 布局。此外顺手修了三个 macOS 兼容性问题:缺少输入监控权限时 HID 注册对 NULL 队列无防护导致启动崩溃(现在优雅降级并在设置页顶部显示权限横幅,点 Grant Access 深链到系统隐私面板)、合成方向键缺少真实方向键的 numericPad 标志且控制类快捷键需要 SecondaryFn 标志否则会被调度中心与空间功能丢弃(参考 SO 61872579 / 45704155)、发送合成快捷键后修饰键状态残留会把后续普通点击变成右键(现在显式释放修饰键,fn 的按住状态用不带 SecondaryFn 的 flagsChanged 释放事件清除);并新增 GitHub Actions 工作流在 macOS runner 上自动构建 App,Fork 上还会把产物挂到滚动的 ci-build release 便于直接下载。
[JS辅助方法] 校验字符串字符类型并返回结果及过滤后的字符串
这篇 JavaScript 工具函数通过类型编号映射表,把数字、字母、汉字、特殊符号和空格五类字符统一成检测与过滤两套正则,一次调用即可返回是否命中目标类型以及剔除这些字符后的字符串。文章给出使用示例、参数对照表和空数组等边界情况说明,并展示了清理输入、提取纯文本、密码强度校验等场景,适合需要在表单校验或数据清洗中复用字符过滤逻辑的前端开发者参考。
pnpm安装sharp报错处理办法
文章记录了 pnpm 安装 sharp 时因无法从 GitHub 下载 libvips 二进制包而报错的问题,典型表现是安装脚本执行失败并提示连接被拒绝。解决办法是通过 pnpm config 将 sharp 及其 libvips 的二进制下载地址改为 npmmirror 国内镜像源,适合国内网络环境下遇到同类依赖安装失败的开发者参考。
Next.js项目run dev报错TypeError: fetch failed
文章记录了 Next.js 项目执行 npm run dev 时出现 fetch failed 报错的排查过程,原因是旧版淘宝镜像已停止服务。作者给出通过 npm 或 yarn 将 registry 切换为新的 npmmirror 镜像的解决办法,适合遇到同类网络请求失败的 Next.js 开发者参考。
展开全部 14 篇收起全部文章
2026-10-15
Touch-Up:让任何触摸屏在 macOS 上即插即用,以及我做的那些修改
Touch-Up(shueber/Touch-Up)是一个 macOS 用户态触摸屏驱动,由 Sebastian Hueber 开发:市面上绝大多数触摸屏都遵循 USB HID,在 Windows 上插上就能用,接到 Mac 上却毫无反应,Touch-Up 就是补这个缺口——读取 HID 原始数据、解析成触摸点、注入成系统级鼠标事件,不需要内核扩展,安装后授予辅助功能权限即可使用。它有两个形态:Touch Up 工具 App(默认交互借鉴 iPadOS:轻点=点击、拂动=滚动、手指稍作停留再移动=拖拽、双指捏合=缩放、双指点击=右键,还可以开启「触摸窗口把它带到前台」)和 TouchUpCore 框架(把多点触摸数据暴露给开发者,App 本身就是集成示例,可参考 DebugView)。兼容性方面官方说法是「任何在 Windows 上能用的触摸屏都应该能用」,并在 Iiyama TF3222MC、T2336MSC-B2 和 3M C4667PW 上做过测试,Releases 页面提供带公证的构建包。本文记录我在 Fork(OnesZhang/Touch-Up,分支 feature/multi-finger-swipes,commit d7f2933,8 个文件约 +933/−15)上提交的功能:给三指/四指手势增加可自定义的键盘快捷键映射。做法分两层:TouchUpCore 里扩展 12 种可映射手势(三/四指上、下、左、右滑动 8 种,轻点 2 种,长按 2 种),委托协议 TUCTouchDelegate 新增 performKeyboardShortcutForGesture:(滑动识别完成触发一次)与 beginKeyboardHoldForGesture:/endKeyboardHoldForGesture:(长按按下映射键、手指全部抬起才松开),一次手势会话互斥地只判定为滑动/轻点/长按之一,手指移动超过阈值默认 10mm 判为滑动、几乎没动就抬起判为轻点、停住不动默认 0.35s 判为长按;手指按在屏上的整个会话期间鼠标事件被抑制,所以手势不会顺带移动光标或误点击。App 层整理了 48 条 macOS 常用快捷键目录 ShortcutPreset.catalog(含 8 个媒体键,走 NX_KEYTYPE_*),按调度中心与空间、窗口管理、应用切换、导航编辑、系统、媒体与功能键分类,每个手势可在设置里绑定任意预设或设为 Off 保留原光标行为,默认值接近触控板经典体验:三/四指滑动映射调度中心与空间切换、长按映射 fn、轻点关闭;映射持久化在 UserDefaults,设置界面新增 Multi-Finger Shortcuts 分区并适配新旧两套 SwiftUI 布局。此外顺手修了三个 macOS 兼容性问题:缺少输入监控权限时 HID 注册对 NULL 队列无防护导致启动崩溃(现在优雅降级并在设置页顶部显示权限横幅,点 Grant Access 深链到系统隐私面板)、合成方向键缺少真实方向键的 numericPad 标志且控制类快捷键需要 SecondaryFn 标志否则会被调度中心与空间功能丢弃(参考 SO 61872579 / 45704155)、发送合成快捷键后修饰键状态残留会把后续普通点击变成右键(现在显式释放修饰键,fn 的按住状态用不带 SecondaryFn 的 flagsChanged 释放事件清除);并新增 GitHub Actions 工作流在 macOS runner 上自动构建 App,Fork 上还会把产物挂到滚动的 ci-build release 便于直接下载。
2025-03-21
[JS辅助方法] 校验字符串字符类型并返回结果及过滤后的字符串
这篇 JavaScript 工具函数通过类型编号映射表,把数字、字母、汉字、特殊符号和空格五类字符统一成检测与过滤两套正则,一次调用即可返回是否命中目标类型以及剔除这些字符后的字符串。文章给出使用示例、参数对照表和空数组等边界情况说明,并展示了清理输入、提取纯文本、密码强度校验等场景,适合需要在表单校验或数据清洗中复用字符过滤逻辑的前端开发者参考。
2024-12-25
pnpm安装sharp报错处理办法
文章记录了 pnpm 安装 sharp 时因无法从 GitHub 下载 libvips 二进制包而报错的问题,典型表现是安装脚本执行失败并提示连接被拒绝。解决办法是通过 pnpm config 将 sharp 及其 libvips 的二进制下载地址改为 npmmirror 国内镜像源,适合国内网络环境下遇到同类依赖安装失败的开发者参考。
2024-09-20
Next.js项目run dev报错TypeError: fetch failed
文章记录了 Next.js 项目执行 npm run dev 时出现 fetch failed 报错的排查过程,原因是旧版淘宝镜像已停止服务。作者给出通过 npm 或 yarn 将 registry 切换为新的 npmmirror 镜像的解决办法,适合遇到同类网络请求失败的 Next.js 开发者参考。
2024-06-18
身份证号码校验及识别提取函数解析
文章围绕身份证号码的校验与信息提取展开,先给出校验函数,从正则格式、出生日期合理性和校验码三方面逐层判断,再通过提取函数从号码中解析籍贯、生日、性别与年龄,并附综合调用示例。适合需要在前端处理实名信息的开发者参考,同时提醒注意身份证号的保密与隐私保护。
2024-05-28
Windows连接共享打印机,无法连接0x0000011b
针对 Windows 连接共享打印机时报 0x0000011b 错误,给出的办法是在已安装打印机的电脑上修改注册表,新建相应键值并设为 0,随后重启打印后台服务或电脑即可解决。操作时务必确认是在安装了打印机的主机上进行,适合被该错误困扰的共享打印用户参考。
2024-01-11
关于PS中切片工具的简单使用介绍
这篇文章介绍 Photoshop 切片工具的基本用法,说明了切片工具的概念与作用,并给出打开工具、拖动创建切片、调整切片大小和位置,以及通过存储为 Web 所用格式导出切片、选择导出格式与质量的操作步骤。适合网页设计和图像处理的初学者阅读,文章提醒使用时要合理规划切片的大小与位置,以兼顾视觉效果和加载性能。
2023-10-31
Excel文件太大打开太慢?试试这个脚本!
这篇分享了一个用 Python 批量压缩 Excel 文件的脚本,通过 openpyxl 遍历当前目录下所有 .xlsx 文件,删除其中的空行和空列,并以「_压缩后」为后缀另存,从而减小体积、加快打开速度。文中给出了安装依赖、放置文件、命令行运行等步骤,并提醒该方法无法解决图片导致的文件过大问题,运行前需备份原始文件。
2023-09-09
丸子的C语言学习-Day1
这篇学习笔记面向 C 语言初学者,记录了使用 Visual Studio 2019 搭建开发环境、创建控制台项目并运行 Hello World 的过程,并介绍主函数、变量、标识符、关键词、字面常量和 printf 等基础语法,强调每个程序只能有一个 main 函数、变量须先声明后使用、格式符要与参数匹配。
2023-08-27
Typecho Mirages主题添加一些小功能
作者为方便复制自己博客代码,参考 LOGI 的博客,给 Typecho Mirages 主题添加了代码块复制按钮、链接预加载和评论框七彩打字动画三个小功能。相关脚本需分别加入主题头部或 body 结束前,若开启 PJAX,复制按钮还需单独添加回调。适合使用该主题的博客读者参考。
2023-01-04
解决Typecho无法显示Gravatar头像的问题
针对 Gravatar 在国内被 DNS 污染、导致 Typecho 头像无法显示或加载缓慢的问题,可通过将默认头像源替换为第三方镜像来解决。推荐修改博客根目录的配置文件来指定镜像地址,也可直接修改程序源码中的头像地址;文中列出多个可用镜像,并提到 cravatar 支持 QQ 头像。适用于受此问题困扰的 Typecho 站长。
2021-06-29
Windows 11 发布首个预览版!有内味了!
作者记录收到 Windows 11 首个预览版推送后,为满足 TPM 等升级条件,用检查工具检测并进 BIOS 调整配置,最终顺利完成更新。更新后体验流畅顺滑,与泄露版 21996.1 相比进步明显,并提醒读者对照官方最低配置确认能否升级。
2019-06-28
WIN10数字权利激活工具HWIDGen
HWIDGen 是一款 Windows 10 数字权利激活工具,无需产品密钥即可永久激活;操作时在软件右上角选择 HWID 模式并点击 START,等待提示成功即可。激活前不能关闭系统更新,否则会失败;若失败可改用 KMS38 方式,仍不行则建议重装系统。
2019-06-02
Markdown基础语法(自用)
作者为适应博客写作整理了一份 Markdown 基础语法笔记,涵盖标题、文字样式、引用、删除线、脚注、列表、表格、图片链接及行内与多行代码等常用写法,并提醒特殊符号后需加空格才能生效。适合刚开始用 Markdown 写博客的读者参考,便于快速上手。