avatar
steve lee
Ruby - Job scheduling lock with Redis
Introduction In a Rails app, sometimes you need to execute a long-running job and have to run it in the background. You might run into some special requirements to avoid duplicate jobs Problem 1 You must delete the user and all related data in CleanupDataJob job. It will take a long time, and to avoid some problems, such as database-locking, you need to keep only one user deleted at a time. Problem 2 You have the ProductSalesJob to fetch the sales data of the product and calculate some numbers. What if you had 100 of these jobs? Your…
avatar
咕咕乔
Clewdr 部署到 huggingface space
简介 Clewdr 是一个 claude 的逆向 api 项目。拥有前端可以直接添加 cookie 和修改设置 开始 创建空间 前往 https://hf.space 点击右侧的 New space 创建一个空间 填写详情页 上传 Dockerfile 下载 Dockerfile.huggingface 手动重命名为Dockerfile并上传 状态为 Running 后打开日志 LLM API Password 为请求 API 的密码 Web Admin Password 为前端管理密码 前端地址 复制你的项目名 它应该是这样的:3v4pyve7/clewdr2 现在将/改成-后面加上 .hf.space 拼接后就可以直接访问了 https://3v4pyve7-clewdr2.hf…
avatar
Rei
用 Hotwire Turbo 实现常驻侧边栏
最近用 Hotwire Turbo 改进了 Geeknote 的首页,减少了重复查询和渲染,想分享一下过程。 问题 Geeknote 的首页有个侧栏区域,区域内展示了一些次要内容,有热门标签、推荐用户,和社区统计等,未来还可能加一些广告代码或友情链接。 问题在于,这个区域的内容并不重要,但是需要的查询并不少。热门标签需要对近期标签使用进行统计排序,推荐用户需要关联当前用户是否关注,社区统计比较简单只是对几个表的总计数。在用户切换 Tab…
avatar
busylog
Mojibake problems
utf8 gbk 3bytes to 2bytes confusion. the classic example is EF BF BD -> 锟斤拷 (but sadly not decodeable). if you found the first character in the following table, decode utf8 and encode gbk. import sys for i in range(0xe0a0, 0xefbf + 1): if i >= 0xeda0 and i <= 0xedbf: continue if i & 0xf0c0 == 0xe080: sys.stdout.buffer.write(bytes([i // 256, i % 256])) if (i + 1) // 256 != i // 256: sys.stdout.buffer.write(b'\n') 酄唷啖啵啶啷唳唰啜喋嗒喃喱喹…
avatar
Rei
我的 kamal 生产环境配置
Kamal 是 Basecamp 开源的一款部署工具,它的工作模式类似 Capistrano,但使用 docker 解决依赖封装。它原始设计用于 Rails 应用,由于使用了 docker,只要应用可以 docker 化也能使用 kamal 部署。 Kamal 的使用率在 Rails 社区越来越高,问题也随之出现:Build 的过程遇到网络问题怎么办?Secret 应该存在哪里?怎么配置 CI/CD? 这些问题我在实践中也解决过,在此分享我的解决方案。方案不是唯一的,有其他方案欢迎在评论区留言。 本文假设你已经读过 Kamal 官方…
avatar
busylog
WoA on qemu (2025 ver)
prepare for macvtap. the default 52:54:00:12:34:56 mac address is unchanged and the windows instance would be activated by others' license. sudo ip link add link eth0 name macvtap0 type macvtap mode bridge ||: sudo sysctl -w net.ipv6.conf.macvtap0.autoconf=0 sudo sysctl -w net.ipv6.conf.macvtap0.disable_ipv6=1 sudo ip link set macvtap0 allmulticast on address 52:54:00:12:34:56 up ||: TAP=tap$(cat /sys/class/net/macvtap0/ifindex) sudo chown USER /dev/$TAP optional: share the sd card as virtio-blk (the user needs to be in group disk, and…
avatar
busylog
Use movefile in sysinternals to clean files with powershell
the PFRO functionality deletes files the next boot, before some applications start to use the file. Example (elevated): Get-Item C:\DumpStack.log | %{ movefile '/nobanner' $_.FullName '""' } $a = New-Object System.Collections.Generic.List[System.Object] Get-ChildItem -Recurse ($env:USERPROFILE + '\AppData\Local\Packages\Microsoft.Windows.ContentDeliveryManager_cw5n1h2txyewy\LocalState')| %{$a += $_.FullName} Get-ChildItem -Recurse ($env:USERPROFILE + '\AppData\Local\Microsoft\Windows\Explorer')| %{$a += $_.FullName} Get-ChildItem -Recurse ($env:USERPROFILE + '\AppData\Local\Microsoft\Windows\Caches')| %{$a += $_.FullName} Get-ChildItem -Recurse ($env:USERPROFILE + '\AppData\LocalLow\Microsoft\CryptnetUrlCache')|…
avatar
yuan
GPS 数据解析
最近研究 GPS 的数据解析,发现网上都是零零散散的知识,干脆整理一份完整点的出来。 卫星是怎么向设备发送数据的? 卫星数据并不会主动单独发给你设备,而是持续不断地广播导航信息。卫星发的是原始导航信号,包括:时间、位置、卫星状态等信息。数据速率非常低,例如 GPS L1 频段的数据速率是 50bps; 这些原始信号由接收机(GNSS 模块)接收、解码、计算后,再通过串口、USB 或其他接口输出成我们能理解的格式,比如 NMEA 字符串。 GNSS 模块(比如…
avatar
Rei
在 Rails 实现返回按钮
Geeknote 遵循 Material Design。Material Design 经常使用返回按钮,我在实现返回按钮的过程发现一些问题,在此分享。 返回按钮跟浏览器的原生返回按钮类似,但又有所不同: 如果直接打开一个页面,应该有默认返回的上级页面。 如果一个页面有多个入口,应该返回对应的入口。 从外链进入一个页面,不应该返回网站外部。 先看看有什么实现方式。 探索 固定链接 最容易实现的就是固定链接,例如文章页返回网站首页,评论页返回文章页。但如果用户从…
avatar
Rei
搭建反向代理降低网站网络延迟
最近我通过在香港机房搭建反向代理,将 Geeknote 的国内访问延迟从 300ms 降低到 50ms,以下分享解决过程。 问题产生 Geeknote 一开始部署在 Fly.io 的香港机房。Fly.io 的特色是在全球提供多个区域机房,通过任播网络使访问者访问靠近自己的边缘节点从而降低访问延迟。理想情况下,中国大陆访客的请求应该到达香港机房,获得最低访问延迟。 可惜的是,Fly 的任播网络优化并没有覆盖中国大陆,中国大陆访问可能会…
avatar
Rei
Geeknote 2.0 回顾和展望
经过漫长、痛苦和纠结的开发,Geeknote 终于以新形态出现在大家面前,我愿称之为 2.0 版本。可能有人会想,不就是一个冷门、不起眼,没什么技术含量的博客平台,有什么痛苦和纠结呢?我想借此机会分享一下心路历程,以及未来的展望。 Geeknote 第一篇帖子发布于2021年07月02日,竟然已经过了三年多的时间。开发这个网站的初衷,是想提供一个体验良好、网络友好的技术分享平台。回顾当时国内的同类平台,要不体验不好,页面乱糟糟的…
avatar
iamai
AGI在当前硬件条件下的智能上限(未来2-3年)总结
一、架构能力上限 主力架构:Transformer,仍是AGI发展主线,支持千亿~万亿级参数、多模态输入、百万token上下文。 新兴架构:RWKV、Mamba、RetNet等更高效、线性复杂度、适合长序列,提升算力利用率。 世界模型与神经符号混合尚处探索期,2-3年内或见于特定领域(如数学推理、物理建模)。 二、算力与瓶颈 Scaling Laws仍成立:性能随参数、数据、计算量呈幂律提升。 Chinchilla定律:更优训练策略是等比例扩展模型与数据。 瓶颈1:训练数据耗尽;瓶颈2…
avatar
HackerPie
灵活与专注——谈谈我这几个月来的远程工作体验
从今年 8 月开始,我入职了一家新公司,正式开始了我的远程工作。记得面试的时候,面试官问我如何看待远程工作,我说作为对比,我比较反感办公室里被人轻易打断我的工作,所以我第一个期待的是远程工作可以减少打扰。事实上,几个月下来,远程工作总体而言带给我的还是很多幸福感的,第一时间想到两个主要的点:灵活的工作地点,以及不被打扰的空间。 远程工作给我的幸福感 灵活的工作地点 工作地点…
avatar
HackerPie
PostgreSQL: 一个在 DDL 事务中同时增加列和移除外键索引触发的线上数据库死锁问题
上周将一个大功能发布到了线上环境,但是在半个多小时后收到数据库从库(我们使用的是 PostgreSQL 数据库)CPU 使用率接近 100% 的告警,同时 APM 监控表明部分 API 响应时间明显变长,并且相关 API 的错误追踪里会看到 Statement Timeout 错误。经过版本回滚后,数据库和服务恢复正常。后面是漫长的根因分析的过程,而最后我们确定的原因,竟是一个 Rails migration 触发(注意不是导致,因为死锁还得找到和它形成相互等待的另一方…
avatar
黄健宏
大家好,我是黄健宏,一位计算机技术图书的作者和译者,最近的新作是《Redis应用实例》和《SQL实战》。 刚来到Geeknote,很期待接下来和各位朋友交流,请大家多关照~!
avatar
yuan
聊聊代码的复杂性
回想起来,我的职业生涯有大半的时间都在有意无意的死磕这个问题。2016 年左右,开始觉得有必要写下来,因为总觉得不写下来的话,到该说的时候脑子里有许许多多的想法,临时却又说不出来什么。本文写于 2016-08-06,写得挺早,放着好多年。现在看起来,来来回回也没改动多少,发出来大家随缘看看。 复杂从哪来 代码当中包含的复杂性,我分为两部分来看:业务逻辑本身的复杂性,和代码结构的复杂性。 对有点规模的…
avatar
Rei
自建 docker 镜像服务
由于众所众知的原因,docker pull 在国内不好使。在开发环境会影响工作学习,在生产环境会影响产品部署。 国内有一些服务商提供了 Docker 镜像服务,但出于供应链安全的考虑,我不建议使用第三方服务。好在 Docker 官方提供了搭建镜像服务的工具,自己也可以很方便的搭建一个镜像服务。下面来看如何实现。 准备服务器 准备一台境外服务器,需要能在国内直接访问,云服务商不限。 在服务器上安装 docker。 启动镜像服务 为了方便管理配置,这里使用…
avatar
xfyuan
Monolith的新时代
本文已获得原作者( Svyatoslav Kryukov 、 Travis Turner )和 Evil Martians 授权许可进行翻译。原文讲述了 Inertia.js 这个新兴工具在 Rails 中的集成。对 Monolith 架构的促进,并以具体实例进行了演示。 原文链接:Inertia.js in Rails: a new era of effortless integration 作者:Svyatoslav Kryukov、 Travis Turner 站点:Evil Martians ——位于纽约和俄罗斯的 Ruby on Rails 开发者博客。 它发布了许多优秀的文章,并且是不少 gem 的赞助商。 Inertia.js 也是我去年在 RubyConf China 2024 上做的讲演主题的核心内容…
avatar
Rei
用 HTTP + JSON 直接访问 GraphQL API
有一天我需要访问 Fly 的 API 以支持自动签发 SSL 证书,Fly API 基于 GraphQL。我一向不太喜欢 GraphQL,精神洁癖让我不想增加一个 GraphQL Client 依赖。我想到 GraphQL 底层基于 HTTP 和 JSON,为何不直接访问接口?以下就是用 Ruby 实现过程。 Fly 前开发者认为“GraphQL 拖慢了所有人、所有事物的速度。” —— https://fly.io/blog/the-exit-interview-jp/ 首先 Graph QL API 需要提供一个 endpoint,对于 Fly API 来说是 https://api.fly.io/graphql: ENDPOINT = "https://api.fly.io/graphql" 可以…
avatar
busylog
OpenWrt snapshot in systemd-container
(apt install systemd-container) first boot, need to edit inittab to enable console: sudo machinectl pull-tar url/to/openwrt-armsr-armv8-rootfs.tar.gz openwrt --verify=no # or use machinectl copy-from / copy-to? or use nsenter -a -t PID /bin/sh #echo "console::askfirst:/usr/libexec/login.sh" | sudo tee -a /var/lib/machines/openwrt/etc/inittab sudo systemd-nspawn --boot -D /var/lib/machines/openwrt --network-veth the created veth will be called host0 in the container. see also openwrt as client. # in the openwrt container uci set network.host0=interface uci set network.host0.device=host0 uci set…