Ubuntu 18.04 修复中文字体渲染问题

最近一段时间一直工作在 Centos 7 下,前两天为了尝鲜,装了最新版的 Ubuntu 18.04 LTS。相比以前的版本,有个明显的感觉就是系统对字体的渲染效果提升了不少。不过,具体落到中文字体的显示上,似乎就出了点问题。中文字体整体说来渲染得还可以,但总有那么几个字看起来特别别扭,比如“门”、“复”等。这些字要么看起来奇怪,要么太瘦,要么感觉只渲染了一半。照理说,早在 Ubuntu 16.04 后,系统的中文字体已经交给了 Noto Sans CJK 来渲染了,有这么一款优秀字体的支持,理应不会出现这样的渲染问题才对。那到底是什么原因导致的呢?

阅读余文Ubuntu 18.04 修复中文字体渲染问题

Centos 7 使用 ss5 搭建 socks5 代理服务器

在《Centos 7 搭建 socks5 代理服务器》这篇博文中,我们介绍了如何利用 shadowsocks 搭建一个 socks5 代理服务器。本篇博文可以说是它的姊妹篇,也是讲述 socks5 代理,只不过所采用的手段变成了 ss5 罢了。

阅读余文Centos 7 使用 ss5 搭建 socks5 代理服务器

GDB 命令详解

连接 Linux 服务器的时候,一般无法直接使用 IDE 工具来帮助我们调试代码,只好求助于 GDB 了。GDB 调试并不难,也不比 IDE 调试复杂多少,唯一要做的只不过是多记住一些调试命令而已。

以 C 代码为例。假设我们编写了一个源文件 test.c,那么,要使用 GDB 调试,首先要把源代码编译成可执行文件。当然,调试信息肯定是要打开的,打开方式一般就是在 gcc 命令中使用 -g 参数。例如:

$ gcc test.c -o test.out -g

有了编译后的可执行文件 test.out 后,就可以让 GDB 程序运行可执行文件进行调试了:

$ gdb test.out

GDB 的命令虽多,但结合我们使用 IDE 的经验,一般需要用到的命令也就那么几个。本文就罗列出常用的一些调试命令,供大家查询使用。

阅读余文GDB 命令详解

MySQL 内存优化

早上醒来,发现博客打不开了,提示无法连接数据库。通过终端登录,尝试连接 MySQL(Centos 7 一般用的是 MariaDB),果然无法连接,只得重启服务器来暂时解决。当时具体的报错信息已经忘了,只记得大概讲的是 MySQL 停止运行,又被锁定之类的。考虑到我的这台博客服务器内存较低,问题应该就出在 MySQL 的内存占用方面。果然,网上也有关于这方面的讨论。说是当服务器的内存过低,容易造成 MySQL 的运行经常性停止,其本质原因就在于不合理的缓存策略。那么,不妨就先从这方面入手去解决吧。

阅读余文MySQL 内存优化

php-fpm 内存调优

为了高效利用服务器,今天特地把博客迁移到一台只有 1G 内存的新服务器上。原想一个静态博客而已,耗不了多大机器性能。不曾想,1G 的内存很快就不够用了,看了一下,连 swap 都被用上了。于是赶紧用命令查下各进程的内存开销:

$ ps aux

发现占据一大半内存的是一堆 php-fpm 相关的子进程。看来是 php-fpm 的配置不合理,导致它们被不合理地创建出来。这就要分析 php-fpm 创建子进程的方式了。

php-fpm 有三种孵化子进程的方式,一般可在 /etc/php-fpm.d/www.conf 里面,通过指定 pm 的值(例如,pm = dynamic),结合对应的参数(例如,pm.max_children = 50)来配置。这三种孵化方式分别是:

  • 静态 static
  • 动态 dynamic
  • 按需 ondemand

下面就分别来讨论这三种方式。

阅读余文php-fpm 内存调优

贝塞尔曲线

贝塞尔曲线(Bézier curve)有着十分广泛的用途。在讨论贝塞尔曲线之前,我们还得先回顾上一篇文章《伯恩斯坦多项式》。在这篇文章中,我们提到了伯恩斯坦多项式的一般形式

$$
B_n(t) = \sum_{i=0}^{n}\beta_i \cdot b_{i, n}(t)
$$

其中,

$$
b_{i,n}(t) = \binom{n}{i}\cdot t^{i} \cdot (1-t)^{(n-i)}, \quad t\in[0, 1]
$$

是 n 阶伯恩斯坦基底多项式。而 $\beta_i$ 叫做伯恩斯坦系数。当伯恩斯坦系数是二维平面中的一系列固定点时,伯恩斯坦多项式就演变成了本篇要讨论的贝塞尔曲线。

阅读余文贝塞尔曲线

伯恩斯坦多项式

我们在研究贝塞尔曲线的时候,首先遇到的就是伯恩斯坦多项式(Bernstein polynomial),为此,有必要专门开出一篇文章来探讨伯恩斯坦多项式的性质。

从定义出发,伯恩斯坦多项式的第n阶项有如下形式:

$$
b_{i,n}(t) = \binom{n}{i}\cdot t^{i} \cdot (1-t)^{(n-i)}, \quad t\in[0, 1]
$$

其中 $i=0, 1, …, n$, 而

$$
\binom{n}{i} = \frac{n!}{i!(n-i)!}
$$

是二项式系数。伯恩斯坦 n 阶多项式可以形成一组 n 阶指数多项式的基底。一般伯恩斯坦多项式可以表示为:

$$
B_n(t) = \sum_{i=0}^{n}\beta_i \cdot b_{i, n}(t)
$$

其中,$\beta_i$ 叫做伯恩斯坦系数。读者看到这个形式可能一下子就联想到贝塞尔曲线了。是的,这就是贝塞尔曲线的函数形式。不过,贝塞尔曲线我们会在下一篇文章中去详细论述,本篇只探讨伯恩斯坦多项式的特性。

阅读余文伯恩斯坦多项式