France Université Numérique

Life in the Avant-garde

Régis Behmo (@regisb)
Open edX Conference, October 12 2015 | Wellesley, MA

YouTube video

France Université Numérique: Life in the Avant-garde


Integration with Open edX

Dashboards

XBlocks

Issues

France Université Numérique (FUN)

  • 193 courses
  • 61 universities
  • 1M course enrollments
  • 420k users from 213 countries

France Université Numérique (FUN)

France Université Numérique (FUN)

http://hack.openedx.fr/

France Université Numérique (FUN)

https://github.com/openfun/

France Université Numérique (FUN)

https://github.com/openfun/

$ grep openfun edx-platform/AUTHORS 
Régis Behmo <regis.behmo@openfun.fr>      # @regisb
Sylvain Toé <sylvain.toe@openfun.fr>      # @lazybird
Richard Moch <richard.moch@openfun.fr>    # @rmoch 
Julien Paillé <julien.paille@openfun.fr>  # @jpaille

fork?

Permanent fork

FUN edX Open edX contributors
wc -l edx-platform/AUTHORS

developer

non-developer

fork?

Permanent fork

Regularly-updated fork

fork?

Integration with Open edX

Dashboards

XBlocks

Issues

Upstream integration

$ cd edx-platform && git log | grep openfun
    Merge pull request #9590 from openfun/openfun/fix-dropdown-problem-template
    Merge pull request #8725 from openfun/regisb/fix_xblock_class_loading
    Merge pull request #7474 from openfun/rmoch/fix_forum_action_button_issue
    Merge pull request #7997 from openfun/rmoch/i18n_problem_explanation_title
    Merge pull request #7101 from openfun/fun/xblock-authoring-fix-settings-import
    Merge pull request #6560 from openfun/openfun/studio-csrf-error
    Merge pull request #6082 from openfun/edx/translate-enrollment-emails
$ cd edx-ora2 && git log | grep openfun
    Merge pull request #640 from openfun/edx/multiple-fileupload-backends
    Merge pull request #681 from openfun/openfun/fix-vagrantfile

Plugging FUN edx-platform

  1. pip install fun-cmd
  2. fun lms.dev run
    • sys.path.append("/edx/app/edxapp/fun-apps/")
    • /edx/app/edxapp/fun-apps/fun/envs/lms/dev.py

Patching Open edX

Easy Medium Hard
Modify settings Patch code Patch dependency code
  • Patch FUN settings
  • Patch edx-platform
  • Maintain patch
  • Patch dependency
  • Patch edx-platform requirements
  • Maintain 2 patches

The FUN devstack

Integration with Open edX

Dashboards

XBlocks

Issues

Backoffice

Course dashboard

Video upload manager

Kibana dashboard

Integration with Open edX

Dashboards

XBlocks

Issues

Backoffice

Course dashboard

Video upload manager

Kibana dashboard

Integration with Open edX

Dashboards

XBlocks

Issues

Backoffice

Course dashboard

Video upload manager

Kibana dashboard

Integration with Open edX

Dashboards

XBlocks

Issues

Backoffice

Course dashboard

Video upload manager

Kibana dashboard

https://github.com/openfun/fun-logstash

Integration with Open edX

Dashboards

XBlocks

Issues

XBlocks: Graded external assignment

https://github.com/openfun/edx-gea/

XBlocks: Graded external assignment

https://github.com/openfun/edx-gea/

XBlocks: Password-protected, time-limited container

https://github.com/openfun/password-container-xblock/

XBlocks: Password-protected, time-limited container

https://github.com/openfun/password-container-xblock/

XBlocks: Videojs player

Integration with Open edX

Dashboards

XBlocks

Issues

Explicit dependencies on Amazon Web Services (AWS)

def some_view(request):
    url = get_upload_url()
    return render(request, "some_template.html", {"url": url})
Hardcoded
def get_upload_url():
    conn = connect_to_s3()
    return conn.generate_url()
Setting-dependent
def get_upload_url():
    from importlib import import_module
    name = getattr(
        settings, "STORAGE_BACKEND",
        "storage.s3" # default storage
    )
    backend = import_module(name).Backend()
    return backend.generate_url()

Extended course properties

class CourseFields(object):
    advanced_modules = List(...)
    foo = List(...)
    bar = String(...)
    ...    # Course-specific properties
    advanced_properties = Dict(...)
class Course(django.models.Model):
    course_id = django.models.CharField(...)
    custom_property = django.models.CharField(...)
    ...
                    

Microsites

  • No microsite in studio
  • Course creation
  • User subscription

Microsites for white label?

What's next?

Themes, course filtering, course search...

What's next?

Hackathon!

Get in touch

Developer

regis@openfun.fr

Developer

julien@openfun.fr

Product owner

laurent@openfun.fr

Slides available at
https://github.com/regisb/openedx-conference-2015