米米的博客

做了一点微小的工作

借助这个项目,你可以在 GitHub 热点图(动态图)上绘制图案,并由此生成 Shell 脚本;在空项目中执行该脚本,便能创造过去的 commit 记录;而将该项目 push 到 GitHub 上,你的热点图就变得和绘制的图案完全相同。

Git Draw

项目地址:git-draw
原项目是一个 Chrome 插件,由于长期没有维护,且 GitHub 改变了页面结构,导致插件不可用。新项目重写了部分 JavaScript 代码,使得其能够正常运行。快来试试吧!

2018 年 CUPT 的第一题:

Invent Yourself
Construct a simple seismograph that amplifies a local disturbance by mechanical, optical or electrical methods. Determine the typical response curve of your device and investigate the parameters of the damping constant. What is the maximum amplification that you can achieve?
自主发明
建造一个可以通过力学、光学或电学方法放大局部扰动的简单地震仪。确定你装置的标准响应曲线并且研究阻尼常数的参量。你能达到的最大放大率是多少?

此题的关键便是将地震仪的反应谱通过可观测量进行表示。实现的思路有很多,力学、光学或电学方法都是可行的。综合考虑了实现难度和测量精度后,决定采用以下方案:通过力学方法放大震动,然后利用霍尔片和磁铁将力学量转换为电学量,借助 Arduino 单片机的模数转换,通过串口将信号输入到电脑,电脑用 Python 监听串口,将获得的数据保存并实时分析、绘图。

仪器的整体构造如图:

仪器的整体构造

阅读全文 »

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 服务器使用。

0%