Pinned Post

Recent Posts

Go 中的枚举

数据库中使用了枚举 enum 来存储订单状态 orders.state,然后在 model/order.go 中一堆状态常量:


type Order struct {
	// ...
	State string
}

const (
	OrderStatePending	= "pending"
	OrderStateLocked	= "locked"
	OrderStatePaid		= "paid"
	OrderStateRevoked	= "revoked"
	OrderStateDone		= "done"
)

既然说到 Go 的枚举,肯定有人要说 iota 了,那么,,用 iota 来实现该功能试试:

4月份的时候给腾讯云发工单 MySQL 数据库分配 Buffer Pool 不合理, 1G内存的实例被分配掉 896M 作为 BP 了,刚看了下,似乎并没有被调整。

show global variables like 'innodb_buffer_pool_size';

rqlite 项目有点意思,把 SQLite 玩成了分布式数据库 https://github.com/rqlite/rqlite

使用 asciinema 录制分享终端操作

无意间看到一个很酷的项目: asciinema ,可以用来录制你的终端操作并将其分享别人或者导出成 gif、mp4等媒体格式。

git 打补丁

打补丁:

# 将指定提交与之前的N次提交之前的差异打成补丁
git format-patch {COMMIT_HASH}  -N
git format-patch HEAD -1

会在当前目录下生成类似 0001-temp.patch 这样的文件。

检查指定补丁是否可用、是否冲突:git apply --check ~/patch/patch/0001-add-11111.patch

在应用补丁时,可根据实际需要,直接在分支下应用补丁,还是新开分支应用补丁,然后再合并到分支中。

应用指定补丁: git am 0001-temp.patch

Tile38 https://tile38.com

Tile38 是一个 Go 语言编写的开源高性能空间索引引擎。它支持多种对象类型,包括纬度/经度点、边界框、xyz 切片、geohashes 和 geojson。 客户端订阅指定对象后,当对象发生靠近、相交、内部、离开等行为时它会向推送消息,而避免客户端重复查询数据库。 它支持地理围栏、漫游围栏等操作。

在 Go 项目中生成 Swagger 文档时提示: cannot find type definition: xxx
解决方案:

增加 --parseDependency 参数解析依赖:

swag init --parseDependency  -g app/router/api.go

ngraph.path: https://github.com/anvaka/ngraph.path 一个前端路径规划的库

maptalks,开源的 2D/3D WebGIS 引擎: https://github.com/maptalks/maptalks.js 示例: https://maptalks.org/examples/cn/map/load

在 MySQL 8.0.4 之前可以直接通过 SET PASSWORD=PASSWORD('新密码') 更新,但 8.0.4 开始将认证插件从 mysql_native_password 更新到了 caching_sha2_password 后将不能用该方法修改用户密码了。

mysql 8 修改用户密码:

mysql> show databases;

mysql> use mysql;

mysql> ALTER USER '用户名'@'localhost' IDENTIFIED WITH mysql_native_password BY '新密码';

mysql> flush privileges; 

MySQL 创建用户、修改密码、授权:


CREATE DATABASE game CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci;

CREATE USER 'game'@'%' IDENTIFIED BY '{PWD}';
ALTER USER 'game'@'%' IDENTIFIED WITH mysql_native_password BY '{PWD}';
GRANT ALL ON game.* TO 'game'@'%';
FLUSH PRIVILEGES;

这才注意到 cache2go 这个缓存库通过 cache.Value() 获取值时会更新元素的活跃时间导致元素未按预期过期。 (其实文档中有说,但我没细看,想当然了……)

嵌入式 Rust 相关资源

Rust Embedded ( https://github.com/rust-embedded ) Enabling usage of Rust on Embedded Platforms (Embedded Linux / RTOS / Bare Metal) 相关案例: http://showcase.rust-embedded.org/

有没因为 man 长篇大稿不说人话导致很少用这个帮助手册命令? 试试 tldrToo Long; Didn't Read,太长不看): https://github.com/tldr-pages/tldr

在 Amazon Linux 上扩展磁盘空间

在 AWS EC2 控制面板将卷大小后,SSH 连接到服务器:

lsblk # 列出块信息
sudo growpart /dev/nvme0n1 1 # growpart <分区名> <分区号> 扩展分区
lsblk # 查看操作后的块信息
df -h
sudo xfs_growfs -d /  # 扩容
df -h

代码片段: RequestToStruct

工作中写到的一段通用性较高的代码,根据 结构体 A 中的 tag 匹配数据到 结构体B

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

创建:

DELIMITER ^^
CREATE TRIGGER t_user_asset_watch
	BEFORE UPDATE ON users
	FOR EACH ROW 
BEGIN
        IF (OLD.balance!=NEW.balance or OLD.balance_usdt!=NEW.balance_usdt 
            or OLD.frozen!=NEW.frozen or OLD.frozen_usdt!=NEW.frozen_usdt) THEN
            INSERT INTO user_asset_watch(user_id,balance_old,balance_new,frozen_old,frozen_new) 
            VALUES(OLD.id,OLD.balance,NEW.balance,OLD.frozen,NEW.frozen);
        END IF^^
END^^
DELIMITER ;

删除:

DROP TRIGGER IF EXISTS t_user_asset_watch;

Laravel migrate
在 Laravel 迁移文件中实现 DEFAULT 的两种方式:

$table->timestamp('created_at')->nullable()->default(DB::raw('CURRENT_TIMESTAMP'));

$table->timestamp('created_at')->nullable()->useCurrent();

感觉 Ulysses 真的是被过誉了,当然,也许是它不适合我。
在我的使用场景中,无论是写作体验还是功能性扩展性、灵活性,都远在 Typora 之下。
想了想,貌似 Ulysses 更适合那种以写作为主要工作的人(内置文章的章节管理、关键字搜索),它以自己的方式组织管理用户的数据,并扩展了一些写作相关功能。相比之下 Typora 似乎更适合喜欢折腾的码农,大量的第三方主题、各种图表支持、用户自行维护数据…

从一碗羊肉粉说起…

一碗羊肉粉导致的胃镜取物事件。