在 Kindle 电子书上部署 Node.js 运行环境

如你所见,流行的脚本语言如 Python, Lua 都被各路大神移植到了 Kindle 上, 为什么 JavaScript/Node.js 不可以呢?经过一番搜索后我发现,这方面的研究鲜有人进行过,只找到了寥寥几篇老外写的文章,而且年代都十分久远,几乎没有参考价值. Node.js 主页虽然提供了 ARM 架构的预编译二进制包下载,但都只适用于支持硬浮点的设备,不能用于 Kindle. 好吧,那就自己动手,丰衣足食.

Continue reading

Frog Fractions 通关纪念

Frog Fractions 也是久仰大名了,今天闲来无事玩了一把,真不愧是宇宙级神作,作者的脑洞简直突破天际.特别特别喜欢飞船那一段,几年前在手机上玩过一款游戏叫 HackRUN 就是这种风格,太有意思了.因为之前读了不少关于这游戏的文章(当然,我尽量没看剧透部分),所以刚开始玩的时候也没那么懵逼,不过后面的神展开还是挺让我吃惊的.总的来说,是令人印象深刻的一次有趣的游戏经历.

作者也是厉害. Frog Fractions 2 的 ARG 据说持续了 2 年之久,号召了 24 个独立游戏团队参与,这样的创意和组织能力实在是不简单.可惜的是我到去年下半年时才知道了这个 ARG (也就是 The Sigil 之谜),没有切身参与其中.前些天看到一篇记叙整个 ARG 经历的文章,太令人惊讶了,世界上怎么能有如此有趣的事情?

以上.如果你是核心向的小众游戏玩家,这个游戏一定要玩.

(那首叫 Pond Life 的 BGM 谜之好听啊~)

哇!这个破网站居!然!两!岁!辣!

白驹过隙, I'm Nota! 的生日又到了.虽说已经过去好几天了,但还是应该写篇文章纪 (shua) 念 (cun) 纪 (zai) 念 (gan). 两年间,本站从一个无人知晓的小站成长为了一个无人知晓的小站,访问量持续低迷,搜索引擎收录情况不如人意.但是!即使如此我还是很满意的,毕竟有一个自己的网站,不管有没有别人来看,自己看着都会觉得很开心啦.访问量什么的问题,交给时间来解决吧. Continue reading

phpMyAdmin 提示"配置文件现在需要一个短语密码"警告的*真正的*解决办法

这也算是一个常见问题了.可惜的是,我用百度或者 Google 搜到的中文资料,几乎全都是复制粘贴的内容,而且给出的解决方法居然是修改 config.default.php 文件卧槽,这么大个 DO NOT EDIT 各位都是没看到吗?所以本文就来说说怎么安全地,优雅地解决此问题.

如果你是通过 Fedora 包管理器安装的 phpMyAdmin, 那么它会默认使用 /etc/phpMyAdmin 作为配置文件目录(其它的 Linux 发行版,如 ArchLinux 邪教所使用的的目录可能不是这个).在 phpMyAdmin 安装目录下找到 config.sample.inc.php, 复制到 /etc/phpMyAdmin 中,并重命名为 config.inc.php. 这个文件中有大量配置项需要你修改,不过我们只关注

$cfg['blowfish_secret'] = ''; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */

这一行.正如注释所言,你需要在引号内输入大量随机字符,脸滚键盘,越乱越好,越长越好.然后保存文件.此时,由于权限原因,这份配置文件很有可能无法被 phpMyAdmin 正常读到内容.解决办法也很简单.假如你的 PHP-FPM 用户为 www-data ,那么执行

chown -R root:www-data /etc/phpMyAdmin/

即可.

对了, config.sample.inc.php 这个文件可以在 phpMyAdmin 安装目录下找到.如果没有,可以试试 /usr/share/doc/phpMyAdmin/examples/config.sample.inc.php .

以上.

解决从 Caddy 服务器下载文件时出现的网络错误

前几天捣鼓了一个私人网盘出来,使用过程中发现下载文件时经常失败,具体表现是刚刚开始下载时一切正常,几秒钟后突然停止,告诉我网络错误.经过一番研究后,我发现这是服务器超时时间设定的问题.解决办法很简单,在 Caddyfile 中加入:

timeouts none

重启服务器即可.

需要注意的是,不同于 Caddy 的其它配置项, timeouts 是强制应用于全局的.也就是说,假如你的 Caddyfile 类似于这个样子:

a.test.com {
    timeouts none
    #other directives
}
b.test.com {
    #other directives
}

那么 a.test.com 和 b.test.com 的超时都会被设定为 none. 就这个问题,我询问了 Caddy 作者 Matt 大神,得到的答复是,受到 Go 语言标准库的限制, 我们是没有办法为多个站点设置不同的超时的.不过这个问题在未来可能会被修复.

参考:
Caddy 官方文档
https://caddyserver.com/docs/timeouts
我在 Caddy 社区的提问
https://forum.caddyserver.com/t/network-error-when-download-file-form-server/1382

以上.