Alpine with CGO

今天折腾这个一天,记录下来免得未来踩坑 Alpine with CGO Golang 很棒,静态编译十分方便。但是,它也不是 100% 静态编译的,因为它需要依赖glibc ( 标准C运行库 )。 而 Docker 最常用的 Apline 镜像,使用的是 musl 库,并不能愉快的运行 Go 程序 网上大部分教程都是教你,CGO_ENABLED=0 go build -a -installsuffix cgo,使用纯 Go 编译,不用 CGO 链接 glibc ,问题就可以解决了。 但是最麻烦的问题是,你需要引入 C/C++ 库的时候,你并不能禁用 CGO 。 幸好 Alpine 有包管理器,所以我们可以很愉快的安装所需要的库。(我之前尝试手动安装glic和libstdc++,很难弄) ...

2019-04-08 · 1 分钟 · zjyl1994

解决Alpine缺少字体的问题

2019-02-11 农历己亥年上班第一天 好久没有写博客了,我这个博客是Hugo静态编译的,写一次还是蛮复杂的,而且上班以后基本没有什么值得写的东西,所以博客基本都在长草。 立一个FLAG,2019 博客不长草。 前言 我现在的这家公司基本都在用现代化的开发工具,所有程序写完都在docker环境下运行,我们公司dalao钦定的底包就是alpine。后续的问题都是Alpine没有自带默认字体造成的。如果你想快速知道怎么解决请直接看最后。 问题 我遇到的问题是这样的: java.lang.NullPointerException at sun.awt.FontConfiguration.getVersion(FontConfiguration.java:1264) 场景是公司买的快速开发框架jeeplus,自带一个数据导入功能,需要下载excel模板,当下载模板时触发NPE。 ...

2019-02-11 · 2 分钟 · zjyl1994

Ubuntu 18.04 必做操作

新开一个栏目,专门记录开发中常见的命令和操作 新装完Ubuntu Server之后要做几个操作,才能让他更好用: 更新软件源 安装必备软件 设置系统代理 ...

2018-10-12 · 1 分钟 · zjyl1994

Ringbuffer环形缓冲区

前言 环形缓冲区是很常用的数据结构,用途很广泛。我目前遇到的使用场景就是TCP分片转回TCP流,一个线程读取TCP分片拆包,写入缓存区,另一个线程从缓存区中读取,互相不影响。 为此Google了一番,发现了kfifo这个Linux内核的实现,十分精妙。 原理 基本原理 struct kfifo { unsigned char *buffer; /* the buffer holding the data */ unsigned int size; /* the size of the allocated buffer */ unsigned int in; /* data is added at offset (in % size) */ unsigned int out; /* data is extracted from off. (out % size) */ spinlock_t *lock; /* protects concurrent modifications */ }; 先看一下基本定义,buffer是数据缓存区,size是缓存区长度,in/out是输入输出指针位置(%size后就是真实指针了)。 size需要检测是否为2的次幂,不是的话需要升到2的次幂。方便后续计算。(可以看内核的roundup_pow_of_two实现) in、out每次操作都+对应的读写长度,通过取模运算回落size区间。 data := kfifo.buffer[kfifo.out % kfifo.size:kfifo.in % kfifo.size] data就是有效数据的缓存区区间。 快速取模 kfifo使用了二进制的位运算实现了2的幂取模运算,并且利用了无符号数的溢出做回绕。很精妙的设计。 首先,缓存区尺寸要取整为2的幂次,这样可以利用位运算进行取模。 M mod N = M & (N-1),当N为2的幂次时有效。 取模运算对于计算机来说运算速度也是很慢的(虽然你感觉不出来),而位运算就是分分钟的事了。 回绕 无符号数溢出后,就会变成0从头开始,借助这个特性可以绕开逻辑判断。 ...

2018-08-05 · 3 分钟 · zjyl1994

宏碁TMB117测评

2018-07-17夜 深圳 狂风暴雨配闪电 前言 买了个摸鱼用的笔记本,宏碁TravelMate B117,使用体验还挺好。 我的需求很简单: 能运行Manjaro 电池耐用 尺寸小 便宜 选来选去就选到了这个笔记本。基本配置是这样的: Intel 奔腾 N3710 处理器 4GB 内存 / 128GB 闪存 11.6英寸1366*768屏幕 最重要的是:这个本子我买的时候特价只要2399,现在2499也不是很贵。 ...

2018-07-17 · 4 分钟 · zjyl1994