ALL POSTS

  • 2022 年 10 月 30 日

ZeroTier 创建私有服务器节点(Moon节点)

没有公网 IP 的 NAS 无异于被阉割的太监。现在各运营商对公网 IP 管理政策来看怕是不会再有了,所以还是另寻它路。

目前常见的有 FRP、NPS、 ZeroTier 等方案。

FRP 是自己搭建一个公网服务器,所有流量经过公网服务器中转。ZeroTier 默认使用官方的一组根服务器进行节点查找。

ZeroTier 也允许自己在服务器上搭建自己的节点,这种节点称之为 moon 节点。 (官方根节点称之为行星节点,自建节点叫月球节点,很合情合理是吧 )

Read more 
  • 2022 年 10 月 14 日

人生的第一台 NAS

nas

有需求的,上NAS。没需求的,那就创造需求上NAS。

Read more 
  • 2022 年 05 月 12 日

安卓 ADB 常用命令用法

ADB 是 Android Debug Bridge 的缩写,它是一个多功能命令行工具,可让你与设备进行通信。ADB 可以控制设备、在设备之间传输文件、安装和卸载应用程序、运行 shell 命令等。它通常是 Android 开发人员和高级用户进行设备调试和管理的重要工具。

Read more 
  • 2022 年 03 月 31 日

在 linux 中开启 bbr 加速网络传输

BBR 加速 (Bottleneck Bandwidth and RTT) 是一种拥塞控制算法,由 Google 开发并集成到 Linux 内核中。它的主要目标是在高带宽、高延迟的网络环境中提高 TCP 吞吐量并减少延迟。

BBR 的工作原理是通过测量网络的“瓶颈带宽”(Bottleneck Bandwidth)和“往返时间”(Round-trip Time)来控制发送速率。与传统的基于丢包的拥塞控制算法(如 Reno、Cubic)不同,BBR 不依赖于丢包作为网络拥塞的信号,而是尝试主动探测网络的最佳发送速率,从而在不造成大量丢包的情况下充分利用网络带宽。

Read more 
  • 2022 年 03 月 10 日

使用以太坊兼容钱包登录网页

前端使用 web3.js 获取用户地址并进行签名。

后端使用 go-ethereum 库校验签名是否来自指定地址,大致校验流程:

  • 通过明文的HASH和签名数据算出公钥
  • 通过公钥还原出地址
  • 校验还原出来的地方是否与用户指定地址相同

Read more 
  • 2022 年 02 月 13 日

试玩微控制器开发:ESP32 初体验

以前在项目中有过几次需要涉及物联网的东东,但当时对微控制器开发这块完全不了解,以至于做方案时信心不足。
最新终于闲下来了,想试试这方面的开发,于是买了两块乐鑫 ESP32-C3 开发板玩

microcontroller

Read more 
  • 2022 年 02 月 13 日
  • 2022 年 01 月 19 日

在 zsh 中为 git 使用 GPG 签名时 遇到的问题

最近在 git 提交某些关键代码时就在想着要是别人冒充我的名义提交了代码怎么办,于是就折腾起 git commit 的签名。

Read more 
  • 2021 年 12 月 22 日

Go 中使用 `singleflight` 防止缓存击穿

go

一个典型的使用缓存的案例:

// GetConfig 获取 key 指定的配置项
func GetConfig(key string) (Config, bool) {
	cacheKey := "cfg:" + key
    
    // 如果缓存中查到则直接返回缓存数据
	if v, has := Cache().Get(cacheKey); has {
		if cfg, ok := v.(Config); ok {
			return cfg, true
		}
	}

    // 不在缓存中则从数据库中查找
	cfg := Config{}
	if err := DB().Where("`key`=?", key).First(&cfg).Error; err != nil {
		return cfg, false
	}

    // 将数据库中查到的值写入缓存, 300 秒过期
	Cache().Store(cacheKey, cfg, 300)
	return cfg, true
}

但这样存在一个问题: 如果 300 秒缓存过期时,有大量并发产生,将会导致这些并发在缓存中都找不到数据去查数据库的情况,从而发生所谓的缓存击穿。

Read more 
  • 2021 年 03 月 10 日

在 MySQL 中使用触发器监视用户资产变更

使用 MySQL 的触发器来实现用户表中的资产字段更新后自动向资产记录表 user_asset_watch 中插入一条记录,记录下变化前后的数据。

Read more