米米的博客

做了一点微小的工作

1
2
3
4
5
6
7
double world;
unsigned letter;
short stay;
long memories;
long long ago;
float cloud;
printf("I miss you.\n");
1
2
3
4
for (everynight in mydreams) {
i.see(you);
i.feel(you);
}
1
select * from world where someone like '%you%';

Nothing is absolute.

1
2
3
4
5
<style>
* {
position: relative;
}
</style>

物是人非事事休,欲语泪先流。

1
2
3
4
5
6
7
if (item && !people) everything = false;
if (tears.setFlowing()) try {
Speaker skr = new Speaker();
}
catch {
IOException e;
} ()

先天下之忧而忧,后天下之乐而乐。

1
2
3
4
5
6
if (others.rejoice() == true) {
self.rejoice();
}
else {
self.worry();
}
阅读全文 »

目前搭建 MCPE 服务器的方法主要有两种:PocketMine-MPNukkit。前者基于 PHP,而后者基于 Java。
无论选择哪一种方法,都要确保游戏客户端和服务器端均是最新版本。如果版本不匹配,可能造成无法连接等问题。

PocketMine-MP

运行 PocketMine-MP 需要 PHP7 环境和大量的拓展库,例如 php-leveldbyaml 等。即使你已经通过 brewyum 等包管理工具安装了 PHP,也可能无法正确启动服务器 —— 它们一般是不会自带这些拓展库的。为了免去手动编译安装拓展的麻烦,比较简单的解决方法是使用 php-build-scripts。它会编译出带有所有必要的拓展库的 PHP,供 PocketMine-MP 使用,并且不会与系统原有的 PHP 环境冲突。比如在 Mac 下,执行

1
2
3
git clone https://github.com/pmmp/php-build-scripts.git
cd php-build-scripts
bash compile.sh -t mac64 -l -j4 -f

即可编译安装 PHP(Linux 将参数对应改为 -t linux64 即可)。
完成后,再执行 bash installer.sh,就会自动下载 PocketMine-MP.phar 等必要程序。最后,执行 bash start.sh 就可以运行了,接下来根据提示进行配置即可。这种方式非常方便,只要记得使用 screen,然后等上几分钟就行。更多配置可以参考其官方文档。

Nukkit

Nukkit 的原版似乎已经失去维护,其官方网站 Nukkit.io 也无法打开。这里介绍的是一个 fork 出的分支。
Nukkit 需要 Java8 环境,如果没有安装,可以前往 ORACLE 官网下载。运行方式也很简单,克隆这个仓库后,依次执行:

1
2
3
git submodule update --init
mvn clean package
java -jar Nukkit.jar

当然,在其新维护者的官网上也有发布的版本,无需自行编译 Jar 文件,可以前往 NukkitX 查看。
Nukkit 的主要问题是不支持 leveldb,也就是无法打开较新的 MCPE 存档,只支持 MC 存档和上古的 MCPE 存档,因此建议使用第一种方法。

客户端

PocketMine-MP 和 Nukkit 启动后默认都会监听 19132 端口,配置服务器时填写局域网或公网 IP / 域名即可。更多的设置项可以参考它们的文档。

更多

转换存档的格式可以用这个脚本:LevelDb2Avnil,不过笔者测试发现其兼容性存在问题,请谨慎使用。


本文更新于 2019 年 9 月:
笔者发现了一个更好的转换存档的方式,请看转换 Minecraft 存档格式

macOS 自带了 Apache 服务器和 PHP 环境,还包括大量动态拓展。只需要简单的配置,就可以让它们运行起来。
你可以通过 apachectl -version 查看 Apache 的版本;通过 php -v 可以查看 PHP 版本,php -m 可以查看所有拓展。

启动 Apache

在终端输入 sudo apachectl start,即可启动 Apache 服务器。用浏览器打开 http://localhost,若显示「It works!」,说明服务器启动成功。
关闭和重启服务器的命令分别是 sudo apachectl stopsudo apachectl restart
如果需要开机启动服务器,可以编辑 /System/Library/LaunchDaemons/org.apache.httpd.plist,将

1
2
<key>Disabled</key>
<true/>

改为

1
2
<key>Disabled</key>
<false/>

即可。

配置服务器

Apache 的配置文件为 /etc/apache2/httpd.conf,为防止出现问题,建议将其备份后进行编辑。在更新了 Mac 系统后,可能还需要重新进行配置。
Apache 默认的根目录在 /Library/WebServer/Documents/ 下,你可以通过编辑配置文件中的 DocumentRoot 属性来修改它。
默认的配置文件中,很多常用的模块都没有启用,例如 PHP。在 httpd.conf 中,找到

1
LoadModule php7_module libexec/apache2/libphp7.so

将其行首用于注释的#去掉即可。
如果你使用 Homebrew 或通过源码编译安装了其他的 PHP 环境,就需要把默认的 libphp7.so 的路径替换为你所安装的版本,例如 /usr/local/opt/php/lib/httpd/modules/libphp7.so。具体的安装方法将在后文介绍。
除此之外,你可能还需要配置启用其它模块,例如 mod_rewrite.so。像 WordPress 或者 Nextcloud 这种应用,都自带了.htaccess 文件,用于设置 rewrite 的规则。为了使其能够正确工作,就需要启用该模块。方法是:先找到包含 mod_rewrite.so 的对应行,删除其行首用于注释的#,然后在 Directory 标签下,将 AllowOverride None 改为 AllowOverride All 即可。
httpd.conf 还可以设置很多其它的内容,可以自行寻找教程,此处不再赘述。
还有一件事情是,要确保运行 Apache 的用户(默认为_www)对其根目录有读写权限,可以通过右键点击 Documents 文件夹,选择「显示简介」来修改权限,或通过 chown 命令递归地修改之。

关于 PHP

系统自带的 PHP 版本较旧,可以自行安装新版本。如果使用 Homebrew 安装,执行 brew install php 即可安装最新版本;如果要安装特定版本,先执行 brew search php 查看可用的版本,然后再选择一个自己需要的版本安装,例如 brew install [email protected]
如果要通过源码编译 PHP,可以在此处下载源码。需要注意的是,编译 PHP 时要指定 make ZEND_EXTRA_LIBS='-liconv',否则可能会出现 undefined reference to 'libiconv' 的错误。
安装完成后,仍然可以通过 php -vphp -m 检查环境是否正确。

PHP 拓展

很多 PHP 应用都需要拓展模块的支持,例如搭建 Minecraft 服务器的 PocketMine-MP 需要 leveldb 支持,而生成图片验证码需要 gd2 支持,一些应用可能还需要 redis 等。PHP 支持动态拓展,编译安装后可以通过 php.ini 进行配置。以安装 phpredis 为例,具体步骤为:

1
2
3
4
5
cd /path/to/your/phpredis
phpize
./configure
make
make install

拓展编译完成后,在 php.ini 中加入 extension=redis.so,重启服务后即可启用拓展模块。Mac 系统自带的 PHP 配置文件为 /private/etc/php.ini(把该目录下的 php.ini.default 复制一份),用 Homebrew 安装的则是 /usr/local/etc/php/7.2/php.ini。如果你的软件包安装较为混乱,找不到 php.ini,那么可以通过 php -i | grep "php.ini" 获得它所在的目录。更多方法可以参考:PHP 查找 php.ini

报错信息

如果使用 sudo apachectl start 命令启动 Apache 服务器,是不会显示错误信息的。因此,如果启动失败,还需要使用 sudo /usr/sbin/httpd -k start 查看报错信息。如果是 httpd.conf 配置出现问题,请对照报错的行数进行修改。如果是找不到目录等问题,检查相应的目录或权限即可。


本文更新于 2022 年 2 月 22 日:
macOS Monterey 版本移除了自带的 PHP,并且 Homebrew 安装的 PHP 因缺少签名无法配合系统自带的 Apache 服务器使用。

通过快捷键,可以方便地在 Linux 命令行下快速移动光标、编辑命令、编辑后执行历史命令、Bang(!) 命令、控制命令等,有效提高工作效率。

说明

  • Ctrl+K:先按住 CTRL 键,然后再按 K
  • Ctrl+KL:先按住 CTRL 键,然后再按 K 键,然后松开 K 键,再按 L
  • Alt+K:先按住 ALT 键,然后再按 K
  • Meta+K:先单击 Meta(Esc)键,然后再按 K

移动光标

  • Ctrl+ 左右键:在单词之间跳转
  • Ctrl+A:移到行首
  • Ctrl+E:移到行尾
  • Ctrl+B:往回(左)移动一个字符
  • Ctrl+F:往后(右)移动一个字符
  • Ctrl+XX:在命令行尾和光标之间移动
  • Alt+B:往回(左)移动一个单词
  • Alt+F:往后(右)移动一个单词
  • Meta+B:往回(左)移动一个单词
  • Meta+F:往后(右)移动一个单词

编辑命令

  • Ctrl+H:删除光标左方位置的字符
  • Ctrl+D:删除光标右方位置的字符(注意:Ctrl+D 也代表 EOF,当前命令行没有任何字符时,会注销系统或结束终端)
  • Ctrl+W:由光标位置开始,往左删除单词(往行首删)
  • Alt+D:由光标位置开始,往右删除单词(往行尾删)
  • Meta+D:由光标位置开始,删除单词,直到该单词结束
  • Ctrl+U:由光标所在位置开始,删除左方所有的字符,直到该行开始
  • Ctrl+K:由光标所在位置开始,删除右方所有的字符,直到该行结束
  • Ctrl+Y:粘贴 Ctrl+U Ctrl+K 剪切的内容到光标后
  • Ctrl+T:交换光标处和之前两个字符的位置
  • Alt+.:使用上一条命令的最后一个参数
  • Ctrl+_:回复之前的状态,撤销操作

另外,Ctrl+AK Ctrl+EU Ctrl+KU 组合可删除整行。

阅读全文 »

____擅于发现美的事物,并从中吸收能量,变得越来越好看。
____笑起来像个孩子,把他带在身边,能带来青春永驻的效果。
请多给予____一点睡眠时间。
____偶尔也有像天使一样温柔的时候。
____喜欢自由,适合经常带出去放养。
肚子饿了就会心情不好,带____一起去吃美味的食物吧!
____常常给身边的人带来好运。
____因为太可爱了,会令人陷入沉迷,属于正常现象。
____遇到香喷喷的东西就会变圆。
可能因为材质特殊,____对外界的攻击有折射能力。
____虽然经过多次更新迭代,但依然有颗纯真的心。
____发光的时候,可能会使对象产生短时眩晕,使用时请注意。
____拥有迷之运气,中乐透的实力异于常人。
只要缘分到了,____自己就会瘦下来。
____拥有高性能大脑,可快速运转,但过度工作(学习)容易发热。
____买买买时会释放出强大气场,胆子也会变大。
____常常因为无法体验人类的乐趣而神伤。
____是能带来元气和灵感的谜之吉祥物。
____心心念念的梦,会在某个不经意的时候实现。
____的光芒太耀眼,但也不至于会刺瞎别人。
____历经严苛质检品控,是市面上难得一遇的珍品。
只要对____倾注感情,他就能成为最可靠的伙伴,遇到危机可无限次召唤。
____的出厂设定就是温暖的守护者,也是周围人快乐和活力的源泉。
____有极为罕见的感官知觉,对他说谎可不是明智之举。
____装备了精准的探测仪,能发觉并把握住人生中真正的机会。
____能通过每次挑战完成升级,获得更高的智慧和运气。
____具备安全与稳定性,是居家、旅行必备的小能手。
____能快速拆卸烦恼,重新制作出充满乐趣和创造力的产物。
变态(萌)是____的常态。
保温杯和泡脚桶,可延长____的使用寿命。
____偶尔会孤单,但也能享受孤单,是一款自由的产品。
____对时间的感知力弱,所以不知不觉又加班了。

阅读全文 »
0%