BiliOB开发日志 #02

今天添加一些早就想加入的功能,一个是评论,一个是up主列表。

阅读全文

BiliOB开发日志 #01

我决定在编程的同时,对编程时遇到的问题进行同步的思考和记录,这样更能节省时间,免除了事后记录的痛苦之感。

不知为何,BiliOB的Alexa排名一直在降低,最近甚至排出了榜外。于是决定进行一次SEO优化。我使用woorank对网站的SEO进行检测。

阅读全文

Travis-CI深坑:如何解决Bad decrypt问题?

在windows下,使用travis-cli命令行工具遇到如下错误:

1
2
3
bad decrypt

140356638541472:error:0606506D:digital envelope routines:EVP_DecryptFinal_ex:wrong final block length:evp_enc.c:532:

阅读全文

Travis-CI 自动构建前端项目

之前一直使用的是Jenkins。Jenkins是一个更加方便的自动化持续集成工具。之所以抛弃它是因为由于我本人没有闲置的服务器,因此这玩意必须要本地部署。考虑到不久的未来会更换电脑,重新部署Jenkins也比较麻烦;再加上不久之前,我本地的Jenkins由于未知原因出现崩溃,不断地卡我硬盘,花了很长时间才找到出现卡硬盘问题的原因……综上,我决定逐步取消使用本地Jenkins。由于我的代码大多都开源在了GitHub上,而Travis对GitHub的支持最好(实际上是只支持GitHub)。于是我决定使用Travis-CI对代码进行持续集成。

阅读全文

对Jannchie见齐的采访

这是一次采访。一群来自人大新闻学院的学生最近在做一个关于学生群体的视频发布和直播状况的报道。这是他们的一个课程作业,问题不多。虽然他们能够保障采访对象的隐私,但我觉得开诚布公地发布出来也没什么问题。(反正,字码了也是码了,藏着掖着实在是浪费。

阅读全文

MongoDB大小写不敏感查询

Mysql中,查询对于大小写是不敏感的,比如查询ABc会同时查询出abc,abC的值。

然而在MongoDB中,查询对于大小写是敏感的。

对于小规模的数据,我们可以使用$regex来解决这一问题:

阅读全文

可视化曲线图最大值算法

我希望曲线图的最大值只会增大不会减小,考虑下列算法:

第一种实现是这样的:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// 获得一个从start开始,end结束,步长为step的数组
let range = (start, end, step) => {
let current = start;
let result = [];
while (current < end) {
result.push(current - start);
current += step;
}
return result;
};
// 检查点的x轴坐标
let xRange = range(0, width - margin.left - margin.right, 200);
// 坐标最大值为所有检查点的最大值
maxVal = d3.max(
xRange.map(e =>
yScale.invert(d3.min(pathsDom.map(path => getYFromX(path, e))))
)
);

阅读全文

Scrapy爬虫优化

BiliOB 观测者的最近一次更新后,服务器内存占用飞速提高,经常因为内存不足 Kill 掉 Mongodb 数据库以及 Spring boot 的后端服务。

出现这种问题是在爬虫更新后。我在爬虫中引入了结巴分词模块,对弹幕进行分析。

阅读全文

消息队列与分布式爬虫

我已经实现了一个爬虫系统。这个爬虫系统能够定时地爬取 Bilibili 的视频以及作者,并保存历史数据。

这个爬虫运行得十分良好,但是还有很多不足的地方。比方说,这个系统的生产者(产生待爬取链接的服务)以及消费者(获得爬取链接去爬取内容的爬虫)是紧密地耦合在一起的,非常不利于系统的扩展。此外,由于爬取对象的 API 调用速率限制,单机所有爬虫对单个 API 的爬取速率不能太快,不能在短时间内爆发大量的请求。此外对临时的请求,我的系统不能很快地做出反应。因为原先的爬虫系统是定时爬取的,只有在某些固定时刻开启爬虫。

阅读全文

滑动窗口算法-无重复字符的最长子串

无重复字符的最长子串是一个非常简单的问题。实现起来不难,但如果想要高效率地实现这个功能,其中的算法并没有那么直观。

阅读全文