日常技术碎碎念
128 subscribers
23 photos
1 video
57 links
懂点前端,懂点后端,大言不惭地分享一点互联网技术发现与见解。
Download Telegram
https://www.jetbrains.com/idea/whatsnew/

Jetbrains 全家桶 2022.2 发了,更新了一下 Goland,新功能乏善可陈,本期最大的更新应该是 runtime 从 jre11 切换到 jre17 了,得益于使用了 macOS Metal API,体感上确实流畅了一点。
https://hnpredictions.github.io/

通过爬虫抓取了 hacker news 上所有 prediction 发言。算是某种意义上的“自动挖坟”。得益于 HN 的高质量用户群体,看看几年前用户对科技政治经济的预测,还是蛮有意思的。
https://medium.com/vanguards-of-code/lodash-is-dead-long-live-radash-d9d52abf428b

radash - 取代 lodash 的工具函数库

看起来比 lodash 的代码质量更好更精简。由于使用 TypeScript 编写,相比 lodash 类型校验也更加完善。另外还加了一些基于 async-await 的工具函数。感觉不错。

https://github.com/rayepps/radash
最近一个体会是个人玩票项目 side project,尽量用一两个简单的工具完成核心功能就好了。千万不要引入一堆组件、工具链、外部依赖去达成一些炫酷的能力,产品为技术让一下步,鬼知道三个月后还能不能跑起来。
Cloudflare 发布消息队列内测

从Worker开始,Cloudflare为帮助开发者构建大型、可靠的应用程序,不断开发所需基础设施,当遇到不需要立即获得结果,但并发量又需要进行控制时,差不多就需要消息队列上场了

限制
队列个数 10个/每账号
消息大小 ≤128KB
消息重试次数 ≤100次
批量提交消息数 ≤100条
批处理等待时间 ≤30秒
消息吞吐量 ≤100条/每秒
*Cloudflare Queues 与Cloudflare Workers集成,收发消息目前必须使用 Worker,后续将支持其它API接口
*部分限制可能会在后续测试调整、放宽或取消

定价
按每月总操作次数收费;每写入、读取或删除 64 KB 的数据,就计为一次操作,没有带宽流量费用
每月前一百万次操作免费,后续每百万次操作 0.4$
完整传递一条消息需要 3 次操作:1 次写入、1 次读取和 1 次删除
月账单估算公式为:
(消息总数-1000000)*3*/1000000*0.4$
*在内测期间试用免费 >>申请内测

🗂文档
Cloudflare Queues

Cloudflare Queues: globally distributed queues without the egress fees
#消息队列
Via @Cloudflare_CN
https://vercel.com/changelog/improved-monorepo-support-with-increased-projects-per-repository

Vercel 把 pro 用户的单 repo 可绑定的 project 数量从 10 提升到 60,可以支持一个中型 monorepo 了
日常技术碎碎念
无意当中看到这个 issue。当我们使用 Notion 作为 CMS 搭建网站的时候,绕不开 Notion 的 S3 图片链接会过期的问题。因为图片会过期,静态生成的网页常常会加载不出图片。哪怕现在去看 Railway blog 依然可以发现有些图片加载不出来。 最简单的避免这个问题方法就是不要将图片 host 在 Notion 上,而是使用外链塞到 Notion 当中,但是比较麻烦,需要先上传图床再做插入。 Issue 帖主选择放弃 SSG,使用 SSR 渲染,可以保证每次下发的图片链接都是最新的,这肯定会导致网页加载慢(不能套…
最近实现了一个更加优雅的方案,就是将所有网页上面的 notion block (img/video/...)的 src 指向 /api/resource/{block-id} ,这个接口每次被请求的时候都会请求 Notion API 去获取最新的 S3 链接,最后返回客户端 HTTP 307 重定向到资源地址,并使用 Cache-Control 保证最近一段时间内都不需要重新获取。

这样一来,每一次浏览器都能跳转到未过期的资源链接,就不再需要任何外部 cronjob 去主动触发刷新了。
正儿八经地用 Github Codespaces 写了一段时间的代码,把本地开发环境用 Github Dotfiles 配置了一遍。

不得不说体验非常不好,期间无数次压住 clone 代码到本地直接用 IDE 打开的念头。

一方面我非常不习惯使用 VSCode 开发,即便是 VSC 强项前端开发,我也觉得是不如 Goland 智能响应快的。其实也试过通过 Goland 直接 SSH 到 Codespaces 开发,但这就有点脱裤子放屁了。

另一方面是网络不够稳定。虽然大多数时候是稳定的,但一旦碰到连接中断,可能会发现本地变更代码压根没法 commit,刷新一下网页,代码可能直接丢了。开发的时候无时无刻都会焦虑网络问题。

也好,彻底打消了购入 iPad Pro 念头。
https://vercel.com/analytics

Vercel 收购了 Splitbee,把访客分析集成到了自家的 Analytics。对于个人项目来说也不需要专门去引入 Google Analytics 了。

一直想试试看 Splitbee,喜欢它的产品调性,现在省事了。
最近需要在数据库存储一批复杂的配置文件,需要原子化更新配置的内部字段的能力。一开始打算用 MySQL,有两个方案:

1. 整个数据结构序列化后塞在一行的一个字段里面。更新的时候在开事务(上行锁)整个读出来更新好写回去。
2. 根据数据结构,老老实实建模,各种 list 表,relation 表,每一个字段都是一列……多数情况下不需要用事务就能单独更新内部字段。

前者省事,但是不优雅;后者足够教条,但太麻烦了。

最后,还是换成了用 MongoDB,整个配置作为 document 写到库里,想怎么原子更新子字段就 怎么更新。虽然 MongoDB 更新文档本质上也是单行事务,但局部更新的语义支持确实比 MySQL 优雅。
https://github.com/topgrade-rs/topgrade

一条命令更新各种包管理中的包,包括 homebrew/zsh插件/pip/npm/docker镜像等等,不更新会死星人感到舒适。
最新 Next.js13 appdir文档 中, Vercel 引入 Comments 组件,只需要登录 Vercel,就能在页面的任意位置评论。非常像 Figma 的评论系统,只不过把画布换成了网页。

Vercel 也将这个能力开发给了 Vercel 用户,所有 Preview Deployment(非主分支)可以直接开启。默认情况下,只有当前 Deployment 所属组织的成员才能评论,也可以开放权限到任意用户。

一旦发生评论,Vercel 会将评论同步到对应分支的 PR 下面,可以很自然地融入开发流程。

做一个这种模式 Disqus 服务,似乎非常有意思?
最近体验 railway.app ,试着部署了些服务,说一些感受:

⁃ 类似 Heroku,服务实例不会被销毁,不会出现冷启动的问题。

⁃ 计费是按照 CPU 和内存用量+耗时来计算,每个月消费低于 $5 不收费。

⁃ 不启用付费计划(绑定信用卡)的话,每个月也有 $5 的额度,但是会限制实例每月总在线时长 500 小时(21 天),也就是说想长期部署服务必须启用付费计划。

⁃ 可以部署数据库 (PG、MySQL、Redis、MongoDB),还支持在前端访问和操作数据库。不过目前没有看到数据库扩容、备份等功能,感觉就是单纯的提供一个数据库容器实例,不适合用于生产。

⁃ Railway 当中有 Project 的概念,一个 Project 可以有多套环境、部署多个服务/数据库,很像 K8S 的 Namespace,适合用来做业务隔离。

⁃ 会自动识别项目中的 Dockerfile 构建镜像部署,构建速度也比较快。

⁃ 和 Vercel 一样,不支持 VPC,也就是说如果做服务间调用,服务只能通过公网域名来互相访问,比较不安全。不过这个功能在 roadmap 中已经是 WIP 状态,可期。

⁃ 不保留历史日志,需要依赖像 logtail 这类外部日志服务做日志存储。

⁃ 不支持 cronjob,文档里给的解决方案是起一个实例自己调度……

总的来说,对于个人开发来说,Railway 体验还可以。但毕竟是一家只有两年的创业公司,平台功能和文档建设还是不够完善。
BFF 这个概念,宣传上要接管各种仅为前端服务的脏活累活,让业务服务专注运行逻辑。但是实践上 BFF 层又推崇尽可能薄。

往往会能看到两个极端。业务服务定义了一堆专为前端服务的 RPC 接口,BFF 沦为 API Gateway。或者是 BFF 包含了非常重的业务逻辑,业务服务沦为 CRUD 执行器。
#Copilot 黑产真是无处不在......
停更几年的 Wikipedia 增强插件 Wikiwand 最近 更新了2.0版本 。除了更现代化的 UI 设计,还增加一个基于 GPT-3 的 TLDR 模式,假设读者是儿童来让 AI 总结词条。用了几周,刷Wikipedia堪称享受了。
日常技术碎碎念
最近体验 railway.app ,试着部署了些服务,说一些感受: ⁃ 类似 Heroku,服务实例不会被销毁,不会出现冷启动的问题。 ⁃ 计费是按照 CPU 和内存用量+耗时来计算,每个月消费低于 $5 不收费。 ⁃ 不启用付费计划(绑定信用卡)的话,每个月也有 $5 的额度,但是会限制实例每月总在线时长 500 小时(21 天),也就是说想长期部署服务必须启用付费计划。 ⁃ 可以部署数据库 (PG、MySQL、Redis、MongoDB),还支持在前端访问和操作数据库。不过目前没有看到数据库扩…
前几天对信用卡账单的时候,惊讶地发现上个月 MongoDB Atlas 托管数据库扣了将近 200 刀。可能是因为上个月部署了些 cronjob,对数据库用量比较大。但几个小服务产生这么高的消费还是不能接受的。

想着 MongoDB Atlas 是用不起了。但暂时找不到 MongoDB 托管的替代品,试着在 Railway 上起了台 MongoDB 托管实例。把老数据 dump 过去并重启了所有相关服务,完成迁移也就十分钟。

刚看了一眼 Railway 的 Usage 统计,根据每分钟的 CPU/MEM 的平均用量,预估了当月费用,一个月不超过 5 刀 🫠 (比根据读写次数计费划算多了)。

不过如之前所说,Railway 对数据库的可用性没有强的保证,也没有显式的数据备份解决方案。打算先用 Github Action 写个定时 dump 数据库保存到 S3 的脚本,临时先用着。