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 万笔…
avatar
数字支付
2024 年中国移动支付数据摘录 China Payment Data Excerpt
English Version: 2024 China Payment Data Excerpt 支付宝和微信支付的交易数据由每年一月份公布的投诉处理情况数据计算得出。数据来源:支付宝 | 微信支付 网联清算平台的数据来源:央行支付报告 | Payment System Reports 目前,支付宝和微信支付七成左右的交易由网联(NetsUnion)清算平台处理,另有两成以上交易由银联清算系统处理(CUPS),剩余交易则只涉及备付金内部流转(即钱包余额向个人收款码支付)。 支付宝年交易总数(笔交易):2890 亿,日均…
avatar
busylog
NAT64 with tayga in netns
inspired by https://openwrt.org/docs/guide-user/network/ipv6/nat64 iface jool inet manual address 10.64.64.1 address fe80::6464 netmask 255.255.255.0 pre-up ip link add $IFACE type veth peer ${IFACE}_ ||: pre-up ip netns add jool ||: pre-up ip link set dev ${IFACE}_ netns jool post-up ip netns exec jool /sbin/ip link set ${IFACE}_ up post-up ip netns exec jool /sbin/ip addr add dev ${IFACE}_ 10.64.64.2/24 post-up ip netns exec jool /sbin/ip addr add dev $…
avatar
yuan
Kotlin 笔记
变量 & 常量 var experiencePoints: Int = 5 var 关键字用于声明变量,experiencePoints 是变量名,后面跟 : 及变量的数据类型 Int,然后是赋值。 var 声音的变量是普通变量,val 则是用于声明只读变量,用 val 声明的变量不能重新赋值,类似 Java 当中的 final。多数情况下,建议首选 val。 类型推断 上面的例子可以简写作:var experiencePoints = 5,由于 5 是一个已知类型的值,因此编译器会自动推断 experiencePoints 为整数类型。通常情况下,建议尽量依靠类型推断,相对省事。除非因为…
avatar
电子芥末
五柳速记(Wuliu-STN)约100行代码的快速笔记程序
约 100 行 Java 代码,只使用 Java 标准库,完全没有第三方代码。 开发时也不使用 Maven, Gradle 之类,只使用 javac 有一个简单的 GUI 窗口。 代码极致简单,不可能更简单了。 主要功能 开源仓库 https://github.com/ahui2016/Wuliu-STN 下载项目源码后,在终端执行命令 newnote 即可打开窗口,输入文本内容,点击 OK 完成一次记录。 笔记内容是一个个 txt 文件,每天一个,例如 2025-01-01.txt 主要用来记录 零散 的信息,没有条理的、混乱的短句等 两个优点 极低心智负担…
avatar
mcx
2024.12
已经回去了
avatar
yuan
Android 笔记:RecyclerView
RecyclerView 很适合用于数据集合的展示,包括以列表形式、网格形式等。它的特点是:只会维持当前界面上能够显示的数量的视图实例。例如一个屏幕只显示得下 10 条数据,那么它就只会在内存中保留稍多于 10 个的视图实例。当界面滚动时,部分数据的界面被隐藏,相应的视图实例会被回收重用于新数据的显示,这也就是它名字的由来:Recycler。这可以极大地节省系统资源。 引入 RecyclerView # lib.versions…
avatar
yuan
Android 笔记:Fragment
Fragment 是一个类似 Activity 的 UI 界面,但它只是界面的一部分。 要显示 Fragment 的内容,必须将其放置在一个 Activity 里。Fragment 无法直接在界面上显示。一个 Activity 里可以放置许多个 Fragment。 Fragment 可以嵌套。 Fragment 有自己的生命周期,它的生命周期同时也受它所在的容器(Activity 或另一个 Fragment)的生命周期影响。 生命周期 Fragment 与 Activity 有着类似的生命周期。不同的是,Fragment 的生命周期回调方法是 public 的,而 Activity 的生命周期回调方法是 protected 的。这是因为 Fragment 的…
avatar
yuan
Android 笔记:Intent
Intent 用于组件与系统间传递消息。Android 组件除了 Activity 之外,还有 Service,Broadcast Receiver 和 Content Provider。 启动应用内的 Activity 在 Android 中,启动一个 Activity 并非像其它常见的前端开发中所做的那样,直接调用另一个 Activity 的构造方法来创建新的 Activity。而是调用当前 Activity 的 startActivity(Intent) 方法,通过系统的 ActivityManager 来创建 Activity 实例,并调用该实例的 onCreate(Bundle?) 方法。 class MainActivity : AppCompatActivity { override fun onCreate(savedInstanceState: Bundle?) { binding.cheatButton.setOnClickListener { val intent = Intent(this, CheatActivity::class.java) startActivity(intent) } } } 这里…
avatar
mcx
测试
测试
avatar
steve lee
Concurrency in Ruby: Thread and Fiber
Fibers and Threads Example: HTTP request Example: HTTP server Fiber Scheduler Concluding The content of this article is my last tech sharing with my team at https://pixta.vn/. Fibers and Threads Thread thread = Thread.new do #... end thread.join Fiber fiber = Fiber.new do #... end fiber.resume # transfer / Fiber.schedule As you can see, they have quite similar syntax, so what are the differences between them? The level: Threads are created 1:1 with threads on OS. Fibers are implemented at the programming language level, multiple fibers can run inside a thread. Scheduling mechanism: Threads are run…
avatar
ae86
请推荐 Rails docker 部署方案
最近才将Rails应用通过Docker的方式进行改造 改造前: 服务器10台 用mina部署unicorn 改造后,需要在10台机器上面 通过 docker pull images的方式,再通过 docker-compose up app启动,或docker-compose restart app的方式进行重启。 请问,怎么在10台服务器上面,选择相对较优的部署方案呢? 感谢大家