SCHeng

It all returns to nothing.

summer

我的中国开源之夏2021

scheng

今年中科院软件研究所的summer2021活动我参与的是EAF社区(Emacs Application Framework),具体内容可以查看这个链接:Emacs EAF:基于Vue.js实现RSS新闻阅读器,主要的任务是基于EAF框架实现一个Emacs的RSS阅读器。

因为去年参加的OI Wiki社区的撰写文章的活动是完全在我的舒适区内的任务,以后不再继续参与算法竞赛了,并且打算学习一些新东西于是选择了EAF的Emacs EAF:基于Vue.js实现RSS新闻阅读器

项目仓库,eaf-rss-reader

RSS-Reader1

申请流程

去年的申请流程可以查看这篇文章,
Summer 2020 从申请到结项

今年年初到3月份一直无所事事,寒假看了一些科普书,因为当时以为上半年不会有比赛了,所以没怎么写算法题,也没有去看开源项目相关的事情。到了三月末突发想到似乎快gsoc了,于是打开gsoc的页面看了一眼…发现再过两天就开始投proposal了…于是马上开始看gsoc的项目,同时也看了一下中科院这边的暑期活动,中科院这边还是社区申请的阶段(先社区向中科院申请slot,然后学生向中选社区申请),发现很早EAF就已经中选了,去年就关注这个社区了。因为大一的时候看过一点SICP,体验过Emacs编辑器,也简单配置过自己的.emacs文件,这个内容可以在我的文章 从零开始的Emacs配置学习里面看见。但是感觉当时自己还是太弱了,lisp只会一点,所以就没有信心去参与EAF社区。gsoc这边花了几天时间从上千个项目中筛选出两个,一个是gencode_regions,另一个是JavaScript的slang。当时中科院这边的任务还没发布出来,为了防止出现和gsoc一样的匆忙状况,期间给EAF的维护者,也就是我后来的导师MatthewZMD,发了一篇邮件,问了一下今年的任务情况。写完两篇proposal后发现自己被分配到打银川区域赛了…就开始学新的算法,没有再细看EAF的东西…gsoc这边最后两个都没中。

打完区域赛浪了一段时间,就到了五月中旬。5.19左右EAF的具体项目已经发布出来了,今年导师认领任务的情况有变,一个导师最多只能认领三个项目,然而EAF的导师最终只有一位,所以最后也只有三个项目,分别是重构代码(低),写EAF图片处理工具(中),写RSS阅读器(中)。因为去年有一个music-player的项目很感兴趣,但是因为今年已经做出基于vue-js的music-player了所以这个项目在今年就没有出现。然后我就开始仔细研究这三个项目,因为抓取rss文件的过程和爬虫差不多,最开始学习python的时候写的最多的也就是爬虫,于是就选择了编写RSS阅读器的任务(其实本来是想找个难度为高的项目的,无奈EAF这边没有,其他社区slot也已经有人了,我也没再去考虑)。

查询了一些资料,了解了一下RSS阅读器到底是什么东西,看了一些Github上的RSS阅读器的仓库,也体验了一下Feedly之类的阅读器,然后就开始写proposal了。在6.1完成了项目申请书,mentor表示写的很好,做了一些小修改最后上交的也就是这一篇。

这次申请过程一路畅通无阻,到最后这个项目也只有我一个申请人(不像去年那个撰写的最后都有8人了…),不过今年的确人数增加了许多,有的项目还是挺卷的。期间帮助自己学校的几位同学申请,最后自己学校有两位同学也入选了今年的暑期活动。其中一位的项目就挺卷的,但是好在她很早就联系了mentor,这个项目的整个构想都是她提出的所以最后也是她入选了。

不过要提醒的是,项目申请书还是得好好写的,虽然有的项目候选人只有一位,但是不好好写申请书的话,还是会落选的。

在提交项目申请书到审核到入选的过程中,看了一下vue.js的官方文档,然后就去冲期末考试了。当时是完全没看懂vue.js编程的,因为之前没接触过这种编程。后面具体的参与过程可以看我的这篇结项报告。接下来我想要详细介绍一下RSS阅读器。

RSS阅读器

说实话,在接触这个项目之前,我是完全不知道RSS阅读器是什么东西的。现在简单介绍一下。

首先我们可以将网页上的内容整理成一个rss链接,有提供这种rss链接的网站我们可以认为是支持rss服务的,最浅显的一个例子就是豆瓣的个人页面,我们可以在个人页面的右下角看到一个 RSS2.0 的链接,点进去就可以看见这位用户的内容整理了。因为是豆瓣,所以这个链接里面整理的就是这个用户最新的“想读的书”、“看过的电影”之类的内容。如果是某些新闻网站的话,整理出来的就是一些文章了,比如说开源中国提供的一个rss链接https://www.oschina.net/news/rss

但是这种链接点开来是类似一种类似html的超文本格式的,无法直接通过肉眼来看内容,那么就需要一个工具,将rss链接进行解析,得到链接里面的内容并且呈现出来,这个工具就是rss阅读器。并且我们可以在rss阅读器里面添加许多这种链接,这样也就相当于把自己感兴趣的所有东西都放在一个容器里了。

那么只要通过rss阅读器就可以查看内容进入到这个网站的首页查看内容了。也就意味着,我们可以在rss阅读器上专一地看自己感兴趣的内容。我一直有一个想法,其实根本没有必要存在这么多app,很多app提供的主体功能实际上通过浏览器和网页就能够实现了,手机的内存空间也可以得到释放。多年以前手机还没有像今天这样流行的时候其实就是这样的,当时使用平板电脑或者手机还可以在网页的淘宝上进行购物,也可以在网页的qq上进行聊天,但是现在这样的功能已经越来越少,各种服务的app也越来越臃肿、冗余。今天的发展离我的这个想法就是越走越远,不过rss阅读器还是很契合我的想法的,这也是我最后选择它作为我的暑期项目的理由之一。

然而并不是所有的网站都有提供RSS服务的,所以有的网页我们就无法订阅,这时候就需要一个Github上的开源项目:RSSHub,通过这个项目可以将任何网页生成RSS链接,再使用RSS阅读器就可以订阅互联网上的所有页面了。但是目前我的eaf-rss-reader还无法使用RSSHub生成的链接,主要是代理上的问题,后续会给出解决方案。

关于本项目

RSS-Reader2

来讲一讲这次项目使用到的技术栈,vue.js以及其组件vuex,Python-PyQt5、emacs-lisp(主要用于EAF的.el文件编写)、javascript等,并且这里列举的都是在三个月内我学会并且实现的。其他部分python一直是会的,但是图形的PyQt部分一直没有接触过,对于js也只是今年上半年时候读了一部分的javascript编程艺术这本书(粉色封面)学会了一些dom操作。

通过上面提到的那些技术栈的组合,最终完成了一个能够实现feed订阅、feed删除、标记阅读状态、访问源页面(直接调用EAF的browser)、刷新以及自动刷新功能的RSS-Reader。并且其中的添加订阅、刷新功能是多线程的。这也是我第一次学习多线程操作,使用了QThread。

前期以及中期最困难的一个部分是无法使用vue.js调用python函数,不过后来参考了EAF的file-manager项目采取了QWebChannel的方法,十分优雅地解决了,并且这个方法将对我以后编写的程序起到很大的帮助。接下来我会用两篇文章详细介绍一下QThread方法和QWebChannel方法。

关于我的RSS-Reader还欠缺的一些地方,目前只能够直接使用我设计的配色,还没有将配色留出.el文件;preview页面中的文章排版还有问题,也无法显示图片;无法使用RSSHub的链接等。

后续计划

解决上面提到的问题。

继续配置Emacs,使它成为我的主力编辑器。

使用Emacs完成SICP。

2022年可能不会参与GSoc或者中科院开源之夏了,如果EAF2022年叫我去当mentor,那我是很乐意的(逃)。下一次参与这种活动可能就是2023年以后了,如果我在那个时间点以后还将继续读书的话。(((

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注