Hacker News 中文摘要

RSS订阅

被诅咒的知识 -- Cursed Knowledge

文章摘要

在开发Immich过程中,团队遇到了一系列令人头疼的技术问题,包括Zitadel的脚本引擎不支持正则表达式命名捕获组、Microsoft Entra的OpenID发现文档未包含PKCE支持、EXIF元数据中的图像尺寸与实际不符、YAML空格处理不直观、Windows隐藏文件无法以“w”标志打开、Git自动转换LF为CRLF导致bash脚本中断、Cloudflare Workers中Fetch请求默认使用http而非https,以及某些手机应用在分享图片时静默删除GPS数据。这些问题给开发带来了诸多困扰。

文章总结

标题:诅咒的知识 | Immich

在构建Immich的过程中,我们学到了一些令人头疼的知识,这些知识我们宁愿从未知晓。

  • 2025年6月4日
    Zitadel的Actions功能令人困扰,因为其自定义脚本功能使用的JS引擎不支持正则表达式的命名捕获组。

  • 2025年5月30日
    Microsoft Entra虽然支持PKCE,但并未在其OpenID发现文档中包含这一信息,导致客户端误以为PKCE不可用。

  • 2025年5月5日
    EXIF元数据中的图像尺寸可能与实际尺寸不符,导致裁剪和调整大小时出现问题。

  • 2025年4月1日
    YAML中的空格处理方式常常不符合直觉,容易引发问题。

  • 2024年9月20日
    Windows中的隐藏文件无法使用“w”标志打开,结合SMB选项“隐藏点文件”,常常引发混淆。

  • 2024年8月7日
    Git可以配置为在检出时自动将LF转换为CRLF,而CRLF会破坏bash脚本。

  • 2024年8月7日
    在Cloudflare Workers中,Fetch请求默认使用http,即使明确指定https,也常常导致重定向循环。

  • 2024年7月21日
    某些手机会在应用没有位置权限时,静默地从图像中删除GPS数据。

  • 2024年7月3日
    PostgreSQL的NOTIFY功能在事务中执行,这意味着使用socket.io的postgres-adapter每5秒就会写入一次WAL。

  • 2024年7月3日
    npm脚本每次运行时都会向npm注册表发起http调用,因此不适合用于执行健康检查。

  • 2024年6月28日
    JavaScript社区中有一位用户,经常通过添加50个额外的包依赖来为项目提供“向后兼容性”,而这些包由他本人维护。

  • 2024年6月25日
    bcrypt实现仅使用字符串的前72个字节,之后的字符会被忽略。

  • 2024年1月31日
    JavaScript的Date对象中,年份和日期从1开始索引,而月份从0开始索引。

  • 2024年1月9日
    在Node.js v20.8之前,在CommonJS项目中使用--experimental-vm-modules导入ES模块,再导入CommonJS模块会导致段错误并使Node.js崩溃。

  • 2023年12月28日
    PostgreSQL的参数限制为65,535个,因此在大数据集上进行批量插入时可能会失败。

  • 2023年6月26日
    某些Web功能(如剪贴板API)仅在“安全上下文”(即https或localhost)中有效。

  • 2023年2月23日
    TypeORM的remove实现会修改输入对象,删除原始对象的id属性。

这些“诅咒”的知识在开发过程中给我们带来了不少麻烦,希望这些经验能帮助其他开发者避免类似的陷阱。

评论总结

  1. 关于额外软件包的浪费

    • 观点:作者认为某些软件包的下载量巨大,浪费了带宽和磁盘空间,质疑其动机。
    • 引用:
      • "The author of those packages has racked up a fuckload of downloads. What a waste of total bandwidth and disk space everywhere."
      • "I wonder if it's for clout."
  2. 关于手机隐私保护

    • 观点:某些手机会在没有位置权限的情况下自动删除图片的GPS数据,认为这是一种保护机制。
    • 引用:
      • "Some phones will silently strip GPS data from images when apps without location permission try to access them."
      • "That's no curse, it's a protection hex!"
  3. 关于Cloudflare问题

    • 观点:对Cloudflare的fetch问题表示失望。
    • 引用:
      • "Disappointing to hear about the Cloudflare fetch issue."
  4. 关于日期格式的争议

    • 观点:对dd/mm/yyyy和mm/dd/yyyy日期格式的争议,认为其中一种格式可能存在问题。
    • 引用:
      • "dd/mm/yyyy date formats are cursed...."
      • "Perhaps it is mm/dd/yyyy (really?!?) that is cursed...."
  5. 关于项目日志的积极意义

    • 观点:认为项目日志不仅具有宣泄作用,还能将问题转化为学习经验,建议所有项目都应采用类似机制。
    • 引用:
      • "The log is not just cathartic, but turns each frustrating speedbump into a positive learning experience."
      • "By making it public, it becomes both a tool for both commiseration and prevention."
  6. 关于npm脚本的健康检查问题

    • 观点:质疑npm脚本在每次运行时都会调用npm注册表的行为,认为这是不合理的。
    • 引用:
      • "npm scripts make a http call to the npm registry each time they run, which means they are a terrible way to execute a health check."
      • "That would be insane behavior for a package manager."
  7. 关于操作系统和软件的隐藏文件与遥测问题

    • 观点:指出Windows和macOS的隐藏文件机制以及许多软件的遥测功能,认为这些设计增加了不必要的复杂性。
    • 引用:
      • "Windows' NTFS Alternate Data Streams (ADS) allows hiding an unlimited number of files in already existing files."
      • "Everything with opt-out telemetry: go, yarn, meilisearch, homebrew, vcpkg, dotnet, Windows, VS Code, Claude Code, macOS, Docker, Splunk, OpenShift, Firefox, Chrome, flutter, and zillions of other corporate abominations."