基于 Mailgun 的 Typecho 评论邮件提醒插件

很多时候,在 WordPress、Typecho 等自建评论系统的网站中回复,只能靠自己不断访问来确定自己的评论有没有被别人回复。然而,对于大多数人来说这样做是非常麻烦的。博主解决问题的常用方法,就是安装邮件提醒插件。当一名评论者的评论被回复,就会有邮件提醒评论者。Typecho 上使用最广泛的插件是 CommentToMail,最早由 DEFE 开发,后来由 Byends Upd 接手。该插件通过常用的 PHP Mail,SendMail 或者 SMTP 来发送邮件。但是,比起以前的注册一个邮箱来发提醒邮件,现在博主们也开始使用 Mailgun 之类的邮件平台。这类邮件平台提供 API 发信功能,不需要再进行复杂的 SMTP 发信设置,也不需要繁杂的处理代码。我就对这个插件进行修改,让它通过 Mailgun API 而不是 SMTP 发送邮件。GitHub 项目地址:https://github....

将网站迁移到 Docker

Docker 是一个 Linux 下的容器管理软件。每个容器某种意义上相当于一个 OpenVZ VPS,可以将服务器上的各个应用隔离开来。这种隔离有助于同一软件不同版本,或是互相冲突的软件在同一服务器上运行,比如 MySQL 5.7,MySQL 5.6 和 MariaDB 10.1 可以在同一台服务器上的三个 Docker 容器中运行。但是 Docker 比 OpenVZ 优秀的地方在于,它对 Linux 内核的版本要求要宽松的多。OpenVZ 的内核至今为止停留在 2.6.32(稳定版)和 3.10(开发版),但是 Docker 可以在 3.10 以上的任何版本 Linux 内核运行。我的服务器现在运行 Linux 4.9 内核(为了 BBR),明显不能运行 OpenVZ,但是可以运行 Docker。Docker 另一个优点是提供了一套非常完整的镜像仓库和自动化工具。在 OpenVZ 上,我必须分别登录每台 VPS,设置网络,apt-get,还要定期去每台 VPS 上备份数据。但是在 Docker 上,我可以直接使用现有的软件镜像(不用再 apt-get),...
插图

一次 Linux 内存泄漏的排查

起因我最近在用 PHP 写一套自己的 VPS 监控系统,包括 VPS 端和显示端。今天下午 3 点,我给监控系统加上了监测 VPS 上服务的运行情况的功能。由于我的 VPS 统一使用 Debian 8 系统,我使用了 service --status-all 作为获取服务运行情况的方式。在测试正常后,我去干其它事了。晚上 9 点多,我看到了 NodeQuery 于 7 点给我发的报警邮件,提示我的某台 VPS 内存占用过高。我打开监控系统一看,这台 VPS 的内存占用达到了 400M / 500M。不仅如此,另一台 VPS 也内存暴涨,达到了 600M / 1G,但因为总内存大没有触发报警。问题是,这两台 VPS 都只安装了 SS 和锐速,怎么可能占用这么大的内存?我登上其中一台,用 ps -aux 查看进程列表,却发现没有任何进程占用了这么大的内存。锐速背锅?我第一时间怀疑的是锐速。众所周知,锐速官方关闭了新用户的购买和下载安装通道,因此我们只能使用破解版的锐速。/serverspeeder/bin/serverSpeeder.sh stop 关闭锐速后,...

Bilibili 弹幕过滤工具

随着 Bilibili 用户的增多,不少小学生也进入了 B 站,并且发布了大量不合弹幕礼仪的弹幕,对其他用户观看视频造成了极大的影响。不少用户甚至因此彻底关闭弹幕,但不看弹幕用什么 B 站?我自己用 Python 3 写了个小程序以过滤掉小学生弹幕(同时这个程序也是最近编程课 Python 的练手)。程序可以在 https://github.com/xddxdd/bilibili-dmshield 看到。可以通过将 comment.bilibili.com 的 IP 通过 hosts 文件指向 127.0.0.1,或者通过 FoxyProxy 或者 SwitchyOmega 等插件将 comment.bilibili.com 的代理指向程序的代理端口,来使用过滤功能。程序功能如下:1. 顶端底端弹幕过滤:只保留科普君(短时间发送多条顶端底端弹幕)和字幕君(整个视频中发送多条顶端底端弹幕),其它全部重设为滚动弹幕。2. 智能关键词过滤:对于某些关键词(如金坷垃),仅当它在弹幕中大量出现时才会放心,不影响与这些关键词本身相关的视频观看。3. 长弹幕截断:...

Bilibili 底端弹幕转 LRC 工具

Bilibili 上从来不乏各路大神的作品,包括各类原创音乐、翻唱,还有带感的鬼畜。有时我们想把它们保存到一些能放音乐 + 歌词,但不能放视频的设备上(比如某些 MP3),或者把它们作为 BGM 在后台播放并在桌面上显示歌词。问题是,许多优秀的作品是无法在主流音乐软件里找到的,即使某些作品能在音乐软件里找到(例如传说和 B 站有一腿的网易云音乐),某些作品一时也没有歌词可用(尤其是新作品)。但是,当你打开 B 站的弹幕,有许多野生字幕君已经做好了底端弹幕。我们只需要将这些弹幕的时间轴和内容提取出来,就可以快速生成歌词文件(如 LRC)了。我用 Python 写了一个小程序来帮我干这事。这个程序可以在 https://github.com/xddxdd/bilibili-danmaku2lrc 下载到。要注意的是,这个小程序依赖 Python Requests 模块,需要先输入以下代码安装:pip install requests # Python 2pip3 install requests # Python 3程序运行示例如下:lantian-macbook:...

GetIPIntel 的 Typecho 插件

GetIPIntel 的介绍可以在刚刚这篇文章看到。我写了一个 Typecho 的插件,可以阻止使用代理的访客评论,或者把他们的评论丢进垃圾箱。功能:多种模式选择(仅黑名单,快速检查,全面检查)多种处理措施(人工审核,丢垃圾箱,提交失败)自定义阈值插件可以在 https://github.com/xddxdd/typecho-getipintel 下载到。把 GetIPIntel 文件夹丢到 usr/plugins 文件夹下面就行。...

GetIPIntel 反欺诈服务

没人知道在网络上和你聊天的是一个人还是一条狗。网络的匿名性给网络欺诈带来了很大方便。前几年,有几位学生站长联盟里的站长邮件地址泄露,有好事者就挂上 Go^_^Agent 用他们的常用网名和邮件地址辱骂联盟里其它博客的博主,闹得鸡飞狗跳。人人都会开的 Akismet 明显没起到什么作用,事后屏蔽 IP 也起不到什么作用(那个捣乱的人都是打一枪就跑)。而当时流行的一些反欺诈服务,比如 MaxMind,都要高额的使用费,不是普通站长承担得起的。但现在,时代不同了!GetIPIntel 是一位机器学习和网络安全方向的美国研究生的项目。它使用机器学习技术,综合考虑一个 IP 的各项数据,从而判断来自某个 IP 的访客是不是开启了 VPN,TOR 一类代理。这个服务不需要你付任何费用(但接受捐赠),甚至不需要手动注册。你只需要在请求他们的 API 时带上你的邮件地址,然后回复可能会发给你的验证邮件即可。这个服务有 4 种模式:1. 只检查某个 IP 是不是已知的 VPN,...
插图

Rummy 拉米纸牌记牌程序

英语课上,外教给我们介绍了 Rummy 这种纸牌游戏。这种纸牌游戏没有官方规则,因此在民间有多个变种。外教给我们介绍的这种规则如下:游戏需要至少一副扑克牌,取决于人数,去掉所有的大小王。开局时,每人发到 7 张扑克牌。发牌结束后,将牌堆顶的一张牌翻开放在一边。每位玩家行动时,需要如下操作:1. 选择从暗牌堆中拿最顶上的一张牌,或者从一边的明牌堆中取出任意数量的牌。当你从明牌堆中取牌,你必须在本回合内按照 2 所述条件使用掉你取到的最下面一张牌。(不能留在手里,不能弃掉)2. 当你手里的牌符合一下条件,可以将它们放置在你的桌面上:2.1. 有至少 3 张同花的牌组成顺子,例如草花 A23,黑桃 10JQ,红桃 QKA。(KA2 不算)2.2. 有 3 张或 4 张数字相同但花色两两不同的牌。例如,黑桃、红桃、草花 3 是符合规定的,而黑桃、黑桃、红桃 3 不符合规定。后一种情况仅可能在使用多副扑克牌时出现。2.3. 有一张牌,可以接续如 2.1 和 2....

沃通你咋不上天呢!

刚在 V2EX 上看到,有人利用沃通证书签发系统的漏洞,成功签出了一张 GitHub 主域名的证书。https://crt.sh/?id=29647048Certificate: Data: Version: 3 (0x2) Serial Number: 5d:8f:2b:91:ef:b8:dd:65:af:4c:c1:2b:15:ef:4b:6e Signature Algorithm: sha256WithRSAEncryption Issuer: commonName = WoSign CA Free SSL Certificate G2 organizationName = WoSign CA Limited countryName = CN Validity Not Before: Jun 10 05:42:44 2015 GMT Not After : Jun 10 06:03:35 2018 GMT Subject: commonName = schrauger.github.io Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit)...

A Javascript for time crowdfunding calculation

In the old Eastern country with mysterious magic power, a minute will pass every 59 seconds.var toad = new Date();var secondsDonated = Math.floor((toad.getTime() + 1368835200000) / 59000);toad.setTime(toad.getTime() + secondsDonated * 1000);toad.toLocaleString();-1368835200 is the UNIX timestamp of his birthday, and the trailing zeroes are added because time is calculated in milliseconds in Javascript.By donating your time, you are identical to a person living in outside China.You and each person has donated seconds. That is years, days, hours, minutes and seconds.function crowdFund() {var toad = new Date();var secondsDonated = Math.floor((toad.getTime() + 1368835200000) / 59000);$('#time-crowdfund-donated').text(secondsDonated);$('#time-crowdfund-second').text(secondsDonated % 60)...