本站新闻

Moodle网上课堂发展历史与技术创新

Moodle网上课堂发展历史与技术创新

by 曾棕根 管理员 -
Number of replies: 0

一、Moodle网上课堂简介

        Moodle网上课堂(网址 https://mood.nbpt.edu.cn),即闪电Moodle服务器(第一代),从2008年6月始,在电子信息工程学院历届领导的高度重视、全院教师积极应用和学校信息资源中心的大力支持下,曾棕根老师(Email:461932968@qq.com)持续追踪,修正了大量技术问题,解决了功能、性能、安全、界面及管理数据统计等各方面的需求,于2020年07月25日建成。第一代闪电Moodle基于单服务器,300人同时点击网页,3秒内都能得到页面,能满足千人同时考试和1500人同时在线上课,同时在线人数最多为6万。第二代闪电Moodle服务器研究工作正在开展中,采用集群技术,能满足万人同时在线上课,并能根据实际需求进行横向扩展。

        平台特点(三高):
        (1)高  安  全。LNMP源码现场编译技术,采用HTTPS + OpenSSL-1.1.1d加密库对通信进行加密传输。
        (2)高  性  能。PHP-MariaDB网页加载时间在130毫秒左右,闪电速度。
        (3)高  并  发。访问高峰时段,抗拥塞,服务器极度轻松,绝不卡死,擅长大规模在线考试!!!

        (4)海量存储。存储容量高达96TB。
        (5)界面美观。平台界面和课程界面美观现代时尚;
        (6)功能齐全。其它课程平台有的功能,这个平台都有了,而且完善,还能全自动评测编程语言!!!能创建43种互动内容,如互动视频。
        (7)全球通用。内置70多种语言,便于全球学生学习交流。
        (8)单点登录。全校师生登录学校OA系统后,无需再输入账号密码,可直接进入本平台。

二、平台发展历程

        宁波职业技术学院Moodle网上课堂,基于源代码本地编译的LNMP架构与澳大利亚Martin Dougiamas博士发布的免费开源的Moodle源代码构建,内置独创的闪电优化技术和抗拥塞设计,在性能、功能、安全、界面、平台运行数据的统计管理等方面日臻完美。
        Moodle是一个全球性的公益项目,采用GNU GPL免费开源协议,全球任何人都可以免费使用、修改、自由传播和培训Moodle软件,并收取服务费用,但Moodle软件版权归属于澳大利亚Martin Dougiamas博士,Copyright ©1999 onwards Martin Dougiamas。
        平台于2008年6月采用WAMP架构初步建成,但经几年实践证实无法满足应用需求;2012年6月18日,WAMP架构服务器数据库崩溃,经过48小时的艰苦奋战,成功实施灾难恢复,保住了课程建设成果。
        2012年7月后,为了提高安全性和并发性能,开始学习Linux操作系统LNMP本地编译技术,重新架设了Moodle服务器,性能有所改善,但仍然无法满足单服务器200人以上一页面呈现一道题的在线考试;之后尝试使用1台Nginx服务器+3台PHP服务器+1台MySQL服务器的分布式计算架构,证实并不能有效提升并发处理性能。
        2014年6月在与工作室学生的一次闲聊中受到启发,采用新思路优化了Moodle服务器,使单服务器每秒并发达50个,经过本学期期末考试检验,Moodle服务器在300人的在线考试中负载得到了大幅下降,确定了问题的关键所在。
        2015年12月19日在教务处出资10万元人民币新购的IBM 3650 M5服务器上再次重建了Moodle系统,单服务器每秒能完成892个并发访问请求,已能满足万人以上同时在线考试,至此,Moodle服务器性能瓶颈已得到完全解决。
        2016年10月10日12点08分00秒,平台迁移到阿里云上,实施云上运行测试。
        2016年11月,闪电Moodle优化技术简化定型,开始在国内多所院校得到推广应用,发挥出了其强大的生产能力。
        2017年09月15日,平台从阿里云上迁回到宁波职业技术学院校内服务器中,放在图书馆5楼的中心机房,万兆主干网络直接接入,网址为http://61.164.87.153/;同时开通VPN,实现了对此服务器的异地管理。
        2017年10月17日,成功修订Grid课程格式,解决了课程界面单调的问题。
        2017年11月30日,安装了一台96TB的磁盘阵列(电子信息工程学院出资25万元人民币采购),解决了Moodle存储容量不够的问题,实现moodle平台双路随机访问磁盘阵列,将磁盘阵列存取速度从120MB/s提高到240MB/s。
        2017年12月06日,实现LDAP统一身份认证,全校师生可以使用OA系统的工号和学号直接登录本平台,平台应用面向全校师生开放。
        2018年12月29日,实现抗拥塞设计,服务器在访问人数骤增的情况下,也能保持高吞吐量平稳输出。
        2019年04月03日,设定了域名 http://mood.nbpt.edu.cn。
        2019年06月26日,根据6月11号中午12:40发生的的《毛概》400人同时考试平台瘫痪事件,确定了问题根源,对LNMP架构进行了优化,取得了预期效果

        2019年10月23日,成功升级gcc-9.2.0、cmake、libzip、OpenSSL-1.1.1d和OpenSSH_8.1,服务器网络通信安全得到质的提升,实现了服务器安全的目标。
        2019年11月10日,Jobe源程序评测生产服务器建成,实现程序设计语言在线自动评测并记成绩在moodle平台里。
        2019年11月20日,可以创建43种互动内容了,如互动视频。
        2019年11月27日,实现了单点登录。
        2019年12月23日,建成史上最强课程界面。
        2020年01月07日,彻底解决了高并发业务时moodle服务器 Nginx出现404找不到文件的问题。
        2020年02月28日,彻底理清Moodle源码发邮件原理,平台开始提供稳定可靠的邮件发送服务,此问题困扰了我12年。
        2020年04月05日,经过一年时间的调试,彻底解决了下载大小为20GB以内的文件会发生中断的问题。相应地,也同时解决了mp4微课视频播放一点点后卡在那里不动的问题。

三、平台技术创新

(01)2017年05月17日,平台更新到moodle 3.3,并将Mariadb数据库从utf8编码整体转换为utf8mb4,从而数据库能正确存储Emoji表情符号了。
(02)2017年05月23日,实现了http和https两个协议共存,解决了moodle移动端自签名证书https无法连接的问题。(问题发现者:宁波职业技术学院 张岐、何颂颂
(03)2017年06月04日,moodle for android、apple移动端软件升级到 3.3.0,能连上https了。
(04)2017年06月09日,网站登录后直接进入个人主页,便于广告面向全体用户直接推送。
(05)2017年06月27日,解决了在回顾试卷中看不到学生通过firefox浏览器粘贴进去的图片的问题。(问题发现者:宁波职业技术学院 汪志达
(06)2017年07月15日,PHP底层与MariaDB服务器进行网络协议交互使用mysqlnd代替了原先的libmysql,解决了版权、编译和性能上的问题。
(07)2017年08月31日,MariaDB数据库升级到10.2.8,采用Innodb存储引擎代替了XtraDB。
(08)2017年09月26日,彻底解决了Moodle 3.2之后发不出邮件的问题。
(09)2017年10月07日,修订了课程浏览页面内标题栏顶上空白高度太高的问题;修订了课程介绍页面内课程摘要中的换行与空格不能正确显示的问题。
(10)2017年12月06日,修订了课程简介如果是纯英文时不会换行,把整个版面冲破的问题。效果展示:https://mood.nbpt.edu.cn/course/view.php?id=393 (问题发现者:宁波职业技术学院 许勇
(11)2017年12月06日,成功实现了LDAP统一身份认证,全校师生都可使用本平台。(问题发现者:宁波职业技术学院 张岐
(12)2018年01月17日,安装了All-or-Nothing多选题型,必须全选择了所有正确答案才给分,其余选择情况给零分。(问题发现者:温州职业技术学院 吴淑英
(13)2018年10月13日,修订了Moodle源码,使首页最底行不再显示“Data retention summary”行。(问题发现者:宁波壹安信息科技有限公司
(14)2018年12月29日,对LNMP架构进行了深度优化,实现了抗拥塞设计:实现随着Moodle的访问量越来越大,服务器始终表现出最佳的性能,而不是吞吐量极速下降。
(15)2019年03月07日,启用gzip压缩网页,网页压缩率高达80%左右。实时检测链接:http://tool.chinaz.com/Gzips/Default.aspx?q=https://mood.nbpt.edu.cn
(16)2019年03月14日,优化了FPM服务器进程启动方式,static、dynamic和ondemand,FPM服务器处理能力达到最优。
(17)2019-04-03,设定了域名 http://mood.nbpt.edu.cn ,内网访问这个域名时,走的是局域网IP地址 10.211.16.10:80,直接经由核心交换机到达Moodle服务器,速度快,而且上传下载大文件不受限;外网访问这个域名,走的是独立公网IP地址 61.164.87.153:80,而不是共享学校的Nginx代理服务器,速度更快。
(18)2019年04月12日,解决了导出题库类别时出现的“qtype_multichoice_options中找不到数据记录"错误,从而无法将这个试题类别导出的问题。(问题发现者:广东惠州卫生职业技术学院 黄宇靖
(19)2019年06月25日,修订了源码,检测活动每个页面最少显示5题,有效降低了考试时服务器的负载。
(20)2019年10月23日,升级成功gcc-9.2.0,把Nginx中的openssl升级为1.1.1d版本,真正把OpenSSH升级到8.1版本。(问题发现者:广东惠州卫生职业技术学院 黄宇靖
(21)2019年10月28日,jpeg库升级到v9c版本,增强了图像处理能力。
(22)2019年10月31日,参考中国石油大学(华东)张学辉老师总结的技术文档,在VMware虚拟机内建成jobe源代码评测服务器,实现作业和考试中的编程题自动评测,并记录成绩,老师批改程序的工作量降低为零。jobe源代码地址是https://github.com/trampgeek/jobe 。(问题发现者:中国石油大学-华东 张学辉
(23)2019年11月5日,实现Jobe源程序评测服务器快速移植,方案定型:Windows 10 64 位1093专业工作站版 + VMware Workstation Pro 15.5 + CentOS 8.0.1905 + docker-ce-18.06.3.ce-3.el7.x86_64 + trampgeek/jobeinabox。整个Win10服务器至少要有8GB内存,其中,CentOS虚机机至少要有6GB内存:3.5GB使用 + 1.5GB缓存和缓冲 + 1GB空闲。而CPU开销极少。
(24)2019年11月6日凌晨0点30分,在宁波职业技术学院图书馆五楼中心机房独立物理服务器上建成Jobe源程序评测服务器,使得moodle网上课堂中学生提交的C、Pascal、SQL、Jave、PHP和Python编程作业和考试中的编程题能实时自动评测,并直接把得分记录在moodle平台中的学生成绩中,实现了编程作业和考试完全自动改卷,使得老师劳动量降低为零!采用方案:Windows Server 2008 + VMware 12.5.6 + CentOS 7 + docker 19 +Jobe 。
(25)2019年11月07日,实现了自动批改作业和考试中的数据库SQL命令。
(26)2019年11月10日,重装了moodle服务器,操作系统为CentOS-7-x86_64-DVD-1908.iso,并成功在服务器上安装了docker和jobe服务器 。之前在centos 8上无法正常运行jobe服务器,很可能是docker与centos8的4.18linux内核不兼容的原因。
(27)2019年11月12日,解决了无法重启CentOS 7的原因。发现/etc/rc.d/rc.local中启动【/root/ViewPower2.14Beta/StartMain &】后,会产生两个java进程,而在reboot时,会自动运行【systemctl stop rc-local.service】命令,rc-local.service会自动关闭它里面调用过的用户添加进去的服务,而这时,java进程中有一个无法杀死,CentOS就一直停留在那里,造成无关不掉机。解决办法就是不要在/etc/rc.d/rc.local中运行【/root/ViewPower2.14Beta/StartMain &】,这样,就不会产生这两个java进程,reboot命令就能正常运行了。如果要用【/root/ViewPower2.14Beta/StartMain &】里面提供的功能,那么,任何时候自己用putty.exe超户登录centos,在命令行运行它就可以了,这样reboot时,【systemctl stop rc-local.service】命令能正常执行,重启没问题。
(28)2019年11月20日,能创建43种互动内容,如互动视频,得分会自动记录到成绩单中。(问题发现者:湖北省黄石市阳新县职业教育中心 李晓峰
(29)2019年11月27日凌晨5点40分,实现了单点登录,全校师生登录OA系统后,无需再输入账号密码,直接登录moodle网上课堂。如果没有登录OA系统,在moodle网上课堂点登录按钮时,会自动转跳到校园OA进行登录。(问题发现者:宁波职业技术学院 张岐、孟德欣、苗驰骏
(30)2019年12月02日,解决了moodle移动端在单点登录机制中不能登录的问题。(问题发现者:宁波职业技术学院 王茹佳、杜宝祯
(31)2019年12月04日,成功修改了首页登录链接为CAS单点登录方式,同时通过/login并存了其它登录方式。(问题发现者:宁波职业技术学院 黄伟文 宁波东海实验学校 李中兵、石栋梁
(32)2019年12月11日,通过在学校IDS统一身份认证服务器中直接创建账号(uid)=‘murad’和名(cn)=‘Murad’,通过CAS单点登录Moodle网上课堂后,与Moodle网上课堂中username='murad'和firstname='Murad'的本地账号成功对接。映射:uid->username账号,cn->firstname名,uid->lastname姓,uid->idnumber学号。注lastname在moodle查看用户界面中又写作surname,即姓。(问题发现者:宁波职业技术学院 李如桃、乐凌宏
(33)2019年12月23日,修订了史上最强课程界面,对于没有上传图片的课程小节,会从图库中随机抽取一张图片;用户也可以自己上传小节图片。对于长度超过一行的标题,会截断为一行。修订了已选课用户界面中看不到角色分配和群组分配中的保存图标的问题。示范课程 https://mood.nbpt.edu.cn/course/view.php?id=75 。(问题发现者:宁波职业技术学院 张岐、黄伟文、孟德欣
(34)2019年12月25日,修改了测验活动设置中考试时间耗尽时的三个选项的中文翻译,并更新了moodle官方中文语言包。(问题发现者:宁波职业技术学院  但雨芳
(35)2019年12月28日,修订了访客访问首页时不会转跳到单点登录界面、在没有开通自助选课的课程中点击”继续“按钮不会转跳到单点登录界面和开通了自助选课课程中点击”继续“按钮不会跳转到单点登录界面的问题。(问题发现者:宁波职业技术学院 邱斌
(36)2019年12月28日,修订了检测设置布局中的每页默认显示5道题的设置,最高限制设置为每页10题;把一页显示全部试题放在最底下,尽量防止用户选择一页显示全部题目的设置,在服务器的负载和考试答案的自动保存之间取得一个最佳平衡。(问题发现者:宁波职业技术学院 何颂颂
(37)2019年12月31日,修订了个人主页中主页中最近访问过的课程的显示方式,以直观的表格代替隐藏的条目,简洁实用。(问题发现者:宁波职业技术学院  曹琦
(38)2019年12月31日,修订了文本编辑器中输入某些HTML代码破坏浏览器界面的问题。示例代码:

<div class="message-drawer bg-light affix-top">
<div class="body-container position-relative">
<div class="view-conversation h-100">
<div class="position-relative h-100">
<div class="content-message-container h-100 px-2 pt-0">
<div class="mt-4">
<div class="d-flex flex-column">
<div class="message clickable d-flex flex-column p-2 mx-1 position-relative received bg-white rounded mb-2 mt-2">
<div>在页面中生成新窗口</div>
</div></div></div></div></div></div></div></div>

问题发现者:宁波职业技术学院  何颂颂
(39)2020年01月02日,修订了搜索课程输入框中可以使用禁用字符的安全漏洞,搜索关键字中不能输入【'】或【<】或【>】或【.】了。(问题发现者:浙江师范大学 张家华)
(40)2020年01月02日,修订了课程概览,使得每次进入个人主页,课程概览都显示全部类别、按访问时间排序、按卡片方式显示和每页显示48条,并设置了条目的背景色。
(41)2020年01月04日,moodle源代码升级到Moodle 3.6.7+ (Build: 20200103)。
(42)2020年01月07日,发现了高并发的业务时Nginx报404错误的原因,修订了内核通信模式。上午500人同时考试时,考生打开试卷的时间在1秒内,翻页时间也在1秒内,学生感觉仿佛自己一个人在访问服务器,闪电moodle服务器在高并发业务时表现不可想象的闪电处理效果,PHP和MariaDB数据库各自都仅使用了30个进程,服务器负载峰值为2.4,极度轻松。这个问题在过去7年的实践中,一直困扰着我,今天得到了彻底解决。应该说,实验室压测和现场压测完全是两回事,LNMP架构必须经过现场压测才能看到其实生产能力,从而确保业务的顺利进行。 (问题发现者:浙江师范大学 张家华)
(43)2020年01月08日,修正了人工评分界面显示,将抽到的同一道题目放在一块,便于老师批改,默认是按卷面中题目编号排序,难以批阅。 (问题发现者:宁波职业技术学院 李可)
(44)2020年01月31日,数据库升级到MariaDB 10.4.12,数据库安全增强。
(45)2020年02月03日,PHP升级到7.3.14,它比PHP 7.0快22%。
(46)2020年02月15日,老师和学生不能从课程中撤出了,防止了误操作,只有该课程的管理员才有此权限。(问题发现者:宁波职业技术学院 李超燕
(47)2020年02月15日,解决了阿里云禁止ECS云服务器发邮件到25号端口的SMTP服务器的问题,改用SSL加密方式发送邮件到smtp.188.com商用SMTP服务器取得成功。(问题发现者:四川宜宾学院 胡先志
(48)2020年02月15日,给【已认证用户】分配了【申请创建新课程】的权力,使email注册账号登录moodle平台后能申请开课。(问题发现者:四川宜宾学院 胡先志
(49)2020年02月22日,升级了CentOS 7操作系统的curl,移动设备设置中的【It seems that the HTTPS certificate is self-signed or not trusted. The mobile app will only work with trusted sites.】显示正常了。
(50)2020年02月28日,鉴于sudo软件存在普通用户可使用root权限的漏洞,而日常管理中又不用它,直接将sudo卸载了,增强了服务器安全。(问题发现者:重庆市大足中学 陈显富
(51)2020年02月28日,经过3天的Moodle源码深入追踪和对比实验排查,终于掌握了Moodle发邮件的原理,这个困惑了12年的问题终于翻篇;同时堵住了一个PHPDDOS攻击漏洞。(问题发现者:四川宜宾学院 胡先志
(52)2020年03月01日,发现上传用户头像时,使用Windows中的画图软件另存为jpg用户头像上传后无法显示,而用photoshop另存为jpeg后的图片可以正确显示。
(53)2020年03月02日,使用【希沃授课助手】将手机直播桌子上的书写过程直播到电脑屏幕;又通过QQ群中的分享屏幕功能将老师屏幕和讲课声音直播到学生电脑上;同时,使用Camtasia Studio录制屏幕,1分钟要开销30MB的磁盘空间存储缓冲,40分钟点的课录制后压缩为mp4视频大概400MB左右,最后将录制好的视频挂在Moodle网上课堂中让学生反复观看,播放时是以流媒体的形式播放的,边下载边播放边抛弃,保持440Kbps的下载速率就能保证视频流畅播放。(问题发现者:新疆乌鲁木齐市实验学校 穆楠
(54)2020年03月04日,课程中左侧的导航栏只显示当前课程的信息,不显示无关课程列表,提高了视觉聚焦度和舒适度。(问题发现者:宁波职业技术学院 何颂颂
(55)2020年03月04日,课程中左侧的导航栏中版块默认不展开,页面不再被拉得太长,也显得更简洁了,这个问题困扰了我多年,一直找不到在哪里修改源代码。
(56)2020年03月18日,修订了课程-►报表 / ►活动进度中每页显示条数的源码,从25条修改为100条,这样就再也不用翻页了。
(57)2020年03月22日,安装了【topcoll】课程格式,该课程格式可收缩也可全展开。
(58)2020年04月05日,经过一年时间的调试,彻底解决了下载大一点的文件会出现中断的问题,相应地,也同时解决了mp4微课视频播放一点点后卡在那里不动的问题。使用Chrome浏览器顺利通过了下载超大作业功能,下载【https://mood.nbpt.edu.cn/mod/assign/view.php?id=18040】中的全部作业,压缩为一个文件花了14分22秒06毫秒,浏览器一直在转转转;之后产生了一个10.8GB的超大文件【常用工具软件317B-大作业-18040.zip】,下载到本地花了3小时。作业压缩完成后,php-fpm就停止了工作,下载过程完全由Nginx进程去处理的;而使用firefox下载该10.8GB的压缩文件时,压缩和下载使用了两个不同的php-fpm进程,所以无法完成下载操作。如果压缩的zip文件如果在windows上打不开,升级winzip解压缩软件就好了。所以,Chrome浏览器是运行Moodle的最佳浏览器。同时调整了LNMP架构配置,使服务器能下载最大为20GB的文件。(问题发现者:宁波职业技术学院 李群 李如桃 许勇 王先花 邱斌)
(59)2020年05月02日,登录用户是老师的工号时,可以自由创建课程,无需审批。但当用户是学生的学号时,系统会阻止。(问题发现者:宁波职业技术学院 张岐
(60)2020年05月11日,增加社会人员注册与登录功能。(问题发现者:宁波职业技术学院 周明德
(61)2020年06月28日,解决了点击作业活动中”查看所有作业“按钮后,页面无法完整加载、36个学生作业中只显示出9个学生的作业、页面上不显示图片、链接失效的问题,原因是在作业活动的描述中,使用firefox浏览器直接粘贴了一张超大图片,该图片的二进制代码直接存储到数据库中,需要很长时间下载这些编码,并且这些编码里面有些字符可能会影响到HTML的解释,造成页面加载被破坏。在这种情况下,点击”成绩“按钮,还是可以通过下拉菜单,单独选择36个学生中的一个,查看到该学生提交的作业。彻底的解决办法就是,直接打开作业活动的编辑界面,把作业描述中的粘贴进来的图片直接删除,症状立即消失。作业描述中要放图片,正确的方法是上传一张图片,而不要去粘贴一张图片,只有firefox浏览器允许编辑器中粘贴图片,其它浏览器会阻止这种操作。(问题发现者:宁波职业技术学院 曹琦

(62)2020年06月29日,Java考试中发现,如果把CodeRunnder判断服务放在Moodle物理服务器中,由于判java编程题时服务器资源开销太大,会造成考试时学生学生浏览器中翻页时超时而浏览不出试题。将CodeRunner服务必为备用机后,症状消失。其实4个班181人在做自动批改编程题并不会对判题服务器造成访问高峰,因为学生编一道程序会花很多时间,编写好了,才检查一次,这个检查动作在时间序列上基本是分开的。(问题发现者:宁波职业技术学院 曾棕根)
(63)2020年06月30日,解决了考试结果中只能看到181个学生的结果,但结果总数却显示183个的问题。原因是之前加入两个老师,做一次,因此产生了两个考试结果,之后,没有删除这两个老师的考试结果,直接将他们的账号从考试课程中删除。通过选择”回答过此检测的所有用户“,看到了这两个老师做的两条考试结果,直接将这两条考试结果删除后,考试结果总数变为正确的181条了。注意,下拉列表中头三项都以”课程里“三个字打头,表明要查看的是当前还呆在此考试课程中的用户账号的考试结果;而第四项”回答过“打头,表明要查看此考试活动所有的考试结果,包括参加过考试且从此课程是撤出的用户的考试结果。(问题发现者:宁波职业技术学院 王芳

(64)2020年06月30日,有学生在考试中并没有上传操作结果文件,直接提交空卷,考试结束后过几天却报告自己已经正常提交了操作文件,是电脑出问题的情况。通过”回顾“该生的操作日志,可以看到该题的操作日志中并没有”答案已保存“,证明了该生并没有上传操作结果文件。(问题发现者:宁波职业技术学院 王芳



(65)2020年07月07日,Moodle从3.6升级到3.9,并使用moove主题,彻底解决了过去Moodle界面不豪华的难题。
(66)2020年07月08日,根据信息资源中心对moodle平台现场攻击演练结果,修订了7个安全或隐私漏洞。
(67)2020年07月16日,完成了Moodle 3.9 + Moove课程主题 + Collapsed主题的简体中文翻译;修订了个人主页的“课程概览”界面,使课程按最近访问时间、列表方式、每页显示12门的方式显示,个人主页从此变得整洁美观了。
(68)2020年07月17日,修订了topcoll折叠课程格式中,两行课程主题粘在一起,没有空隙的问题。
(69)2020年07月21日,升级了topcoll折叠课程格式for Moodle 3.9,联系作者,修订了移动课程主题时,进度图标一直在页面上转转转,不能刷新页面的问题。
(70)2020年07月25日,升级了topcoll折叠课程格式for Moodle 3.9,联系作者,修订了使用手机中浏览器访问此课程格式的课程时,页出弹出函数类型应为array或null的错误信息的问题。

四、一路同行,感谢有你。鸣谢以下单位提供研究经费捐助、技术资助或出版资助:

北京顺泽博创科技有限公司刘大斌
新疆乌鲁木齐市实验学校高中化学老师穆楠 http://47.104.63.237/
四川海学德升智能科技有限公司 https://haixueyuan.cn/
中国石油大学(华东)

广东省惠州卫生职业技术学院 http://42.247.29.132/
广东省江门职业技术学院
浙江省温州市平阳县第二职业学校
四川宜宾学院外国语学院
浙江工商职业技术学院
浙江师范大学教师教育学院 http://moodle.zjnu.edu.cn/
浙江师范大学继续教育学院
安徽省马鞍山职业技术学院
福建省厦门城市职业学院
江苏信息职业技术学院
浙江省金华职业技术学院
浙江省宁波职业技术学院
浙江省嘉兴市财税教育管理中心
澳大利亚Moodle官方 https://moodle.org/
北京大学出版社
人民邮电出版社
清华大学出版社
清华大学《现代教育技术》杂志社
上海市计算技术研究所《计算机应用与软件》杂志社
华北计算技术研究所《计算机工程与应用》杂志社