avatar
Rei
用 Hotwire Turbo 实现常驻侧边栏
最近用 Hotwire Turbo 改进了 Geeknote 的首页,减少了重复查询和渲染,想分享一下过程。 问题 Geeknote 的首页有个侧栏区域,区域内展示了一些次要内容,有热门标签、推荐用户,和社区统计等,未来还可能加一些广告代码或友情链接。 问题在于,这个区域的内容并不重要,但是需要的查询并不少。热门标签需要对近期标签使用进行统计排序,推荐用户需要关联当前用户是否关注,社区统计比较简单只是对几个表的总计数。在用户切换 Tab…
avatar
busylog
Mojibake problems
iso-8859-1 -> cp1252 is used in early windows. cp437 is mainly used in dos & defined as one of zip encoding (to save any byte). c4 = list(bytes(range(256)).decode('cp437',errors='ignore')) c12 = list(bytes(range(256)).decode('cp1252',errors='ignore')) # c88591 = list(bytes(range(256)).decode('iso-8859-1',errors='ignore')) len(c4), len(c12) # (256, 251) for i in c4: if i not in c12: print(i, end='') # cp437 only # ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜ¢£¥₧ƒáíóúñѪº¿⌐½¼¡░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣστΦΘΩδ∞φε∩≡≥≤⌠⌡÷≈∙√ⁿ²■ for i in c12: if i not in c4: print(i, end='') # cp1252 only…
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,以下分享解决过程。 ⚠️ 2025-09-28 更新:Fly 取消了香港机房,本文的方案不再有效。 https://fly.io/blog/the-region-consolidation-project/ 问题产生 Geeknote 一开始部署在 Fly.io 的香港机房。Fly.io 的特色是在全球提供多个区域机房,通过任播网络使访问者访问靠近自己的边缘节点从而降低访问延迟。理想情况下,中国大陆访客的请求应该到达香港…
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…
avatar
yuan
StateFlow 在 Android 中的应用
使用 Flow 自动更新数据 在 UI 中使用 DAO 获取数据后,如果有人或线程更新了数据库的内容,相应的 UI 不会自动更新。当然你可以编写代码来协调应用程序特定部分的更新,但更好的方式是使用 Flow 来自动监视数据库并自动更新 UI。 首先,需要修改 DAO,Room 的查询支持返回 Flow(注释部分是原来的代码): @Dao interface CrimeDao { @Query("SELECT * FROM crime") // suspend fun getCrimes(): List<Crime> fun getCrimes(): Flow<List<Crime>> } 然后把调用该函数的地方都跟着一起…
avatar
数字支付
数字支付和实时支付
English Version:Digital payment and real-time payment 偶然在 X 网站上,看到一位印度人声称“印度的数字支付/在线交易占全世界的 46%”,经过搜索,发现有不少印度媒体也这么说。虽然知道他们是在胡说八道,不过我更感兴趣的是他们为什么这么说。以下是探究过程。 第一步,寻找数据来源,搜索引擎帮我找到了一篇 2023 年的文章:India tops world ranking in digital payments, beats China by huge margin: Report 其中提到印度第一,巴西排名第二,2920 万笔交易,其次是中国的1760 万笔…