在 Node.js 应用中使用 MySQL 时,时间戳(TIMESTAMP)字段出现的“8 小时差异”是一个经典难题。这个问题的根源并非单一因素,而是由 MySQL 自身的时区机制、mysql2 驱动的特定行为,以及一个极具迷惑性的默认配置共同造成的。
本文将澄清 MySQL TIMESTAMP 的存储与转换原理,并深入剖析 mysql2 驱动中 timezone 配置项的真正含义及其默认值'local'
所带来的陷阱,最终提供两套清晰的最佳实践方案。
在 Node.js 应用中使用 MySQL 时,时间戳(TIMESTAMP)字段出现的“8 小时差异”是一个经典难题。这个问题的根源并非单一因素,而是由 MySQL 自身的时区机制、mysql2 驱动的特定行为,以及一个极具迷惑性的默认配置共同造成的。
本文将澄清 MySQL TIMESTAMP 的存储与转换原理,并深入剖析 mysql2 驱动中 timezone 配置项的真正含义及其默认值'local'
所带来的陷阱,最终提供两套清晰的最佳实践方案。
mysql 的 boolean 类型其实是 tinyint(1)的别名,一些 ORM 工具无法识别把他识别到对应语言的 boolean 类型,日常实践有时候会选择用bit(1)
这个类型,比如java
的JOOQ
,boolean 类型会变为 java 的Byte
,而bit(1)
则是 java 的Boolean
。
但是 drizzle 的 mysql 内置类型中没有bit(1)
。你用他的drizzle-kit pull
之后会返回这个结果:
1 | // Warning: Can't parse bit(1) from database |
但是如果是已经建好的表,其他逻辑在用的话,把bit(1)
改成boolean
并不方便。
需要我们自己定义一个类型。
bit(1)
这个类型不同驱动返回不同,有些可能是作为整数,有些可能是作为 Buffer。所以扩展一下就行:
想给之前上线的工具站做个博客数据统计: blogs。
理所当然用到了document.referer
,最方便的获取上一个页面的方式,结果发现获取到的都是第一次 load 的页面,而不是导航前的那个页面。
为什么会这样?
Next.js 在生产环境中默认采用前端导航(Client-side Navigation
)的方式。这意味着页面加载完之后,在网站内部点击链接时,浏览器并不会执行一次完整的页面刷新。相反,Next.js 会在客户端通过 JavaScript 异步加载新页面的数据和组件,然后更新 DOM。
这种类似 单页应用(SPA) 的行为导致了一个关键问题:document.referrer
的值在页面首次加载后保持不变。当通过内部链接从blog/zh/1
导航到 blog/zh/post/[slug]
时,由于没有发生完整的页面重载,document.referrer
的值仍然会是最初访问网站的那个值,而不是blog/zh/1
。
最近在用 Next.js 的 RSC(React Server Component)时遇到了一个比较隐晦的问题,记录一下踩坑过程和应对方案。
如果你在项目里既使用了 CDN(并且缓存了 html),又使用了middleware
的重定向(middleware 会处理 rsc 请求),又用了 RSC 特性(开启了 prefetch 等情况),如果你发现部分页面 html 变成了一大串“乱码”(其实是 rsc 请求的返回结果),可以仔细看看。
Next.js 在请求 RSC 和 HTML 页面时,路径和方法其实是一样的,唯一的区别在于它会带上一个 _rsc
的参数和一些特定 header。
比如你访问页面 /about
:
GET /about
GET /about?_rsc=<随机字符串>
以及特定的 header这里的 _rsc
参数是 Next.js 内部用来标识“这是一次 RSC 请求”,header 里也有类似 Next-Router-State-Tree
, rsc
等用于数据请求和分割的内容。
原文出处: https://spiess.dev/blog/how-i-use-claude-code
一个月前,我订阅了 Claude Max。在此之前,我已经使用包括 Claude Code 在内的 AI 代理一段时间了,但随着统一价格的推出,我的使用量猛增,它已成为我许多任务的日常驱动力。我发现自己现在去 VS Code 的次数少了很多。
由于 AI 代理目前对每个人来说都是新事物,我想分享一些我最近注意到模式可能会很有趣。以下是我如何使用 Claude code。
如果说我希望你从这篇文章中学到一件事,那就是你应该更频繁地调用 /clear
。
AI 代理往往随着对话时间的延长而变得更不可预测。当你提出不同问题时尤其如此。我发现即使这意味着重复一些指令,创建一个新的提示通常会更有效。
一旦我开始更积极地这样做,我的结果就显著改善了。而且我绝对不是唯一一个提出这个建议的人。
想在工具站里集成一下图片编辑工具,找了一圈发现filerobot-image-editor相当不错。
按照nextjs
的官方文档来的,什么 lazy, dymanic 都用上了,还是嗝屁了,最后还是直接用 cdn js+浏览器端 js 解决不把模块引入了, 记录一下解法。
最后的效果见: Image Editor | merchmindai
在自己的测试项目里想着做登录功能,看到authjs
就接到项目里去,本身就使用的drizzle
,在不配置 db adapter 的情况下运行正常,但只要配置就会报错:
1 | ⨯ Error [TypeError]: Cannot read properties of undefined (reading 'reduce') |
无法启动
虽然自己没设备但喜欢聊 😀,和别人讨论的时候经常要反复查,查询一下汇总,有可能填错了。。。到时候发现错误再订正吧。
AMD 的没找到哪个表/文档里有算 TOPS 的…就不列了
20 系到 40 系
型号 | 架构 | 制程 (nm) | 显存大小 | 显存类型 | 显存位宽 | 显存带宽 (GB/s) | 峰值单精度 (FP32) | TOPS (AI) | TDP (W) |
---|---|---|---|---|---|---|---|---|---|
RTX 2080 Ti | Turing | 12 | 11GB | GDDR6 | 352-bit | 616 | 13.45 TFLOPS | 114 TOPS | 260 |
RTX 2080 Super | Turing | 12 | 8GB | GDDR6 | 256-bit | 496 | 11.15 TFLOPS | 89 TOPS | 250 |
RTX 2080 | Turing | 12 | 8GB | GDDR6 | 256-bit | 448 | 10.07 TFLOPS | 81 TOPS | 225 |
RTX 2070 Super | Turing | 12 | 8GB | GDDR6 | 256-bit | 448 | 9.06 TFLOPS | 72 TOPS | 215 |
RTX 2070 | Turing | 12 | 8GB | GDDR6 | 256-bit | 448 | 7.47 TFLOPS | 65 TOPS | 175 |
RTX 2060 Super | Turing | 12 | 8GB | GDDR6 | 256-bit | 448 | 7.19 TFLOPS | 57 TOPS | 175 |
RTX 2060 | Turing | 12 | 6GB | GDDR6 | 192-bit | 336 | 6.45 TFLOPS | 52 TOPS | 160 |
jina 出了 ReaderLM v2 版本,这个版本的 ReaderLM 在处理文本数据时更加高效和准确。
之前简单测试了下 v1, 结论是:
第一眼就是不可用就没继续了。
这次 v2 来了,测试了一下,幻觉问题好了很多,无限生成测试了几个也没遇到,但最为一个 html 转 markdown 的工具还是不够稳定。
这里的稳定性主要是指,与传统的基于语法树解析的工具相比,它在处理速度和结构识别的准确性上还有差距。他的确能生成不错的 markdown,但是很容易被正确结构但是内容文本里有特殊构造的/或者有一些语法错误的 html 页面所影响。
注意:这个博客里的测试只是为了列出 v2 的一些问题,针对问题进行特殊构造的测试,实际网页可能也遇不到文中提到的问题,具体以实际场景为准了。
顺道一提,这个模型是以 CC 协议发布的,所以商用场景需要遵守相关协议。