What if the Moodle UX was like Netflix?

moodle_netflix

Having spent the past few days in London with a colleague trying to figure out the future of “digital learning”, I couldn’t stop thinking about what an LMS (such as Moodle) would look like if it adopted a truly simplistic design and setup.  A design that “encourages”, nay… damn right forces you to love it.

Imagine if the image above was your dashboard.  And your courses were nothing more than “covers”, like movie covers on Netflix or Amazon. And the course you last viewed was bigger than the other tiles and highlighted, and when you clicked on it, it resumed where you left off.

When you click on the course, you get one single, simple page.  The course may be just a single activity, whether an H5P Project, a SCORM package or a video. It doesn’t matter.

“But one single activity isn’t enough, I hear you say”.

Well, why not make lots of single activities?  Like a library, whereby each course is in fact just a placeholder for an amazing resource. So we stop building long topic driven courses that look they are trapped in 2009 and actually build courses that offer personalisation where the user can chose what they want to learn.  Like we chose what we want to watch.

Users could simply “add courses” to their library (think self enrolment), they can keep the course (if they like) or un-enrol when they are done.

“But we need to tell learners what to learn, I hear you scream!”

Netflix don’t explicitly tell me what I should watch, but they certainly sway my hand. It’s all in the presentation, and tagging. Something which Moodle can do really well.

No messy course formats, no ugly Moodle hacks, no specialists blocks, just a clever Moodle Theme and a change of culture (a revolution, if you will). We could turn off all the bloat, hide all the settings and have a front-end more akin with the tech we use daily.

I can hear screams of Moodle admins and teachers crying that “this wouldn’t work in our organisation“, but in the same vain, I can hear cheers from learners who don’t give a damn about the backend, the gradebook, the pedagogical workflow of the course, or how clever an API is.  They want to log in and learn. That’s it!

Sometimes, less is more.

I believe this type of approach (although admittedly not suitable for all organisations) would perfectly suit the casual learner. Those who are time precious, who need to dip in and out of content..and who knows.. if done right…may “binge watch” your course resources like a box set of Game of Thrones.  You never know.

I haven’t built this yet, as I’ve been insanely busy, but the more I think about it, the more I can’t stop thinking about it. It could be crazy enough to work.

Language customisations for Moodle emails

Moodle Language Packs

I’m often asked where a specific language string hides within a Moodle Language Pack.  There’s no way I can remember them all, and I often find myself  repeating the same process trying to find them.  So I thought I’d keep a running document  that shows where they are and what they do. I’ll keep adding to this list as I go. If anyone has any more, please share them with me (@lewiscarr).  Eventually I’d love to turn this into some funky infographic type document.

Welcome Email Confirmation

Component: Core

String: emailconfirmation

Standard Text:
Hi {$a->firstname}, A new account has been requested at ‘{$a->sitename}’ using your email address. To confirm your new account, please go to this web address: {$a->link} In most mail programs, this should appear as a blue link which you can just click on. If that doesn’t work, then cut and paste the address into the address line at the top of your web browser window. If you need help, please contact the site administrator, {$a->admin}

New User Email password generated from CSV Upload

Component: core

String: newusernewpasswordtext

Standard Text:
Hi {$a->firstname}, A new account has been created for you at ‘{$a->sitename}’ and you have been issued with a new temporary password. Your current login information is now: username: {$a->username} password: {$a->newpassword} (you will have to change your password when you login for the first time) To start using ‘{$a->sitename}’, login at {$a->link} In most mail programs, this should appear as a blue link which you can just click on. If that doesn’t work, then cut and paste the address into the address line at the top of your web browser window. Cheers from the ‘{$a->sitename}’ administrator, {$a->signoff}

(Thanks to @peterjonker for the suggestion)

Password Reset Email

Component: core

String: emailpasswordconfirmation

Standard Text:
Hi {$a->firstname}, Someone (probably you) has requested a new password for your account on ‘{$a->sitename}’. To confirm this and have a new password sent to you via email, go to the following web address: {$a->link} In most mail programs, this should appear as a blue link which you can just click on. If that doesn’t work, then cut and paste the address into the address line at the top of your web browser window. If you need help, please contact the site administrator, {$a->admin}

Password Confirmation Email

Component: core

String: emailpasswordsent

Standard Text:
Thank you for confirming the change of password. An email containing your new password has been sent to your address at
{$a->email}.
The new password was automatically generated – you might like to change your password to something easier to remember.

Bounce Back Email

Component: core

String: noreplybouncemessage

Standard Text:
You have replied to a no-reply email address. If you were attempting to reply to a forum post, please instead reply using the {$a} forums. Following is the content of your email:

Change of email message

Component: core

String: emailupdatemessage

Standard Text:
 Dear {$a->fullname}, You have requested a change of your email address for your user account at {$a->site}. Please open the following URL in your browser in order to confirm this change. {$a->url}

Earning a badge Email Subject

Component: core_badges

String: messagesubject

Standard Text:
Congratulations! You just earned a badge!

Earning a badge Email Body

Component: core_badges

String: messagebody

Standard Text:

You have been awarded the badge “%badgename%”! More information about this badge can be found on the %badgelink% badge information page. You can manage and download the badge from your {$a} page.

Why I joined the Moodle Association

Moodle Association

There are many reasons why it’s a good thing to join the Moodle Users Association, MoodleNews posted a pretty good roundup here.  Everyone will have their own reasons for doing so. Some people want to give something back to Moodle, some want to vote on features and impact the development of Moodle.  Now it’s no secret, I make my living using Open Source tools, predominantly around Moodle.  So I’d be crazy not to give something back.

I am not a Moodle Partner (maybe one day), and I realise that my individual contribution of 100 Australian dollars is just a drop in the ocean, but collectively, every contribution adds up.  I contributed not for votes, I joined the Moodle Association because I want to help prove this HQ-backed “crowdsourcing” concept works. Regardless of how much revenue it generates, it will generate ideas and spur innovation. And that has got to be worth every penny.

Upgrading Moodle from 2.1 to 2.5 using command line and automated batch files

This summer I am undertaking a huge Moodle upgrade.  We are actually moving up 4 versions in one go.  But as you are already aware, you can’t simply upgrade from 2.1 to 2.5 in one step.  And the processes involved to get that far are tedious and time consuming.  So I have a solution to make the upgrade as simple and as seamless as possible, and that’s to use command line and a clever batch file.

Batch Files Moodle

Batch files- it takes you back to the 90s, in a good way!

So let’s take a look at what’s involved without using command line upgrades and batch files.
To upgrade Moodle from 2.1 we would have to do the following:

  1. Backup the DB
  2. Delete the contents of the webfolder leaving the config.php
  3. Copy the 2.2 files across
  4. Login to the site and run the upgrade page and sit through the upgrade process
  5. Whilst crossing your fingers and praying the server doesn’t time out.

And then once this is done, you repeat the process for 2.3, then for 2.4, and then for 2.5.  This would take huge amounts of time, and most likely time out and requires you to be sat there watching..waiting..stressing!

Command Line
Upgrading Moodle from the command line is always recommended, it won’t time out and is much safer and faster.  But we’d still need to delete files, copy files and keep track of everything.  The solution to this is to create a batch file that triggers all the commands sequentially and completes the steps for us.

The Solution

Windows batch files are so easy to create using a text editor like notepad.  Each command is on its own line and the whole thing is relatively painless.  We begin by dumping the current database to an SQL backup file in case we break things.

We need to create a folder on our server with all the various Moodle versions in separate folders, along with our custom stuff.  So it looks something like this:

Windows Explorer showing custom files

Windows Explorer showing custom files

In this folder (called upgrade) I have the Moodle 2.2 files, the 2.3 files, 2.4 and 2.5 respectively.  I also have a copy of my Moodle config.php file in a folder called config (I’ll need to keep copying this across before each upgrade when I wipe the folder contents).  All my custom code and third party blocks and modules are in the custom folder and follow the same file structure as Moodle.

So we create a file called “moodleupgrade.bat” and with a text editor begin to write DOS commands. The first command is the most important – BACK IT UP!

ECHO Moodle Upgrade Batch script thingymysql --user=root --password=******* > moodle.sql

Now we need to clear the contents of the webroot and copy the Moodle 2.2 files across.
We use Robocopy for this because RoboCopy is awesome , it’s fast, it’s built into Windows and it can mirror folders and directories (thus wiping them).

robocopy c:\upgrade\moodle22 c:\sites\lcmvletest\public_html /MIR
robocopy c:\upgrade\moodle22 c:\sites\lcmvletest\public_html config.php

We have now copied all the files ready to upgrade, we now need to run the Moodle upgrade script from command line.  And because we don’t want to have to enter Yes when asked, we want it to be automatic we prefix the command with that key stroke

cd PHP
ECHO y|php.exe c:\sites\lcmvletest\public_html\admin\cli\upgrade.php
Moodle Batch file upgrade

Command line, your old new best friend

We then repeat the process for all the other versions.  Lastly we add our custom blocks and third party blocks by using Robocopy and the upgrade script from DOS.
And it’s as easy as that.  The hardest part is remebering where all your files are making sure you have all the files required for the upgrade.

The full script I use is found below.  It currently takes 45 minutes to run through and upgrade Moodle from 2.1 to 2.5 with all the modules and blocks in place.

And the best thing is, it is purely automated, no user input required and it can be set as a scheduled Windows tasks so you could tell it to trigger in the early hours of the morning for you to wake up to.  But I’m not that brave, I would prefer to watch it on screen as it happens.

I hope you find this useful.

ECHO Moodle Upgrade Automation
mysql --user=root --password=******** moodle > moodle.sql

robocopy c:\upgrade\moodle22 c:\sites\lcmvletest\public_html /MIR

ECHO Now putting config.php back in
robocopy c:\upgrade\config c:\sites\lcmvletest\public_html config.php
ECHO Files copied, now running upgrade script
cd PHP

ECHO y|php.exe c:\sites\lcmvletest\public_html\admin\cli\upgrade.php 
ECHO Upgrade to 2.2 complete, now copying files for 2.3

ECHO Copying 2.3 files...
robocopy c:\upgrade\moodle23 c:\sites\lcmvletest\public_html /MIR
ECHO Now putting config.php back in
robocopy c:\upgrade\config c:\sites\lcmvletest\public_html config.php

ECHO Now let's upgrade to 2.3...
ECHO y|php.exe c:\sites\lcmvletest\public_html\admin\cli\upgrade.php 
ECHO Upgrade to 2.3 complete, now copying files for 2.4

ECHO Copying 2.4 files...
robocopy c:\upgrade\moodle24 c:\sites\lcmvletest\public_html /MIR
ECHO Now putting config.php back in
robocopy c:\upgrade\config c:\sites\lcmvletest\public_html config.php

ECHO Now let's upgrade to 2.4...
ECHO y|php.exe c:\sites\lcmvletest\public_html\admin\cli\upgrade.php 
ECHO Upgrade to 2.4 complete, now copying files for 2.5

ECHO Copying 2.5 files...
robocopy c:\upgrade\moodle25 c:\sites\lcmvletest\public_html /MIR
ECHO Now putting config.php back in
robocopy c:\upgrade\config c:\sites\lcmvletest\public_html config.php

ECHO Now let's upgrade to 2.5...
ECHO y|php.exe c:\sites\lcmvletest\public_html\admin\cli\upgrade.php 

ECHO now copying database enrol tweaks
robocopy c:\upgrade\custom\database c:\sites\lcmvletest\public_html\enrol\database /MIR

ECHO now copying custom blocks
robocopy c:\upgrade\custom\blocks c:\sites\lcmvletest\public_html\blocks /s
ECHO Now run upgrade script to install blocks
ECHO y|php.exe c:\sites\lcmvletest\public_html\admin\cli\upgrade.php 

ECHO Blocks done, now copying custom mods
robocopy c:\upgrade\custom\mod c:\sites\lcmvletest\public_html\mod /s
ECHO Now run upgrade script to install mods...
ECHO y|php.exe c:\sites\lcmvletest\public_html\admin\cli\upgrade.php 

ECHO mods complete, now copying custom local plugins
robocopy c:\upgrade\custom\local c:\sites\lcmvletest\public_html\local /s
ECHO Now run upgrade script to install custom local plugins
ECHO y|php.exe c:\sites\lcmvletest\public_html\admin\cli\upgrade.php 

ECHO ALL done!!!UPGRADE COMPLETE
PAUSE