atutor.no

Here be links.

Blogs

Vegard A. Johansen's picture

Two small patches for the inbox

Back after a summer, and installing the patches Gorzan made for us this summer. This post is about two small changes to the inbox feature in ATutor. These are two small patches that many users might not want to install, but we've had several requests for this.

1. Remove the ability to delete sent messages after a number of days: Currently an admin must set a number of days before sent messages are deleted. I believe the default is 120. This removes that functionality, as we don't see any reason to delete these messages, and many users have asked us why this must be so.

2. Preserve all text in quoted mail: This might be more controversial, but some of our users like to be able to respond to everything in a quoted inbox message, which is not possible when the system truncates quoted text. This patch changes that.

More patches coming up!

gorzan's picture

Question statistics for printouts

When managing tests, the instructor can click on the "statistics" button to view statistics for each question of the test. Last year we added (on request from some of our users) a small bar chart to more easily visualize these statistics. However, because we used a css trick to create this bar that utilized the property "background", these bars didn't appear on printouts. This little patch fixes the printout problem and enables these bars for the default theme. (I thought they already were enabled for default theme but it seems they were not..)

Vegard A. Johansen's picture

Changing the algorithm for multiple answer questions

This is a followup to my post Improving "multiple answer" question type, which we managed to sort our due to great help by Serhiy - thanks!

Read the comments on the previous post to get the discussions, here's only the highlights, the solution, and the tools you need to get this done on your ATutor install.

Problem

The problem with the multiple answer questions was that is was an all or nothing approach to scoring them, which ment it was hard to score them automatically.

Put differently: if you had a question worth 5 points, which had 10 alternatives where 5 of them was correct, the student would have to match all the 5 alternatives to get hs 5 point. If he had 4 correct he got nothing.

Solution

We wanted to change this to work consistently with the matching question type, where the student would get 4 points for his 4 correct alternatives, and at the same time make sure he couldn't get everything correct by just selecting all alternatives.

Serhiy allready had the algorithm to do this, so we got it from him and here is an example of the new calculation for multiple answer questions:

Here's the new logic / flow:

  • The median score per alternative is calculated from the max possible score on the question (in this example it's 1 for all alternatives, but it would be a different number if you had a higher max possible score on the question)
  • For this example, when median = 1: one correctly marked alternative gives 1 point, one falsely marked gives -1.
  • it is not possible to obtain negative score, as 0 is the lowest you can go.

Get it done - change algorithm

Rather than creating a patch I'll describe to you how to get this done on your own system. There are two parts of it, and you might not want to use both of them.

First, replace the old algorithm with the new one. Find the file include/classes/testQuestions.class.php and within that change line 1425 to 1455 with the code in the attached file (down below) called MA_modified_part_of_testQuestions.class.php.txt. Note that this is true for the current (1.6.2) version of the file in ATutor, but not neccessarily for later versions.

This will change the algorithm for new results, but you might want to make use of this algorithm on your previous results too?

Get it done - update old scores

To update all your earlier test results (note again, there might be reasons you do not want to do this.

But if you wish to, which we did, download the attached custom.zip file, unzip it and you will find a folder called custom and a file within it called updateTaskScores.php.

Upload the folder to you ATutor root directory, log in as admin, navigate to the file online, that is http://yourinstall/atutor/custom/updateTaskScores.php

..and click the buttom with the Norwegian text "oppdater poeng på alle tester" ("update points on all tests"). Wait, done.

Remove the custom folder and file again and you are all set!

Huge thanks to Serhiy for the algorithm and Svein-Tore for the update script!

Vegard A. Johansen's picture

Announcing Certify!

A module we've (that is Håvard) been working on for a long time is now ready for release to the community! We called it Certify, it is mighty fine, and this is what it does:

Certify will let you add a certificate to a course. The certificate can contain one or more tests, and when a user has reached the pass score / pass percent for the test(s) bundled in the certificate, the user is allowed to download a pdf certificate.

Before the user has reaced the pass score he or she will see a progress bar under the "Certificates" tab, showing how far he or she is on the way to obtaining the certificate.

An instructor (or privileged user) can manage certificates, which means adding them, adding tests to them, and see student status for a given certificate.

Pictures are however more telling than words.

Here is certify for a student

This shows the certificate name, a description, and a progress bar showing how far the student is in obtaining the pass scores for the 8 tests in this course.

In the picture above I am 21% on my way to obtain the pass percent of 80% in all the 8 tests this certificate consist of.

In the picture below I have reached pass percent for all tests in this certificate. The certificate status is then 100%, and I am allowed to downdload a pdf certificate.

A certificate template can be created and uploaded by the instructor. If not a standard certificate is used (taken from the other Atutor Certificates module by Cindy).

Here's a screenshot of the certificate I got from the link above:

Yes, it is sweet!

Certify for an instructor

Here we are at manage -> certify, which shows the certificates in this course (there can be several certificates per course, allthough I imagine most people will only use one).

If we click on the "edit tests" button we get this:

This shows a list of all the tests that are found in this course, and lets you add as many of them as you wish to the certificate. Note that these tests must have a pass score or pass percent set. Also note that Certify only acts as a container. The pass scores or pass percents must be set in the tests themselves, and certify will only do the calculation for you.

The next screenshot shows what you will see when you click the "Student status" button:

..a sorted list of the students results. Note that certify only cares about the best result a student has in a test. That means a student can improve his score in a test (where more takes are allowed), but not the other way around.

That is pretty much it! We are using it in production today, and you can have a look at it in action if you register for the Medical Peace Work course

We have found it to be stable for production use, but there are still some bugs, minor issues and areas for improvement left in it, mainly for admins of it:

  • You can upload a pdf template for each certificate, but there is no way to see which template you are using just yet, and
  • If you upload a new template you will have to manually delete the old one form the server, as well as any cached files (named typically cert*.pdf (where * is a wildcard). The files are found within the ATutor content folder, in the "certify" folder.
  • You will need pdftk installed at your (Linux) server! A server admin must typically do this.
  • And you must manually set the path to pdftk in line 100 in download_certificate.php. Here's the line: $exec = '/usr/bin/pdftk '.$template.' fill_form '.$filename.' output '.$filebase.'pdf flatten';, as you can see here our path to pdftk is "/usr/bin/pdftk ".
  • There are some tweaks that should be done in the GUI as a radio button isn't selected if you click the table row it belongs to. You will have to hit the actual button!
  • And probably some more too

We're adding it here first, and at atutor.ca in a few days - get it while it's hot, give it a go, and give us feedback!

gorzan's picture

Feed subscriptions

One feature of ATutor that many of our users at helsekompetanse.no appreciates is the email subscription to forum threads. Last year we also subscription to the announcement feed that is on the front page of each course, and the newest addition to the feed subscription family is the blog subscription that I posted under contributions just a few minutes ago.

The announcement feed subscription posted last year was a bit of a quick hack. It works, but on the code side it isn't particularly pretty. This time around, I wrote a class called subscription that can easily be used to add email subscription to other feeds (should this become an issue in the future), and which also can easily be used to handle subscription for the already implemented forum and announcement subscription. The latter wouldn't in any way add to today's functionality, but it would serve to 'clean up' the codebase somewhat, as we now actually have four different methods of subscribing and sending out emails for four different feeds. (Forums, forum threads, announcements and blogs.)

Vegard A. Johansen's picture

Rethinking assignments

I've been posting several things we wish to adjust, change or develop in ATutor lately, and here's one more!

One of the things we get the most negative feedback and support questions on, is how assignments work, both from students and our instructors.

Today you deliver assignments from the "my files" area of the file storage. There are some good things about this, specifically that you can use the "my files" are to store your assignments, keep revisions, and work on them there till they are done, then deliver them with a click or two. Also, creating a new assignment for instructors works just fine!

Sadly there are also many problems with this.

For students:

  • Most of our students don't use "my files" to store these files, so delivering assignments through it becomes cumbersome. You first have to find and upload to "my files", select files from there, click deliver, then choose which assignment to deliver, then actually deliver.
  • You need to activate "file storage" even though it isn't used for anything else than assignments.
  • The students have nowhere to see which assignments a course has, or when they are due before they actually select a file and click "hand in". Then you get a list of the different assignments with their due dates.
  • Feedback on the assignments are delivered as a comment to their files, so they need to manually check back here to get feedback.

For instructors, which is where we get the most complaints:

  • First and foremost, every time a course uses assignments we get this complaint: there are no way for an instructor to see who has delivered and who has not. When chosing assignments -> submissions they get a list of folders named after the users username. They then have to manually click each folder to see if there are files handed in.
  • Earlier there was no way to give feedback from here either, but now you can do this via the comments. However, it is still cumbersome to see who you have commented to, and who you haven't

Main issue

I believe the main issue here simply is that the file storage is designed to be a tool to store files, not a place to hand in assignments. It works great for what it is originally designed for, but not optimal for what it is tweaked into also doing.

I am personally partly responsible for this, as we partly specified this functinality years ago, but that doesn't mean we shouldn't look at it again now, after we have gotten this feedback and experience with how students and instructors use it.

For me the solution is to move it out from the file storage and do one of the following with it. Which of these is better is up for debate:

  1. file uploads as separate question type to be used in tests.
  2. assignment as own tool.

File uploads as question type to be used in tests.

In this scenario we would use the test tool as it is today, but assignments would be handled through a specific question type that would allow you to upload files. The typical scenario for us would be to create a test with one / two questions of the file upload kind.

The good thing with this is that you would have all the functionality that is in the test tool today (title, description, availability, number of possible tries, when to release results, submission lists etc). It would also work with our certificate module out of the box, an all in all it seems to me simpler to develop and maintain.

You would no longer manage these with manage -> assignments, but via the test tool.

The bad thing is that assignments and tests are different things, and this might be confusing. You would also need to name the tool (and thus the tab) "Tests & Surveys & Assignments" (in Norwegian "Tester, spørreundersøkelser og innleveringer") which undoubtely is a very long title for a menu item.

Assignments as it's own tool

In this scenario you would still manage the assigments as today, but they would be available to the students through its own tool / tab, named "Assignments". We would have to develop more, like a student front end, some way to see submitted assignments in the assignment module and etc.

What's better?

I think I personally lean more to one of the solutions above, but I would love to get some more feedback here - fire away in the comments!

Vegard A. Johansen's picture

Improving "multiple answer" question type

We are moving more into automated tests where the system takes care of what the pass score or pass percent is, and then gives the user a certificate to download (more on our new Certify module coming soon).

In this process we have discovered a problem with the "multiple answer" question type, that can be best illustrated with this screen shot:

ATutor tells the user how many points are available, and in this case there are 10 questions with 10 point available, which for the not-very-observant student means that all alternatives are right. The problem is still there if there was 5 points available: the student could check all alternatives and reach maximum score for that question.

The underlying problem here is that you can only give point per question, not per question alternative, which means that you need a human beeing to correct all tests and this automatic correcting is not possible.

To solve this I believe we need to be able to set points per alternative, and also to set negative points (so you can't just check all and get away with max score).

let's take a look at one question:

This is how I believe this question type must work. Now, this will create a new issue, which is that creating these questions will be harder, so we need to take that into account as well.

As this is pretty simple calculating I believe the system should do it by taking the point value set on a multiple answer question, and then divide it as positive and negative scores on each alternative, which if needed can be changed by the creator at a later time:

We are willing to do this job, but need feedback on how to best solve it! I also wonder if there will be any consequences for backups and restoring of tests, and the IMS QTI Question and Test Interoperability Support?

Vegard A. Johansen's picture

Actions, messages and subscriptions in ATutor

We get a lot of feedback from our users, and a very clear pattern is that the users wish to be notified of different things that happens in the platform that is of relevance to them.

For instance they love the ability to subscribe to forums, announcements, and messages / inbox (allthough they seldom find out how to subscribe to the last one).

They most often say that they want an e-mail when this and that happens, which would be fine, but I don't think that sending all these e-mails is the best solution, neither the one that scales the best.

An activity / notification feed for ATutor

This has led me to think that we need some kind of activity feed or notification feed in ATutor, as popularized by Facebook and their notifications (you need to be logged in to Facebook to see this page), and Basecamps dashboard or project overview.

Here's a recent screenshot of my latest Facebook notifications:

The "items" (like photo / status / user) and "actions" (comments / likes) would be different in ATutor, and that leads to my questions to Atutor users and developers:

  • What are the items and actions in Atutor that should be included in such a stream?
  • How could we technically and design-wise implement this in ATutor?

We are hiring again, and will thus have two developers available to work on ATutor in the not-so-distant future, and this is one of the things we wish to prioritize. We're willing to do all of this work, get it into core and maintain it, given that we and ATRC agree on how it should be done. And yes, we know that this is a massive task!

Here's my initial thoughts on the two points above, please add your comments in the comment field!

Items and actions in ATutor

First, there are different items and actions depending on your status. Regular students need to see some things, while assistants needs to see other things, depending on their priviledge. The colored things in brackets are links and / or generic terms, comments in italic.

For normal students:

For the communication tools

  • You got a [new message] from [user] (inbox)
  • [User] wrote [new post title] in [forum name]
  • [User] replied to [post title] in [forum title]
  • [announcement title] was posted in [course name]
  • [user] wrote [blog post title] in [blog title]
  • [user] commented on [blog post title] in [blog title]
  • [user] uploaded [file name] in file storage.
  • [user] uploaded a revision of [file name] in file storage
  • [user] commented on [file name] in file storage

For tests and assignments

  • test [test name] is now available.
  • test [test name] closes in 3 (?) days
  • assignment [assignment name] closes in 3 (?) days
  • [certificate name] is ready for download (our module, not yet released)

For content

  • [content title] is now available (given that a release date is set)
  • [forum title] was added (when creating a brand new forum)
  • new [poll name] is relased
  • [FAQ] is updated with [FAQ question]
  • [Links] are updated with [link title]
  • [Reading list] is updated with [resource name]

For courses

  • [course name] is available (given release date is set)
  • [course name] closes in 7 days (given end date is set)

In addition we will need some feed items that are specific for instructors or assistants with a given privilege, like:

  • [user] requested enrollment in [course name]
  • [user] answered [test title]
  • [user] submittet [assignment title]

I have probably forgotten some as well.

How to implement it technically and design-wise

This is the hard part, and I basically have no idea what the best way to start would be. Initially I'm thinking that each module or core function that needs to feed into this notification stream should publish it's own customized RSS file, and that the notification stream function should read and process / sort these after some rules. Some things most of the RSS feeds would need are:

  • Date (always needed for sorting)
  • Item (announcement title, blog post title, forum title, forum post title etc.)
  • Item link (the URL to the item)
  • User name (if needed in the stream)
  • Action type (like "commented" or "posted" / "wrote" or "submitted" or "requested" or "uploaded" etc)
  • Course name
  • More?

The placement is pretty much a given I think, this fits perfectly on a slightly redesigned user start page. Not in it's own sub page though, as I want it up front! We may want to add a feature for admins to turn this off and on.

I also belive the items should be sorted by date, with the most recent items on top. Alternatively it could be sorted by course name, then date.

And I believe we should have a cap on it, so you would at the most see the 20 / 30 / 50 (?) latest items.

Another important thing to think about is how we create the translation terms, as there are many different ways to write messages like this in different languages.

New modules would have to be able to use this so we would need to describe how they can. This should be a part of the module documentation.

How it fits in with the original user feedback

As I started with, our users crave notifications, and they also want them by e-mail. I don't think we should remove the e-mail notifications that are allready in place in ATutor, but you should also be able to get the notification stream in e-mail, I think LinkedIn does this really well:

The user would need the ability to set when this should be sent, like for instance:

  • Daily
  • Weekly
  • Biweekly

Random other thoughts

First of all, ATutor just implemented the Open Social framework as a module. As far as I know it's also the first open source application that has done this - kudos for that!

I don't know the Open Social specs very well, but if this specification can be used to create the other feeds we need that would be really nice! Also, the ATutor Social module allready has an activity feed, and this is a feed I typically would like to include in a more general and site-wide feed.

So, comments are open! What would it take to implement this? What is a realistic time range to get it implemented? What have I missed? Or am I on the wrong track alltogether? :)

Vegard A. Johansen's picture

Howto remove "subscribe to thread" feature

Recently we had a project meeting and went through some feedback from the users of one of our courses. One thing that came up which kind of surprised me at first was that many users didn't get the difference between the "subscribe to forums" functionality and the "subscribe to thread" functionality. They wondered why they had to subscribe to the thread when they were allready subscribed to the forum.

Well, they don't of course, but when thinking of it you can understand the question. If you are subscribed to a forum allready, the system shouldn't give you the possibility to subscribe to the threads within it.

The good way to solve this would be to only allow subscription to threads if the user isn't subscribed to the forum they belong in, but the easy way is to just remove the possibility to subscribe to threads alltogether. This is what I will try and see if I get any reactions.

To do this, find the include/html/forum.inc.php, scroll down to lines 156 - 162 and comment out the following code:

<?php
    
if ($_SESSION['enroll'] && !$row['locked']) {
            if (isset(
$last_accessed[$row['post_id']]) && $last_accessed[$row['post_id']]['subscribe']){
                echo 
' <br /><small><a href="forum/subscribe.php?us=1'.SEP.'pid='.$row['post_id'].SEP.'fid='.$fid.SEP.'t=1">('._AT('unsubscribe1').')</a></small>';
            } else {
                echo 
' <br /><small><a href="forum/subscribe.php?pid='.$row['post_id'].SEP.'fid='.$fid.SEP.'t=1">('._AT('subscribe1').')</a></small>';
            }
        }
;
?>

Many people would probably object to removing functionality, but I try to live by the KISS principle instead!

Vegard A. Johansen's picture

Adding Flowplayer 3.* in ATutor

We have used Flowplayer as our preferred movie player in ATutor for a long time now, and I have written a post about how you can integrate it in you install.

That was for version 2.2.1 of Flowplayer, but we're now at version 3 (3.0.7 at the time of writing). Flowplayer is now more elegant, and you have to integrate it in a different way.

Again, first thing is to download the player.

Then, copy the js file you need to your server, and add a reference to it in you theme file (/your_theme_path/header.tmpl.php):

<script type="text/javascript" src="/flowplayer307/flowplayer-3.0.6.min.js"></script>

This file will be in the example folder when you download it, and yes the version number for the js is 3.0.6 even though the player is at 3.0.7.

Third, edit your include/lib/output.inc.php. Around line 650, add the following to get ATutor to output the right code when it finds a .flv file inside the media tag:

<?php
// .flv - uses Flowplayer 3.0 from flowplayer.org (playing file via full URL)
preg_match_all("#\[media[0-9a-z\|]*\]http://([\w\./-]+)\.flv\[/media\]#i",$text,$media_matches[11],PREG_SET_ORDER);
$media_replace[11] ="<a class=\"flowplayerholder\"
style=\"display:block;width:##WIDTH##px;height:##HEIGHT##px;\"
href=\"http://##MEDIA1##.flv\">
</a>"
;

// .flv - uses Flowplayer 3.0 from flowplayer.org (playing file from AT_content_dir)
preg_match_all("#\[media[0-9a-z\|]*\]([\w\./-]+)\.flv\[/media\]#i",$text,$media_matches[12],PREG_SET_ORDER);
$media_replace[12] ="<a class=\"flowplayerholder\"
style=\"display:block;width:##WIDTH##px;height:##HEIGHT##px;\"
href=\""
.AT_BASE_HREF."get.php/##MEDIA1##.flv\">
</a>"
; ;
?>

(not including the php start and stop tags!)

That's it for the output.inc.php, no more changes needed! Note that the earlier inline javascript Flowplayer needed now is gone, and all it inserts is a slighty styled link.

You do however need to change one more file to compensate for this, and that is your theme's footer.tmlp.php. Add this at the top of it:

<script language="JavaScript">
window.onload = function() {
// for Flowplayer
$f("a.flowplayerholder", "/flowplayer307/flowplayer-3.0.7.swf", {
  clip: { autoPlay: false, autoBuffering: true }, 
   plugins:  {
    controls: {
    all: false, 
    play: true,
    scrubber: true,
    fullscreen:true
    }
   }        
});
}
</script>

For those of you familiar with the magic that is jQuery you will recognize the syntax. This basically says that the Flowplayer (flowplayer-3.0.7.swf) should load whenever the page finds an a-element with the class "flowplayerholder", and it passes some instructions that you can change to your liking by looking at the Flowplayer documentation.

To make ATutor insert .flv files in the media tag I suggest you read about the changes done in include/html/filemanager_display.inc.php that I described in my original post.

To have a look at the new player, have a look-see here!

Hi, this is the atutor.no blog, where the community can blog about things related to use, development or thoughts concerning the open source LCMS ATutor!

Register or log in to start blogging, or get in touch for any reason!

Recent comments