20263 篇

折腾

猛蹬三天,我做了四个菜单栏 App,然后账号被封了

同事陆续被封号,我把两周额度、赠送额度和一次周额度重置用到了极致。国庆三天疯狂推进四个 Mac App,修了很多问题,也留下很多问题。以为自己是天选之人时,账号突然被封了。

11 分钟
折腾

博客又改了:这次连服务器都不要了

上次大改才过去两周,这回干脆把 Go 后端整个删了:博客变成纯静态的页面应用,托管在 GitHub Pages 上,外观换成了冷色调的玻璃质感,每篇文章还多了一张按内容画出来的封面。

3 分钟
折腾

给博客做了一轮大改:多端、离线、服务端渲染和一堆小东西

周末 Claude 的额度有富余,就拿来收拾许久没更新的博客。结果先发现 robots.txt 一直在拒绝所有搜索引擎,索性从前端到后台整个翻修了一遍:去掉 Bootstrap 和 jQuery 重做多端适配,Markdown 改成服务端直出,加上离线阅读、即时搜索、草稿和标签管理。最后聊了聊这轮里 Claude 帮上了什么、在哪儿翻了车,以及一点对未来的憧憬和不安。

6 分钟 151

20254 篇

技术

一致性事务:从 2PC 到 Outbox pattern

如果你做过一点微服务开发,大概率都遇到过这种场景: 用户下单 → 扣库存 → 扣余额 → 更新积分。 这听上去很简单,按顺序写几行逻辑就好,但问题是——这些操作分散在不同的服务、不同的数据库里。 于是问题来了: 如果中间有一步失败了,整个流程该怎么办? - 订单创建了,但库存没扣? - 库存扣了,但支付失败? - 消息没发出去,用户看不到状态? 这就是经典的分布式事务一致性问题。

15 分钟 1.8k
技术

鸿蒙 OS 的签名密钥机制,我终于整明白了!

在做移动应用开发时,不管是 Android 还是 iOS,我们都绕不开“签名”这件事。最近我们项目在筹备适配 HarmonyOS NEXT(鸿蒙 Next) 的 SDK,也顺势把鸿蒙的签名机制研究了一遍。这篇文章来分享下。

5 分钟 2.5k
技术

数据库分表实践:如何优雅地切换到分表架构

在我们的后端架构中,我们采用了以游戏为租户单位的多租户数据库设计。所有游戏共享同一套数据库 schema,每张表通过 game_id 字段进行逻辑隔离。这种设计在初期带来了显著的开发与维护效率,支持我们快速迭代、快速上线多个游戏项目。 然而,随着接入的游戏数量增加、业务数据持续增长,这种“共享单表”的设计逐渐暴露出一些架构层面的瓶颈与隐患。

9 分钟 2.1k
生活和思考

“该省省,该花花”

春节假期,我终于完成了两件大事:见了未来的岳父岳母,还带奶奶游览了北京。忙里偷闲,我决定总结一下这几天的经历,顺便分享一些“花钱”与“省钱”的小感悟。

4 分钟 3.6k

20246 篇

技术

Golang 中的 EOF 与 read: connection reset by peer 错误深度剖析

在 Golang 网络请求中,我们经常会遇到两种常见的错误:`EOF` 和 `read: connection reset by peer`。这两个错误虽然看似相似,但实际上有着本质的区别。这篇文章将深入探讨这两种错误的原因、区别以及如何优雅的处理它们。

8 分钟 4.6k
技术

为什么你应该在代码中消除 "context deadline exceeded" 错误

在 Go 语言中,context 包提供了一种跨 API 和进程边界传递请求作用域值、取消信号以及超时信号的方式。使用 context 可以帮助我们更好地控制 goroutine,避免 goroutine 泄漏等问题。出现 "context deadline exceeded" 错误通常是因为在请求上下文中设置了超时时间,但请求在超时时间内未完成。我们应该尽量避免这种错误...

3 分钟 5.5k
技术

死锁日记:手写 GoLang 上报队列

我们团队负责的防沉迷上报服务突然在某一天遭遇了内存溢出(OOM)的情况。通过查看 Prometheus 监控数据,我们发现 Goroutines 的数量在中午十二点之后呈现出线性增长趋势,直至晚上十点 OOM 发生,Goroutines 数量骤降为零。

14 分钟 4.1k
技术

gorm 中 MySQL 错误码映射与主键冲突错误处理

在使用 gorm 处理数据库操作时,尤其是针对 MySQL,有时我们会遇到 golang 标准库`errors.Is`函数无法直接识别特定的 gorm 错误类型的情况,如主键冲突错误。尽管 gorm 提供了`gorm.ErrDuplicatedKey`来表示此类错误,但在原始错误返回中并不能直接通过`errors.Is(err, gorm.ErrDuplicatedKey)`来进行判断。本文深入探究 gorm.io/driver/mysql 包中的错误转换机制,揭示了如何借助`error_translator`模块将 MySQL 的错误码映射为 gorm 的错误类型。

4 分钟 5.1k
折腾

CloudFlare Tunnel 免费内网穿透的简明教程

Tunnel 可以做什么? 将本地网络的服务暴露到公网,可以理解为内网穿透。 将非常规端口服务转发到 80/443 常规端口。 自动为你的域名提供 HTTPS 认证。 为你的服务提供额外保护认证。 跳过国内服务器备案域名。 最重要的是——免费。

6 分钟 7.2k
生活和思考

2023 年购物回忆录:值不值得买

2023年,对我来说是充满购物冒险的一年,我购买了很多东西,今天,我想回顾一下,分享哪些购买对我来说物超所值,哪些则是我冲动消费的产物,让我感到后悔。让我们开始这段回忆旅程吧~??️

4 分钟 5.7k

202329 篇

技术

探索服务端通信技术:短轮询、WebSocket、SSE 与长轮询的深度比较

在现代 Web 应用中,服务端与客户端之间的高效通信至关重要。本文探讨了四种主流的服务端通信方法:短轮询、WebSocket、SSE(Server-Sent Events)和长轮询,分析它们的工作原理、适用场景及优缺点。

6 分钟 6.6k
技术

API 设计中的多类型属性选择:OpenAPI 与 gRPC 的 oneof 与强类型对比

在谈论 API 设计和开发时,有时,一个属性可以是多种类型中的一个,但不能同时是多种类型。比如支付接口的回调处理,常常为了兼容不同平台的参数,会使用以下方式中的一种来进行接收,在程序开发中,我们往往会采用主流的 HTTP 协议和 gRPC 协议进行通信,两种技术都为开发者提供了强大的工具来描述、验证和生成 API,但它们的方法和原则有所不同。

2 分钟 6.2k
技术

团队开发中对于代码仓库和镜像管理的标准统一

随着现代软件开发的持续迭代,团队间的协作变得越来越重要。为了确保整个团队在编码、构建和部署过程中的效率和质量,引入一些特定的配置文件和标准工作流程显得尤为关键。以下就是一些在团队开发中常见而又重要的文件,我总结了它们的一些作用和优点。

2 分钟 5.5k
生活和思考

我的自行车

在今年7月份左右,我开始关注自行车,出于便携性而言,我更倾向于购买一辆折叠车,之前在大街上也看到了很多骑得超快的折叠车,所以我对于折叠车的竞速性能也是满意的,于是我开始看各种折叠车的测评和论坛~

4 分钟 5.4k
折腾

使用 rclone 命令行管理 Cloudflare R2 对象存储

Cloudflare R2 是一款高性能、低成本的对象存储服务。之前在使用 OSS 的时候,用惯了 OSS brewer, 在用 R2 时候发现,开始没有找到合适的 brewer 工具,而网页端上传会限制文件数量和大小,就尝试用命令行的 client 了哈哈, 使用之后发现,确实好用,相比使用网页管理对象存储,利用命令行工具可以大大提高管理效率,特别适合需要批量操作或脚本化的场景。

3 分钟 7.0k
技术

GORM 中 SQL、慢 SQL 打印日志传递 trace ID

GORM 中SQL、慢SQL打印日志传递 trace ID, 重写GORM日志实现,SQL日志、慢日志请求追踪

3 分钟 5.8k
折腾

更换博客图床,从 OSS 到 GitHub 再到 R2

写博客一个很重要的东西就是图床, 如果没有一个合适的图床来安全稳定地存储数据,指不定哪天,你的文章就到处都是 ![真的找不到了.png](https://pic.whrss.com/1690960055739.png) 而对于一个曾经被ban过号,崩过盘(硬盘)的人来说,分外敏感。如果你的图片存储在任何一个带监管的平台,你的账号很可能由于一些不可抗力资源牵连,内容全部404。 于是我对自己的博客相关的资源都进行了“安全”的部署,图片资源这块儿一年多来,我一直使用的是github做图床的,但是github有几个问题...

2 分钟 6.7k
技术

如何在 Go 中实现程序的优雅退出,go-kratos 源码解析

使用kratos这个框架有近一年了,最近了解了一下kratos关于程序优雅退出的具体实现。

5 分钟 7.1k
技术

os.signal golang 中的信号处理

在程序进行重启等操作时,我们需要让程序完成一些重要的任务之后,优雅地退出,Golang为我们提供了signal包,实现信号处理机制,允许Go 程序与传入的信号进行交互。

3 分钟 5.9k
趣发现

探索 PlanetScale:划分分支的 MySQL Serverless 平台

最近我发现了一个非常有趣的国外MySQL Serverless平台,它叫做PlanetScale。这个平台不仅仅是一个数据库,它能像代码一样轻松地创建开发和测试环境。你可以从主库中拉出一个与之完全相同结构的development或staging数据库,并在这个环境中进行开发和测试。所有的数据都是隔离的,不会相互干扰。 当你完成开发后,你可以创建一个deploy request,PlanetScale会自动比对并生成Schema diff,然后你可以仔细审查需要部署的内容。确认没问题,你就可以将这些变更部署到线上库中。整个部署过程不会导致停机时间,非常方便。

3 分钟 4.9k
折腾

优化你的RSS订阅:一次全面改进的实践

先前,我的 RSS 订阅功能过于简化,只提供了几个基本字段,而且不展示全文。我决定对订阅功能做一次全面的改进。

5 分钟 4.6k
生活和思考

最近在做的事:GitHub Action | GPT Plus | whisper | V2EX | GPT API | PMP

运动数据使用GitHub Action自动更新| 开通体验了一下GPT Plus | 买了一支录音笔,全天候录音,使用 whisper 录音转文字 |终于注册了 V2EX |GPT API续费问题曲线救国|报名了PMP的培训班和考试

2 分钟 3.8k
生活和思考

一个游戏开发者的自我介绍

职业道路上的新旅程:一个游戏开发者的自我介绍

2 分钟 4.2k
折腾

使用GitHub Action 同步运动数据并生成热力图

如果你想把你的运动数据和热力图同步到 GitHub,那么你来对地方了。在这篇文章中,我将详细解释如何使用 GitHub Actions 和 Python 自动同步和更新你的数据。 这个项目是在伊洪@yihong0618的GitHubPoster的基础上进行的所以在此表示感谢。他的另一个项目是IBeat (之前我对GitHub Action做了一次尝试),从这里我开始接触了快捷指令的触发。

9 分钟 3.7k
技术

【Gorm】Save 方法更新踩坑记录

在我最近使用Gorm进行字段更新的过程中,我遇到了一个问题。当我尝试更新status字段时,即使该字段的值没有发生变化,Gorm还是提示我“Duplicate entry 'xxxx' for key 'PRIMARY'”。

6 分钟 6.3k
技术

一次线上异常的追踪与处理

5月31日晚,我们接到游戏玩家反馈,经常出现请求超时的提示。在我亲自登录游戏验证后,也出现了相同的错误,但游戏仍然可以正常运行,数据也没有任何问题。 经过客户端的错误检查,我们发现请求出现了`408 Request Timeout`的错误。该响应状态码意味着服务器打算关闭没有在使用的连接,即使客户端没有发送任何请求,一些服务器仍会在空闲连接上发送此信息。服务器决定关闭连接,而不是继续等待。

7 分钟 3.3k
技术

Go 单元测试高效实践

敏捷开发中有一个广为人知的开发方法就是 XP(极限编程),XP 提倡测试先行,为了将以后出现 bug 的几率降到最低,这一点与近些年流行的 TDD(测试驱动开发)有异曲同工之处。 在最开始做编程时,我总是忽略单元测试在代码中的作用,觉得编写单元测试的功夫都赶上甚至超越业务程序了。到后来,业务量越来越复杂,慢慢地,浮现一个问题,就是系统对于测试人员是一个黑盒,简单的测试无法保证系统所设计的东西都可以测试到。

10 分钟 3.9k
趣发现

一个有趣且实用的开源项目,将网页打包成应用

最近在GitHub上面发现了一个[很有趣的开源应用](https://github.com/tw93/Pake),可以将网页打包成应用 底层使用了rust进行开发,支持 Mac、Windows 和 Linux。使用命令将网站直接打包成PC应用。

2 分钟 3.9k
技术

GitHub Action 自动化部署简单尝试

之前看到很多大佬的 Blog 是部署在 Github 上面的,但因为自己目前的博客是带后端的,所以就没有考虑。很久之前看到 @yihong 的心跳和跑步,感觉挺不错的,但因为自己没有跑步的习惯,就感觉不是很感冒 ???? 直到最近在听零机一动的时候,又听到了 yihong 的跑步, 我突然想到,我应该也可以把我的游泳 骑车 有氧也像 @yihong 的跑步数据一样上传过来。那么第一件事,我需要了解一下 GitHub Action 的机制,小小地尝试一下。

4 分钟 3.4k
折腾

从零开始搭建家庭软路由系统(安装OpenWrt,并做为旁路由接入家庭网络)

之前刷推看到了不少人发软路由,最近又看到a姐发了一句:全推入手软路由了 开始我还觉得软路由对我的作用应该不大吧,随着从众心理的影响,我觉得我应该试试。 刚好我还有从笔记本上拆下的内存和固态,岂不是严丝合缝?

5 分钟 1.5 万
折腾

Clash 设置国内国外自动分流访问

Clash 是一款开源的网络代理工具,可以帮助用户实现对网络流量的控制和管理。我使用了很久,但苦于每次访问国内外网络需要手动开关代理,于是我就问了下GPT, 还真就解决了。

3 分钟 1.6 万
技术

将本地服务通过 SSH 代理给外部访问

如何使用 ssh 将本地服务代理给外部访问并保持 SSH 会话的连接性

2 分钟 2.5k
生活和思考

惊喜又焦虑,AI 技术的发展

最近,我接触了很多关于AI技术的东西。例如ChatGPT、NewBing、ChatGPT更快的API、stable diffusion、AI语音识别等等。这些技术让我惊喜,也让我感到焦虑。

2 分钟 2.3k
趣发现

体验 New Bing:一个比 ChatGPT 更强大、更幽默、更有用的搜索引擎聊天机器人

最近在推特上看到很多人在谈论New Bing申请的事情,我也收到了试用通过的邮件。于是我马上打开Edge浏览器体验了一下。

3 分钟 2.8k
技术

Interesting & Useful 的开源项目

分享一些平时遇到的有趣的开源项目

2 分钟 2.0k
技术

聊天记录存储实践

公司的某款游戏在1月初接入微软小冰AI聊天功能。为了保存聊天记录并为后续的统计功能做好准备,决定将聊天记录存放在服务端。

3 分钟 2.2k
技术

在 Google 设置静态页面 CDN 加速

在google设置静态页面 CDN加速

1 分钟 2.0k
生活和思考

发现优质 Newsletter 和 Blog

我平时一直都在发现很多优质的资源,但都没有整理。一直增加,单独一个页面可能开始会有些乱,就先开一篇放在这里。

3 分钟 2.1k
技术

Nginx 代理静态网站 CSS 解析异常

今天在使用ecs进行部署网页时,出现了一个问题。使用nginx代理到页面index.html路径下,同路径的资源都可以加载到,但是却无法正确加载到页面样式。打开f12,网络和控制台都没有资源异常,但页面乱成了一锅粥。 本地打开是正常的,上到服务器却不行?

1 分钟 1.9k

20225 篇

技术

macOS 12 Monterey + Windows11 我的生产力答案

大学毕业以后,买了一台乞丐版的13寸的macbook pro(8 + 128 这个配置可能还不如现在的安卓手机),今年年中,我开始把工作用的macbook pro(18款 15寸 16 + 256)往家里带,勉强够用。到了今年下半年,我渐渐感觉,这俩电脑,一个能打的都没有,真顶不住了。

4 分钟 2.1k
技术

最新版 Let’s Encrypt 免费证书申请步骤,保姆级教程

最近将域名迁到了google domain,就研究了一下Let’s Encrypt的域名证书配置。发现网上找到的教程在官方说明中已经废弃,所以自己写一个流程记录一下。

7 分钟 2.2k
生活和思考

五人墓碑记

五人墓碑记 明 张溥  卒以吾辈之发愤一击,不敢复有株治。

2 分钟 1.8k
生活和思考

随想—生活效能

效能,效就是结果,能就是取效所做的功。

2 分钟 2.0k
技术

测试一下功能吧

阿里服务器被ban了,数据全没了

1 分钟 1.8k