为 Hexo 博客添加隐藏文章 / 限定公开功能

隐藏博客中某些特定的文章应该算是一个比较常见的需求,毕竟谁都有些不希望让别人看到的东西。当然啦,你可能会说,「不想被看到就不要放到博客上来嘛」。话是没错,不过有时候人就是这么别扭,想让某些文章被看到,却又不想被所有人看到,又或者是某些文章只想和自己熟悉的人一起分享。

于是我写了一个 Hexo 插件 hexo-sage-posts 来实现这个需求(网上也有一些关于 Hexo 隐藏文章的教程,不过一般都要求修改主题文件,还是我这样写个插件更通用一些)。它的功能如下:

  • 在博客的所有文章列表中隐藏指定的文章(包括首页、存档页、分类标签、Feed 等);
  • 被隐藏的文章依然可以通过文章链接直接访问(比如 https://hexo.example/{slug}/);
  • 除非知道链接,任何人都无法找到这些被隐藏的文章。

如果你用过 YouTube,应该会比较容易理解这一套逻辑。当一个 YouTube 视频被设定为 限定公開(这是日文的译文,我觉得这个比较贴切。中文译作「不公开」,英文为 Unlisted)时,这个视频就是 只有知道链接的人才能访问,既不会显示在频道中也不会被搜索到。本插件就是借鉴抄袭的这个功能。

阅读全文→

Windows 下手动搭建 PHP + Nginx/Apache 开发环境

看到这个标题,有人可能会想吐槽:

你他娘的写了这么久 PHP,怎么现在想起来搭建开发环境了?

呃,情况呢是这么个情况,我之前开发的那个 PHP 项目 (printempw/blessing-skin-server) 在两个月前发布 v3.5.0 版本后基本就已经告一段落了。虽然我本意是不再更新(弃坑的委婉说法),因为当前的版本已经足够完善,该有的东西都有了(而且说实话搞了这么久我也腻味,不仅是对这个程序,还有对国内 Minecraft 开发生态以及用户群体的失望)。

不过我的朋友 g-plane 说他愿意接坑,所以现在这个项目的后续开发都是他在搞。而我也乐得清闲,做个甩手掌柜 搞别的 去了。当我摸鱼正快活时,他过来联系我说准备发布 4.0.0-alpha 了,我才想起来这茬:「啊,我连新版本长啥样都还不知道呢!😂」于是急急忙忙 pull 了新代码准备 review 一下,却发现我的新笔电上甚至压根儿就没安装 PHP 开发环境,只能说是非常地真实。

因为 某些原因,我不想继续使用那些 PHP 一键包来搭建开发环境了,所以这次我打算全部自己来。本文记录了我手动安装配置 PHP + Nginx/Apache 开发环境的过程,希望能帮到后来人。

注意,本文中的配置适用于本地开发环境,应用至生产环境时要注意哦。

阅读全文→

一种监测 VTuber 直播并自动录像的方法

首先是惯例的闲聊时间。

虽然这是我第一次在这个博客中提到 Virtual YouTuber,不过我大概也算是比较早开始看 VTuber 的那一批人了。从始皇帝老爱(キズナアイ)诞生、四天王聚首,到年初 狐叔 引领的个人势井喷,再到以彩虹社(にじさんじ)为首的 2D 势、杂谈生放势展示了 VTuber 更大的可能性,而注意到这块肥肉的资本们也纷纷入场,百花争鸣的 VTuber 战国时代就此拉开序幕……如此种种,VTuber 界的快速发展令人眼花缭乱,也难怪有「一个月 = VTuber 历一年」的说法。

不如说 VTuber 的世界实在过于精彩,每天都有大量好玩的内容产出,以至于我甚至已经很久没有看新番动画等传统 ACG 作品,就连游戏也不玩了,只能说 VTuber 沼恐怖如斯。

meme_i_am_ok

为什么突然谈起这茬?其实我一直都想写一篇关于 VTuber 的文章,但是当时由于学业之类的原因只能搁置。然而到了现在,时间和精力确实是有了,但是正处繁荣期的 VTuber 市场的复杂度,却已经不再是我这孱弱的文笔能够描绘的了。只能说,非常遗憾。

既然写不出来,那就不写,这是我写博客的标准。如果参考别人的文章照猫画虎、东拼西凑,确实是能挤出一点像样的文字,但那种中途半端的东西又有什么意思呢?我写博客是给自己看的,不是拿去哗众取宠的。所以,牛逼的文章就交给牛逼的人去写,我只管写我自己能写得出来的东西就够了。

好了,闲话休题,今天我们的主题是「如何对 VTuber 的直播进行自动录像」。

阅读全文→

phpStudy 访问探针页面出现 502 Bad Gateway 的解决方法

不要问我为什么要用 phpStudy,我也不想。

TL;DR 太长不看

Windows 环境下的 PHP 7.2.1 / 7.1.13 这两个版本有问题,在执行 getenv() 函数且第二个参数为 false 时,会造成 PHP FastCGI 进程 ( php-cgi.exe ) 崩溃。这是一个已知的 BUG,并且已经在 2018-02-01 发布的 PHP 7.2.2PHP 7.1.14被修复 了。

然而遗憾的是,你现在(截至发稿日 2018-10-21)能在 phpStudy 官网下载到的最新的集成环境,其中的 PHP 版本依然停留在 7.2.1 与 7.1.13。惊不惊喜,意不意外?

phpstudy-fake-version-7210

最绝的是,phpStudy 明明自带的是 7.2.1 版本的 PHP,却在界面上显示成了 7.2.10,是我瞎了还是你瞎了?补零也不是你这么补的啊兄弟……

修复方法也很简单,升级 PHP 版本即可

下面开始讲废话。

阅读全文→

新的网络昵称:PRIN 🍮

这不是我第一次这么想:

我的常用 ID printempw 太难读了。

有多难读呢?难读到连我自己都不知道这玩意该怎么读。

这个 ID 的词源是法语的 printemps(春天,春季),将这个单词尾部的 s 替换为 w 后……才怪嘞!我又不会法语,怎么可能是这么高大上的理由嘛(笑)。虽然词源确实是法语,但这个单词是我看了《LoveLive!》后才知道的 —— Printemps 同时也是企划中 高坂穗乃果、南ことり、小泉花阳 组成的 μ’s 三个小分队之一。当时正好沉迷 LL,取 ID 时顺手就用了这个,因为 printemps 已经被占用了就稍微修改了一下变成现在的 printempw ……

嗯,真的是个怎样都好的理由。XD


关于读音,法语单词 printemps 的读音是 [prɛ̃tɑ̃],LL 中 printemps 的读音是 [プランタン](到这里就改得没原型了……日本人的外来语发音一如既往地奇妙),按照英语的发音习惯 printemps 大概可以读成 [prɪnˈtemps],而将单词尾部的 s 修改为 w 后应该读作……

meme-duck-question-mark

因此,这几年我一直致力于给自己起一个简单易懂、中日英三语都易于发音、和 printempw 这个常用 ID 有关联、最好能够可爱一些的昵称,但是苦于一直找不到合适的。

然而就在前几天的高数课上(?),我灵光一闪:

printempw -> PRIN -> プリン -> 🍮 -> 布丁!

唉,我他娘的可真是个天才。(不)


情况呢就是这么个情况,这就是我以后的昵称了:

  • 书写:PRIN(中文语境下也可以写成 布丁);
  • 读音:[プリン] 或者 [prɪn]
  • 变动的只是昵称,ID printempw 依然保持不变;
  • 当然,你不用这个称呼我也不会介意的。:P

以后博客标题可能也会作出改动,请多关照。🍮

使用 VS Code 搭建适用于 ACM 练习的 C/C++ 开发环境

大学入学也快一个月了,总的来说,我过得很开心,不枉我花费一年的时间 高考复读。具体哪里令人开心呢?我觉得最主要的是,比起初高中,大学的时间分配更为自由。

中学时代,学生的时间基本都被学校安排得死死的:早上什么时间必须到校,然后开始早读、上午五节课下午三节课、晚读、晚自习,最后在规定的时间离校(住宿生还要在规定的时间就寝),可以自由分配的时间少得可怜,在某些管理严格的学校甚至连人身自由都要被限制。虽然学生们苦中作乐的摸鱼技巧也不容小觑,但考虑到升学的压力,如果在兴趣上分配的时间过多,很有可能就会像我去年一样落得个无法升学的尴尬境地。

而大学相对来说就没有那么多破规矩:有课就上,没课的话时间就随你安排,回寝室睡觉也好出门嗨皮也罢,突出一个爱干嘛干嘛。在这些闲暇时间里,有人选择加入社团以及各种各样的学生组织,有人寻欢作乐讴歌青春,有人一头扎进自己的兴趣爱好中,也有人选择当个快乐摸鱼侠无事一身轻。

而我就比较硬核了,我选择参加可能让我基本告别头发的 ACM 程序设计竞赛(不)。

cs-no-hair

好啦言归正传,今天我们的主题是在 VS Code 编辑器中搭建适用于 ACM 练习的 C/C++ 开发环境。

阅读全文→

WSL 配置指北:打造 Windows 最强命令行

在两年前的八月,Microsoft 正式发布了 Windows 10 Anniversary Update 周年更新(它还有着 RS1,Version 1607,Build 14393 等一大堆别名)。其中最让包括我在内的众多开发者感到兴奋的特性之一,就是 WSL(Windows Subsystem for Linux,当时还叫 Bash on Ubuntu on Windows)的正式加入。

在 Windows 上原生运行 Linux 可执行文件,牛逼疯了!

然而 Bug10 也不是浪得虚名,原本只提供给 Insider 的 WSL 在正式发布后依然问题多多(不仅 zsh、tmux 等工具无法使用,网络相关的操作更是一概欠奉,还有各种各样 奇妙的 BUG),基本没有可用性,我在尝鲜了一段时间后也不得不重回 Cygwin 的怀抱。不过好消息是,在之后的更新中,这些 BUG 都已被逐一消灭

经过了两年的发展,WSL 已经足够成熟,我也是时候完成这篇一咕再咕的博文了。

(开学在即,仓促成文,如有谬误,还请指正。)

get-wsl

阅读全文→

添加 Notepad++ 至右键菜单的几种方法

作为一名即将开学的计算机系 准大学生,笔记本电脑总归是要有一台的。于是上星期我入手了 小米游戏本顶配版(i7-8750H + 16G + GTX 1066),最近正在重新折腾开发环境,这篇文章要解决的问题也是在此过程中出现的。

至于为什么要买小米的本子,主要是因为它的「游戏本性能 + 商务本外观」这一点正戳中我好球区。不过这几天使用下来,只能说缺点确实不少,有购买意愿的朋友需谨慎。在 Twitter 上搜索 小米游戏本 from:printempw 就能看到我发的吐槽简评,如果之后有时间的话也打算专门写篇评测(咕咕咕)。

回到正题。因为以前家里的电脑是全家共用的所以没什么,不过最近有了自己的电脑,我的软件洁癖就上来了:绿色版(便携软件,Portable Application)的绝不用安装版,国产软件一律扔沙盒运行。

看起来有点偏执,不过我就属于那种想把自己设备中的一切纳入可控范围内的人。Windows 在这点上就很讨厌,尤其是注册表的设计,比类 Unix 系统难管理了不是一点半点。在手机上也是一样,不能解锁 bootloader 的 Android 机器我绝对不会购买,AppOps、Magisk、存储重定向 等工具更是必备。虽然我也没偏执到「每条指令运行都需要我的许可」那种程度,不过至少,我的设备必须听我的话,我说什么不能做那就是不能做,你他娘的不能给我自作主张(比如 Windows 广受诟病的自动更新机制、某些臭名昭著的国产软件扫描用户硬盘等)。为什么?因为是我在用电脑,不是电脑用我。

好了言归正传(没错,本博客就是有在进入正题之前瞎扯一通的习惯)。

Notepad++ 是一款我很喜欢的文本编辑器,除了写代码和写文章外的一般文本编辑工作我都是使用它完成的,配置新电脑时自然不能少了它。我下载的是 Portable 便携版,不过也正因如此,原本在 Installer 中通过选项可以添加的 Edit with Notepad++ 右键菜单项也没有了(此操作需要写注册表)。

因为这个右键菜单还蛮好用的,所以我打算把它找回来。

npp-context-menu-demo

阅读全文→

博客迁移至 GitHub Pages

就在刚才,我把博客完全迁移到了 GitHub Pages 上。

为啥呢?简单来说,就是我懒得维护服务器了。

去年十月份,我为博客添加了 Travis CI 自动构建流程,发布新博文只需要把 Markdown 源码 push 至 GitHub 上的仓库,CI 会帮我自动完成后续的所有步骤,很适合我这种懒人。

在我的 CI 脚本中,博客构建完毕后会把构建结果 同时推送 至 GitHub Pages 和我自己的服务器。由于我之前一直是在自有服务器上部署的动态博客程序(WordPress、Ghost),一直用下来也没什么不妥,所以当时我也只是把 GitHub Pages 当成一个备胎,博客域名依然是解析到自有服务器上的。

但是最近我想了想,把博客部署在自己的服务器上,有几点不好:

首先是服务可用率。我是个穷屌,只有一台 DigitalOcean $5 的机器,既没有负载均衡,也没有冗余服务器。如果这台机器宕掉了,那博客就只能跟着下线,谁也访问不了。而且事实上我的服务器就有好几次莫名其妙出现过 Kernel Panic,收到监控报警后只能灰溜溜地去登录控制台重启服务器。

另外就是,我想在这个世界上留下点什么东西。如果博客放在我自己的服务器上的话,假如我出了啥三长两短、服务器久了没人管理,那我的博客很有可能就烟消云散了,多难过啊。

不过当然啦,要是那么在意这个的话,我就去用 Medium 这类写作平台,而不是自建独立博客了。我觉得 GitHub Pages 这类托管服务算是一个不错的平衡点,既保留了独立博客的风格,又不用特别去担心服务器的问题,自己只用操心内容就够了,挺不错的。

命令行界面 (CLI)、终端 (Terminal)、Shell、TTY,傻傻分不清楚?

诸君,好久不见。

为什么突然想写这样一篇文章呢?其实是因为在最近计划发布的一篇关于 WSL (Windows Subsystem for Linux) 的博文中,我打算对终端模拟器、Shell 的选择与配置进行一些说明。不过对于刚接触 Linux 或者刚接触命令行界面的同学,可能会有些难以理解它们之间的区别(事实上我当初也是这样)。

虽然这个话题已是老生常谈,搜索一下应该也能找到大把的相关文章。不过难得提到了这方面,就趁此机会把我的理解写下来,一来看看我是不是真正理解了,二来看看我能不能把它们之间的区别讲得更加简明易懂。

0. 太长不看 TL;DR

  • 命令行界面 (CLI) = 使用文本命令进行交互的用户界面
  • 终端 (Terminal) = TTY = 文本输入/输出环境
  • 控制台 (Console) = 一种特殊的终端
  • Shell = 命令行解释器,执行用户输入的命令并返回结果

1. 什么是命令行界面?

命令行界面,通俗来讲,就是你看过的那种满屏幕都是字符的界面。

阅读全文→