Lan Tian @ Blog

将网站迁移到 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)...

一次 Linux 内存泄漏的排查

起因我最近在用 PHP 写一套自己的 VPS 监控系统,包括 VPS 端和显示端。今天下午 3 点,我给监控系统加上了监测 VPS 上服务的运行情况的功能。由于我的 VPS 统一使用 Debian 8 系统,我使用了 service --status-all 作为获取服务运行情况的方式。在测试正常后,我去干其它事了。晚上 9 点多,我看到了 NodeQuery 于 7 点给我发的报警邮件,提示我的某台 VPS 内存占用过高。我打开监控系统一看,这台 VPS 的内存占用达到了 400M / 500M。不仅如此,另一台 VPS 也内存暴涨,达到了 600M / 1G,但因为总内存大没有触发报警。问题是...

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 的代理指向程序的代理端口,来使用过滤功能...

Bilibili 底端弹幕转 LRC 工具

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

GetIPIntel 的 Typecho 插件

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

GetIPIntel 反欺诈服务

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

Rummy 拉米纸牌记牌程序

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

沃通你咋不上天呢!

刚在 V2EX 上看到,有人利用沃通证书签发系统的漏洞,成功签出了一张 GitHub 主域名的证书。https://crt.sh/?id=29647048 Certificate: 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: common...

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.