Posts tagged ‘moodle_dev’

Moodle 2.x过滤器不能正确链接中文活动名的补丁

补丁在此

Moodle 2的过滤正则只考虑了欧洲语系带注音的字符,没有考虑亚洲的不用空格分词的语言,导致过滤器失效。这个补丁能解决亚洲语言的问题,但也让欧洲语系失效。两全其美的解决方案我不知道,因为我不懂欧洲语系的正则,就像Moodle开发者不懂中文正则一样。

支持Moodle 2.0的在线评测2.0开始公开测试了

项目主页、下载地址、安装说明等都在:https://github.com/hit-moodle/moodle-local_onlinejudge

它并不是1.x的简单升级,而是完全的redesign,和近乎完全的recode。主要改进:

  1. 架构上分成三个部分:judgelib、judge和client。
    1. judgelib是一个函数库,以local插件的形式安装到moodle中,对外提供评测接口
    2. judge是judgelib的子插件,可以叫做评测引擎插件。现在支持sandbox和ideone.com两种引擎,还可以扩展到更多
    3. client是和最终用户交互的插件,它对用户提供界面,对内调用judgelib做评测。现在只有一个作业类型插件,还可以扩展更多,比如测验插件、活动插件等等
  2. 作业插件支持多文件编程(仅限sandbox)
  3. 管理员可以设置一些全局设置
  4. 教师可以设定自己的ideone.com账号,避免了免费账号判题次数的问题,还能通过ideone.com管理学生的程序
  5. 可以一次只重新评判一名学生

暂时还未完成的1.x的功能包括:

  1. 显示学生程序的输出给教师。这个功能将改进成显示更详细的程序运行信息
  2. 代码加亮预览。因为moodle 2.0的变化,这个实现起来稍微有些麻烦,正在寻找最好的解决办法

1.x用户将moodle升级到2.0后,可以直接升级online judge 2.0,原有作业都会被继承保留。

欢迎测试!发现任何问题,有任何意见和建议,都请在项目主页的issues中提出。多谢!

另外,后续版本的发布可能不会再通过博客等媒体宣布,请在github上watch本项目,以便随时了解最新动态。

再另外:

  1. 热点提问支持moodle 2.0的版本早已经在了,而且可以算是稳定版,欢迎使用
  2. 支持Moodle 2.0的MOSS反抄袭将是接下来的开发焦点。现在的代码还很惨不忍睹,很不建议试用,不信可以在github上看看

最后:诚征志愿者帮我们解决各种issue,详见《志愿者指南

庆祝Moodle 2.0中文包翻译率达到80%,冲入第一阵营

在提交了剑晖的#1142贡献后,Moodle 2.0中文包的翻译率终于达到了80%,冲入第一阵营。记得去年9月份翻译协作网刚开通时,只有50%多一点儿翻译率。半年多的时间,326次提交,15位志愿贡献者,完成了大量的翻译和修订工作。贡献者名单如下(排名不分先后):

  • 邢林林
  • 陶显锋
  • Zhou Joe
  • zhang angel
  • 王帅
  • Xie Yubo
  • Jin Ping
  • Gao Jiayang
  • Fu Jianyu
  • 田大龙
  • Lee Edward
  • Zhao Chonke
  • Zhang Lei
  • 剑晖
  • Sun Zhigang

感谢他们!期待100%时,贡献者名单里能有您的名字!

Moodle用户认证切换到CAS+LDAP笔记

cms以前用的是email认证,用户自己填个人信息。过程繁琐,信息不准,相当折腾。偶然获知信息处正在做统一认证平台(CAS),就联系了一下,他们也正希望能有其它IT系统融入,所以一拍即合,相当融洽。

Moodle本身就有CAS认证插件,认证后从LDAP获取用户信息。配置起来并不复杂。两个比较好的参考:http://docs.moodle.org/en/admin/auth/ldaphttps://mediawiki.middlebury.edu/wiki/LIS/CASifying_Moodle

比较复杂的是和旧账号的兼容。如果能有明确的旧账号和CAS账号的对应关系,那么只要修改Moodle的user表,把username改成cas的用户名,auth改成cas就行。一个脚本,甚至几条sql语句就能搞定。

可惜我们没有这样的对应关系,必须让用户自己设定账号绑定,所以有了这个项目:https://github.com/hit-moodle/bind_cas_users。它先引导用户在CAS登录,然后让用户输入旧用户名和密码,验证通过,用户确认后,修改user表,使username为CAS用户名,auth为cas,这样用户以后直接从CAS登录就能完全继承旧账号的一切了。

这里有个难点,就是假如旧用户名是user1,CAS用户名是user2,而Moodle还有一个用户名是user2的用户。如果user1在user2之前做绑定,那么无法修改username。

解决方法是把所有旧用户名统一加上后缀“.local”(先要确认没有用户已经用过这个后缀),本地验证时自动在用户输入的用户名后加上“.local”。这样改username就不会发生冲突。下面这条SQL语句就是做这个的

提前若干天发出账号切换通知,让大家先去CAS激活账号,同时在小范围测试账号绑定程序。

在直接用cas登录时,假如moodle中并没有该用户的记录,会直接创建一个新用户。这导致,如果一个cas登录了的用户,没有去做账号绑定,直接点击了cms的任意要求登录的页面,那么他就在cms中有了一个和cas对应的新账号,而旧账号无法和新账号绑定了。这个问题的解决靠下面这个补丁:

挑一个夜黑风高的晚上,关站完成以上过程。大家一觉醒来,就都必须都用CAS登录了。

Moodle的cas登录插件还兼容其它登录方式。在其配置中设置好后,在登录界面会显示两个选择:CAS登录、其它登录。因为cms还有很多校外用户,以及cas中还没有考虑校园访客的情况,所以我们保留了原有的email认证(用户名加了后缀)。CAS登录会先判断用户是否已经在cas中登录了。如果是,就直接以其身份登录;如果否,才显示选择登录方式的界面。

另外,auth/cas/cas_ldap_sync_users.php是需要放在cron中的脚本,但没有转换完所有账号前千万不要运行。它会直接在moodle创建ldap中的所有用户,而不会进行任何账号关联操作。一旦运行,再想让用户能继承旧数据就比较麻烦了。

假期第一周工作总结

这一周的主题,就是Moodle 2.0

赶在临放假前,将cliff调好的服务器送入了网络中心,指导服务器的技术支持人员将其成功上架。因此错过了科研研讨会第一天精彩的下半场。

科研研讨会第二天中午接到数学系一名教师的电话,于是前去介绍Moodle,就又错过了第二天精彩的下半场。但愿这趟没白跑吧。

将老cms上的数据库和用户文件拷贝到新服务器。太多零碎文件了,打包和解包都耗费了数个小时。传输按理说应该很快,但一个机房里都是千兆接入的两台机器平均速度还到不了10MB/s……

1.9升到2.0勉强算顺利,遇到一个bug,但官方旋即就修正了。

开始测试和开发:

  1. 简单修改了几个缺省参数,可以让新用户直接启用AJAX功能、跟踪讨论区未读帖子和不自动订阅讨论区。
  2. 做了个可以用中文全名搜索用户的补丁,顺手pull-request给dongsheng讨论一番,决定做个更好的。
  3. 报了一个小bug,也做了小补丁,但skodak看我的补丁时发现原来的代码有严重安全问题,并没有直接用我的补丁,而是做了新的。留个名的念头破灭。
  4. 和dongsheng讨论后,做了个比较大的补丁,可以更好地支持各种语言的用户全名搜索。提交到moodle tracker,等待发落中……
  5. 又报了个moodle和nginx配合的bug,被skodak指出是我们自己配置的问题。耽误他时间了,很不好意思。希望这条信息能对后来人有帮助吧。
  6. 做了一个更好地处理姓、名顺序的补丁,如果全名搜索的补丁被接受,就再PULL一下这个。
  7. 中文姓氏检索用户的补丁移植到了2.0。这个太中国化了,不可能给官方。

git和github.com真好用啊!!!!

另外就是moodle 2.0的翻译工作。把中文包的翻译率从70%提升到了73%,大概新翻译了有500多条吧(感谢王帅朋友贡献的5条),修正的也好多,数量就没有统计了。

做这些很有成就感,很快乐,欲罢不能。但下周不能再干这个了,得写tmd的论文了,还有tmd的NSFC,过tmd年,开始tmd的生活。TMD!

Moodle 2.0值得关注的新特性

2.0是Moodle历史上最大的一次升级,已经发布了RC1版,期望一个月后能正式发布。现在moodle.org就在运行Moodle 2.0,说明它已经能在开发人员的监管下稳定工作。

目前已经有三个可以公开访问的运行2.0的网站,除了moodle.org,还有lang.moodle.org(Moodle的协同翻译平台,注册后就能参与),和qa.moodle.net(公测网站,每个人都可以用管理员、教师或学生身份登录)。通过使用这三个网站,以及Release Notes,对Moodle 2.0已经有了一些感受。

视觉上的主要变化是更漂亮和方便了。2.0官方提供的主题风格的数量和质量都有很大的提升,而且主题本身还可以提供个性化的功能。比如版块不再是只能傻傻地贴在页面上,用户可以把它放到一个停靠栏里,需要的时候才弹出来,很节约空间。

“导航版块”能让用户非常方便地直接进入不同课程的不同活动。“设置版块”有上下文感知能力,会根据你所处的位置不同自动变为最相关的选项。

旧的HTML编辑器被抛弃,换用TinyMCE。它不仅对各种浏览器的支持更好,排版功能更强(比如支持layer、CSS自定义),而且支持可视化的公式编辑,这个太有必要了!

旧的基于目录的文件管理被“容器”替代。从用户角度看,当需要使用文件的时候,只需从它所在的容器选择它。容器的种类很多,可以是自己上传的文件和目录,也可以提供一个url让moodle自己下载,还可以是从Google Docs、DropBox、Youtube等导入。当然,最主要的导入功能在中国是别指望用了。所有导入的文件都会自动和文件源保持同步。从开发者的角度看,文件不再是以目录、子目录的形式组织,而是被后台用hash一类的方法管理。好处是重复的文件会只有一份,缺点是不能再通过直接访问文件系统来处理文件了。

“活动完成状态跟踪”和“条件”对授课会很有帮助。它可以强制要求学生必须先做完某件事,才能再做另一件。比如,必须先参加一个投票,才能提交某个作业;完成作业1,才能做作业2;如果作业1得分高,可以做作业2,否则做作业3……。这个功能亦扩展到课程级别,从而开始支持先修课。

“反抄袭”功能有了内置API,既可以通过插件的方式扩充多种反抄袭手段,也让任何功能模块都可以调用反抄袭的API。看来与抄袭的斗争已经是世界性的了。

“信息反馈”模块第一次成为标准模块。用它可以自定义各种形式的调查问卷,而不像旧的“问卷调查”模块只能设置固定的几个问题。

表面的主要变化并不是很大,最重的都在后台。比如开始支持Web Service,这使得Moodle可以更好地和其它系统交互,也更便于移动客户端的开发;“备份和恢复”功能完全重写;Wiki完全重写;Workshop完全重写……

后台的变化意味着它需要更多的测试。估计一年以后俺的乐学网就可以升级到2.0了。在此期间,得把在线评测和反抄袭做个移植。因为底层的变化太多,这个移植动作实在不小,有兴趣的欢迎加入开发!

Moodle插件“热点提问 1.0”发布

这可能是Moodle第一个为教室服务的插件。其设计灵感来自于普渡大学的Hotseat

课堂互动是目前教学工作中比较强调的一件事。但中国学生的性格内敛、羞涩,在提问前经常会瞻前顾后,顾虑较多,导致提问不够踊跃,难以形成良好的互动。本插件就是为解决此问题而设计。

在“热点提问”中,学生可以像发微博一样地提问,而且可以匿名提问。还可以对别人的提问投票。教师可以根据投票结果获知学生对什么问题最感兴趣,就能更有选择性地回答学生的问题。

我已经用了两次课,效果还不错。能在上课时访问网络的学生还是不多,所以参与度目前还不算高。可以到这里围观它。

此插件可以在这里下载这里有安装说明。

moodle的隐藏功能

当了解到这些隐藏功能后,我不得不对Moodle的喜爱又增加了一层。本文慢慢搜集它们,持续补充。

隐藏功能是那些在moodle界面中找不到,必须手工在地址栏输入url才能使用的功能。本文后面只给出每个url相对于moodle root的部分,比如“/foo/bar.php”意味着应该访问“http://www.mymoodle.com/foo/bar.php”。

1. 系统管理

1.1 数据库性能监视

/admin/dbperformance.php

1.2 把MySQL数据库从MyISAM格式转换到InnoDB格式

/admin/innodb.php

因为MyISAM不支持事务等缺点,从Moodle 2.0开始,InnoDB将成为官方推荐的格式。详情可以参考MDL-23682,moodler们对MyISAM的态度几近于愤怒。

1.3 体检中心

/admin/health.php

自动检查系统潜在的问题,并给出建议性的解决方案。这个很值得每隔一段时间就用一用。

1.4 全数据库替换

/admin/replace.php

对整个moodle数据库进行文本搜索和替换。比如网站更换了域名,就可以用一下这个。

2.辅助开发

2.1 调试发出的email

把所有发出的email都重定向到一个log文件中。

脚本在/admin/mailout-debugger.php,但它不是从浏览器里访问的。它的注释详细说明了使用方法。

3. 彩蛋

3.1 列出所有用户的头像

/userpix/index.php

Moodle Online Judge 1.3.1发布

新特性:

  1. 支持40余种编程语言的在线评测。新语言的支持来自于ideone.com,这是一个免费的Web服务。所有程序都是在ideone.com运行,所以对您的moodle服务器而言,是相当安全。该功能由刘琦卿开发。
  2. 因为可以使用ideone.com运行程序,所以从这个版本开始支持Windows了

下载请到:http://code.google.com/p/sunner-projects/downloads/list

Moodle在线评测1.2版发布

这个版本最大的改进是不再延迟评分,而是实时评分(由计算机学院06级学生刘琦卿开发)。此外增加了把编译警告视为编译错误的功能,可以帮助学生养成更好的编程习惯。再就是一些安全增强和小修补。

该插件的详细介绍在:http://code.google.com/p/sunner-projects/wiki/OnlineJudgeAssignmentType