这个作业的要求是: https://bbs.csdn.net/topics/608215808
我提问的开源项目是:CSDN 技术社区 / skill_tree_opensource · GitCode
在提供的几个项目中,Python会比较熟悉,就选择了技能树来 fork 使用学习。
其实刚开始有点雾,没看太懂这个项目能在做什么,和技能树有什么关系,完成了什么内容。我觉得 README.md 中可以加一段话(可能写的不是很好)来讲明这个项目:
要快速对项目进行了解,我们或许需要通过直观先来看看技能树做了什么。这里有一个具体的技能树项目:入门技能树 (csdn.net),使用后,我们可以发现:技能树提供了一个高效的学习环境,通过题目来对知识点进行熟悉。
而我们的项目( skill_tree_opensource · GitCode )在这里做些什么?我们可以用Markdown文件来编写不同章节、不同难度、不同知识点的题目并自动的生成 json 文件,从而方便了我们创造自己的题目。
对于Markdown的修改已经PR。
我创建了一些题目,发现生成的 json
文件中,还留有一个author
自动为 null
,我们是否可以在 Markdown 编写时就加入作者信息?对此我进行了源码的阅读,在ensure_exercises_meta
函数中找的了meta
的初始化,最终定位到了一个 user_name
的函数。
{
"author": null,
……
}
def ensure_exercises_meta(self, meta_path, source, md_file){
……
if meta is None:
meta = {
"type": "code_options",
"author": user_name(md_file, self.authors),
"source": source,
"notebook_enable": self.default_notebook(),
"exercise_id": uuid.uuid4().hex
}
……
}
def user_name(md_file, author_dict):
ret = subprocess.Popen([
"git", "log", md_file
], stdout=subprocess.PIPE)
lines = list(map(lambda l: l.decode(), ret.stdout.readlines()))
author_lines = []
for line in lines:
if line.startswith('Author'):
author_lines.append(line.split(' ')[1])
print(author_lines)
if len(author_lines) == 0:
return None
author_nick_name = author_lines[-1]
return search_author(author_dict, author_nick_name)
在user_name
函数中,我发现了一个 Author
,好像是有添加作者的方法的,但是多次尝试后,没有成功,发现lines
拿到的输出一直是空,受限于能力,没有更改相关的内容,希望后续可以得到解答(其实也不太能确定是这里)。
题目的难度如何评定?而且题目可以由众多用户自发提起,我们是如何对题目的难度、题目的类别进行审核呢?是会使用人工审核的方式吗,评审的尺度又如何去把握?我觉得这是技能树在后续想要 “散叶” 的一个重要问题。
合理的分类是技能树发展的必要考虑。
现在只能表明正确的选项,后续是否考虑添加:题目解答?可以由问题提供者自由选择是否为题目添加详细解答。我们可以查看现有的技能树入门技能树 (csdn.net),虽然有讨论区,但是每个问题都要返回讨论区,还要在众多的帖子中挑选,这并不是一个方便的途径。
我觉得可以考虑添加 解答功能,由题目提供者自由选择 是否提供解答。
现在添加题目后,删除题目很麻烦。
情形是如下的:我们新建一个题目,test.md
,在第一次运行后,生成了一个 test.json
。此时,若我们想删除这个题目,我们是要删除test.md
和test.json
的,但是此时就需要我们手动删除 config.json
中的test.json
。
config.json
{
"keywords": [],
"children": [],
"export": [
"test.json"
],
"keywords_must": [],
"keywords_forbid": [],
"group": 0,
"node_id": "opensource-7906cf0502ee44d0a36474485d4ff6b6"
}
否则程序就会无法正常运行。我觉得可以考虑在删除文件后如何自动的修改config.json
。