米米的博客

做了一点微小的工作

A point walks into A bar. says, "We're closed."
is walking down the street when it sees running towards him. "Help!", shouts, There's a differential operator coming my way, and if it catches me, I'll be reduced to nothing! confidently says "Stand beside me, ! Together, we'll be safe from any differential operators we come across!" Suddenly, the differential operator appears and asks "Who are you?" They respond "We are . Who are you?" It smiles and says "".

阅读全文 »

MySQL 的安装

在 MySQL 官网的下载页上,提供了各种系统和环境的安装方法。你可以选择通过包管理工具的软件源安装,也可以通过源码编译安装。不过编译是非常吃内存的(实测至少需要 4GiB 内存),并且还很耗时(毕竟是 C++ 写的),因此不推荐。具体来说,你可以:

使用包管理工具

yum 为例,首先增加并启用 MySQL 软件源,在 Download MySQL Yum Repository 页面找到适合你的版本,然后下载并启用之:

1
2
3
wget https://repo.mysql.com//mysql80-community-release-el7-1.noarch.rpm #换成适合你的版本
rpm -ivh mysql80-community-release-el7-1.noarch.rpm
yum-config-manager --enable mysql80-community

这样,就可以直接通过 yum 安装 MySQL 服务器了。

1
yum install mysql-community-server

安装完成后,会在 /usr/sbin//usr/bin/ 目录下出现 MySQL 的可执行文件,而 mysqld.service 会自动加载好。MySQL 的配置文件则是 /etc/my.cnf

如果你在使用 macOS,并配置好了 Homebrew:

1
brew install mysql

其它系统也可以使用相应的包管理工具安装。

使用源码编译安装

再次提醒:源码编译安装方式非常麻烦,如果可以的话请使用包管理工具安装。

1
2
3
4
5
wget https://cdn.mysql.com//archives/mysql-8.0/mysql-boost-8.0.13.tar.gz
tar -xzf mysql-boost-8.0.13.tar.gz
cd mysql-boost-8.0.13
cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/data/mysql -DDOWNLOAD_BOOST=1 -DWITH_BOOST=boost -DSYSCONFDIR=/etc -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_PARTITION_STORAGE_ENGINE=1 -DWITH_FEDERATED_STORAGE_ENGINE=1 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_EMBEDDED_SERVER=1 -DENABLE_DTRACE=0 -DENABLED_LOCAL_INFILE=1 -DDEFAULT_CHARSET=utf8mb4 -DEXTRA_CHARSETS=all
make && make install

这里的 -DCMAKE_INSTALL_PREFIX-DMYSQL_DATADIR 参数指定了 MySQL 的安装目录和数据文件存储目录。

阅读全文 »

Revolver Maps 是一个交互式的网站访客地图。每一个浏览者的位置都会实时在由 Canvas 渲染的地球上标记出来。在它的官方网站上,你可以轻松地选择地图样式,并生成用于插入 HTML 页面的 script 标签。

其中,RevolverMaps Standard GL 样式是响应式的,会自适应父元素大小,非常适合作为访客地图使用。点击「Get this Widget!」按钮,在新的页面中调整参数,可以自定义颜色、缩放、旋转等等。完成后,将生成的 script 标签复制下来,并放在你想要生成地图的地方即可。例如:

1
<script src="//ra.revolvermaps.com/0/0/8.js?i=0pdvpgzth5r&amp;m=7&amp;c=ff0000&amp;cr1=ffffff&amp;f=arial&amp;l=33&amp;v0=20&amp;z=11" async="async"></script>

这时,效果看上去会是这样:

Revolver Maps显示效果

类似地,你也可以把它放到 WordPress 博客的侧边小工具栏中,像下图这样:

WordPress集成Revolver Maps

访问站点时,访客地图就会自动显示了。

在学院的新年晚会上,主办方使用了一个基于微信小程序的弹幕系统,让全场观众通过大屏幕发送弹幕互动。比较坑的是,该弹幕系统存在「高级弹幕」选项,以此向用户收费。考虑到这一系统的逻辑实际上并不复杂,笔者决定自己实现一个。它被命名为「米米弹幕系统」(Mimi Danmaku),其初代版本基于 Ajax 轮询实现。这是客户端的样子:

米米弹幕客户端

客户端基于 Electron 实现,这一过程也踩了不少坑。例如,为了在播放 PPT 时,还保持弹幕可见,就必须要让弹幕的窗口全屏且置顶,而且要忽略鼠标事件;在电脑连接了外部投影屏幕时,又需要在投影屏幕上打开全屏窗口等等。这些惨痛的 debug 历史都在客户端的 GitHub 仓库中得以体现,此处不再赘述。
当然,由于笔者是第一次接触实时通讯,程序上还存在不少缺陷。在进行调研后,笔者决定使用 WebSocket 代替原先效率极低的轮询,并重构一部分逻辑。经过数天的调试,现在全新的米米弹幕系统已经可以正常使用了。这个重制后的版本,成功实现了消息即时收发、自定义弹幕颜色、大小等功能。下一步笔者将把弹幕系统整合到直播中。附上链接:
mimi-chat
mimi-danmaku
同时还开放了一个随机生成用户名(来自魔兽世界)的 API:
随机用户名


本文更新于 2018 年 5 月 18 日:
galaxymimi.com 和 zsq.im 即日起全站支持 https 访问,ws 连接也升级为了 wss。

本文更新于 2019 年 3 月 27 日:
笔者决定使用 Heroku 部署弹幕服务,又重写了不少代码。可以在此处查看:
米米弹幕

BBR 的全称是 Bottleneck Bandwidth and RTT congestion control。该技术的目的是通过优化和控制 TCP 的拥塞,充分利用带宽并降低延迟,起到神奇般的加速效果 —— 通俗来讲就是对 Linux 内核 TCP 协议的优化从而达到提速的目的。一些受制于特殊网络环境的网民,近年来一直在寻找各种提速的方法。不论是之前流行的锐速(后开始收费),还是 FinalSpeed 等都曾备受大家的爱戴。BBR 则提供了一个全新的加速方式,自 Google 于 2016 年 9 月宣布将 BBR 开源起,这一全新的加速方案便受到了广泛的关注。在内核较新的 Linux 系统,例如 Ubuntu 18.04 上,它可以方便的开启;而一些较旧的系统,则需要先升级内核才能启用。
这篇文章将介绍在 CentOS 7 上,启动 BBR 的方法。文中使用的是 yum 包管理工具。如果你的系统环境不同,本文可能并不适用。

yum 系统更新

将 CentOS 系统版本更新到 7.3 或更高:

1
2
yum update
yum upgrade

查看系统版本

1
cat /etc/redhat-release

输出如下,则表示已升级到 7.3

1
CentOS Linux release 7.3.1611 (Core)

安装 elrepo 并升级内核

执行 uname -r 查看内核版本,例如:

1
4.9.0-1.el7.elrepo.x86_64

如果内核版本低于 4.9,需要升级内核;否则可以跳过这一步,直接到「开启 BBR」部分。

1
2
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm

这时,执行 yum repolist all 可以看到所有安装的源,可以启用 elrepo-kernal

1
2
yum-config-manager --enable elrepo-kernel
yum install kernel-ml -y

如果只是执行一次,也可以使用:

1
yum --enablerepo=elrepo-kernel install kernel-ml -y

正常情况下这个命令将输出如下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Transaction Summary
================================================================================
Install 1 Package

Total download size: 39 M
Installed size: 169 M
Downloading packages:
kernel-ml-4.9.0-1.el7.elrepo.x86_64.rpm | 39 MB 00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Warning: RPMDB altered outside of yum.
Installing : kernel-ml-4.9.0-1.el7.elrepo.x86_64 1/1
Verifying : kernel-ml-4.9.0-1.el7.elrepo.x86_64 1/1

Installed:
kernel-ml.x86_64 0:4.9.0-1.el7.elrepo

Complete!

随后更新 grub 文件并重启。执行:

1
egrep ^menuentry /etc/grub2.cfg | cut -f 2 -d \'

或者

1
awk -F\' '$1=="menuentry " {print i++ " : " $2}' /etc/grub2.cfg

这时,所有可用的内核会被输出。记下新内核所在的行数,第一行为 0,第二行为 1,以此类推。
执行以下命令来启用最新内核,需要把 0 替换成上一步得到的新内核所在的行数:

1
2
grub2-set-default 0
reboot

重启后,ssh 会断开,稍等一会儿重新连接。可以再次查看内核版本,检查更新是否成功。如果一切顺利,下一步就是启动 bbr 了。

阅读全文 »
0%