惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

T
Tor Project blog
博客园 - 聂微东
Microsoft Azure Blog
Microsoft Azure Blog
博客园 - 【当耐特】
G
Google Developers Blog
J
Java Code Geeks
The Cloudflare Blog
Attack and Defense Labs
Attack and Defense Labs
宝玉的分享
宝玉的分享
Last Week in AI
Last Week in AI
Cisco Talos Blog
Cisco Talos Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
I
Intezer
Jina AI
Jina AI
T
Tenable Blog
P
Palo Alto Networks Blog
Project Zero
Project Zero
D
DataBreaches.Net
Hugging Face - Blog
Hugging Face - Blog
The Hacker News
The Hacker News
F
Full Disclosure
Cloudbric
Cloudbric
量子位
H
Heimdal Security Blog
K
Kaspersky official blog
有赞技术团队
有赞技术团队
罗磊的独立博客
V
Vulnerabilities – Threatpost
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
阮一峰的网络日志
阮一峰的网络日志
Vercel News
Vercel News
Recent Announcements
Recent Announcements
WordPress大学
WordPress大学
GbyAI
GbyAI
S
SegmentFault 最新的问题
M
MIT News - Artificial intelligence
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
I
InfoQ
Recorded Future
Recorded Future
Security Archives - TechRepublic
Security Archives - TechRepublic
AI
AI
Webroot Blog
Webroot Blog
C
CXSECURITY Database RSS Feed - CXSecurity.com
爱范儿
爱范儿
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
T
The Exploit Database - CXSecurity.com
Apple Machine Learning Research
Apple Machine Learning Research
C
Cybersecurity and Infrastructure Security Agency CISA
H
Hacker News: Front Page
Latest news
Latest news

夜行人

回家路上 第一期的直播演示项目 震动检测器 正能量 在线参观CodeLab Neverland 发布 CodeLab Adapter 3.3.1 DynamicTable 之 纸糊方向盘 CodeLab DynamicTable: 一个可实施的技术方案 CodeLab Insight 发布 Alpha 版 情人节 Home Assistant 周报 && IoT 周报 (02) Joplin: 关注隐私的 Evernote 开源替代软件 浏览器的未来与 Web 传感器 Home Assistant 周报 && IoT 周报 (01) 百宝箱(01) 论自由 介绍 WebThings Home Assistant 周报 && iot 周报 (00) 百宝箱(00) 毛姆读书心得 传世之作 周末徒步 CodeLab Adapter ❤️ Jupyter/Python 航班 躲雨 夏令营途中 [译]思想--作为一种技术 The future of coding 美国之行 三门问题的程序模拟 从Python转向Pharo https://blog.just4fun.site/post/iot/iot-open-source-projects/ Python异步编程笔记 https://blog.just4fun.site/post/iot/iot-open-source-hardware-community/ 万物积木化开发者社区 CodeLab ❤️ Blender Scratch3技术分析之云变量 API(第7篇) [译]对管道(Pipes)的偏爱 [译]提出正确的问题比得到正确答案更重要 蓝牙设备与Scratch3.0 创建你的第一个Scratch3.0 Extension Scratch3技术分析之项目内部数据(第6篇) Scratch3技术分析之社区 API(第5篇) Scratch3技术分析之User API(第4篇) Scratch3技术分析之项目主页API(第3篇) Scratch3技术分析之静态资源API(第2篇) Scratch3.0、micro:bit与Windows7 https://blog.just4fun.site/post/iot/zerynth-vs-micropython/ 核聚变、方所与半宅空间 可视化编程为何是个糟糕的主意 codelab.club周末聚会 关于codelab.club '下一件大事'是一个房间 Hungry Robot - Eat everything 编程作为一种思考方式 今日简史 史蒂夫·乔布斯传 罗素自选文集 https://blog.just4fun.site/post/edx/tianjin-scratch-ai/ https://blog.just4fun.site/post/edx/richie-cms-openedx/ 徒步武功山 WebUSB与micro:bit 积木化编程与3D场景 夜宿武功山顶 scratch3-adapter接入优必选Alpha系列机器人 https://blog.just4fun.site/post/edx/video-migration-note/ scratch3-adapter重构笔记 https://blog.just4fun.site/post/edx/edx-community-members/ 两种硬件编程风格的比较 使用micro:bit自制PPT翻页笔 柏拉图对话集 scratch3.0 + micro:bit 七月电影放映计划 非营利组织的管理 Screenly--用树莓派让任何屏幕变为可编程的数字标牌 以最佳实践开始你的Django项目 micro:bit与事件驱动 为Scratch3.0设计的插件系统(上篇) OCR应用一例 近两年读过的一些好书 blockly开发之使用python驱动浏览器中的turtle(2) 牛顿新传 文学理论入门 逻辑的引擎 人生的意义 blockly开发之生成并运行js代码(1) blockly开发之hello world(0) micro:bit使用笔记 神器之Termux https://blog.just4fun.site/post/iot/micropython-notes/ Cozmo what is this Scratch的前世今生 下段旅程 我行在远方 爆裂 途中杂记 https://blog.just4fun.site/post/edx/open-edx-startup/ cozmo系列之入门 - 有性格且可编程的机器人 PaperWeekly开发笔记 创业二三事
about Open edX course category
2015-11-04 · via 夜行人

之后博客里Open edX相关的文章都用英文标题

最近收到好些来自国外的邮件,由于Open edX比较新,我们又是Open edX重度用户,平时解决的问题,整个社区可能都用得到。前几天写了《Code Grader in Open edX》,大概是由于题目是英文的缘故,昨晚就收到了3封来自世界各地的邮件,咨询关于Code Grader in Open edX的细节.其中一个妹子说道

I am interested on the topic you have discussed. I know the page is Chinese but thanks to google translate I could understand the page :)

为了方便他们搜索,题目之后都用英文,如果之后英文表达能力有长进,内容也用英文写好了(痛下决心学英语真是 T_T)


课程分类的问题,我去年有写过一篇文章:在edX中为course扩充字段,虽然目的是拓展edx的course模型,恰好举的例子是为课程添加分类。

而后同@MT聊天时发现,课程分类竟是个刚需,对于社区版而言。后来课程分类有被添加到localization and development in china,但迟迟没有人给出一个开箱可用的解决方案。

当时年轻,在在edX中为course扩充字段中采用的方法十分dirty,侵入性很强,相比之下,反而是最初的设计优雅许多(我目前公司内部项目的课程分类,的确也是采用这个方案),我在那篇文章中有提及:

  • 自己写了个django app加入到lms/djangoapps里。app.models中有course_id字段
  • 自己写个首页
  • 在admin里管理首页的内容

写出来的效果大概是这样:

后台管理: course_category1

添加分类 course_category2

首页呈现 course_category3

这里的核心观念是,把课程视为一种资源,course_id是课程的标识符。


今天群里就这个问题,又讨论得挺激烈的

@MT做了精彩的需求描述:

课程分类的产品设计: 1 在django admin实现一级二级分类的管理 2 在studio实现对课程归属分类的管理 3 在首页实现对分类的筛选和展示

我私下同@MT聊的时候,@MT谈到老师是否可以在studio中决定分类。这的确是一种更加去中心化的方式,属于产品形态的问题,虽然有趣,但我对此不了解,就不方便谈论了。

技术上这两种方式可以共存,至于最后决定首页如何呈现,这是个产品层面的问题,就留给网站拥有者决定好了

#思路 下面就技术层面谈谈思路

这是我接触edx不久所做的设计,很粗糙,槽点很多orz. 理念背景需要交代下,我当时把课程视为被资源实体,是内容管理的对象,我把首页视为一个内容管理平台(记得edx开发团队有在google group里说过edx.org也是这样设计的),网站的拥有者决定了课程的归属(分类)

终于到我比较擅长的技术问题上来啦,主场作战哈哈哈,如果你熟悉django的话,你知道只要写一个model来定义课程类,这个类至少需要以下2个关键属性:

  • course_id
  • cource_category(外键)

之后至于做几级分类,随你的便,因为cource_category仅仅是个外键!

然后把这个model注册到admin里,就可以在django admin里管理课程啦!

最后只需要把model传递到首页的模板里,加点调料(css/js),就可以新鲜出炉啦!

事后我反思这个设计,发现其实可以采用django-mptt,这样分类的层级会更加自由和动态。

相比具体的实现,我更关注架构上的问题,上面的这种做法采用的是django app的方式,而不是我最初那篇文章提到的侵入式,这样一来,与edx的耦合度很低,完全可以通过一个脚本,以插件的形式自动化插入到edx中,这样就不存在升级的问题。因为我们首页课程分类与edx的关联仅有course_id!

松耦合,高内聚是我特别喜欢的设计口味

edx是冲着构建生态去的,就这点而言,具体的实现很可能随时会被替换,更好的实现会层出不穷,为了能随时升级和替换组件,低耦合是多么诱人的特性呀。

它让我们可以随时甩下历史负担,迎接未来不是么

#后记 我觉得还是有必要理清一下,课程分类和edx-search各自的定位问题。我此前一直将课程分类视为网站拥有者的权利,是一种引导用户和呈现资源的方式。尽管它也可以帮助用户找到资源(这两者并不矛盾)

如果你关心的是如何帮助用户(student),方便用户查找需要的内容,那么edx-search可能更适合你。此外@OVER同学之前同我说

我想在edx上实现课程推荐这个想法…就是根据用户的兴趣,和学习记录进行一些分析,然后给出推荐

也是个很有意思的想法。


#补充 多媒体教育技术研究会的崔老师提到:(崔老师十分热心于社区的工作)

课程分类教育部有规定的,有专业-课程-学分的表,就是一个专业由20门课程组成,课程又分abcd类,每个课程根据类别决定课程的课程,a类2个-3个学期,我试想:设定条件下,老师选项,自动生成课程分类表,网页形式显示出。

我们今后其实可以把国内教育的分类体系预置进去,这个基础性的工作很适合社区来做。目前已经收录到localization and development in china

有兴趣的小伙伴一起来吧:)

康忙北鼻来次GO