MoziB2i
In France, we have a diploma named B2i, or Informatics and Internet Diploma. It's a diploma given to students in primary education, in secondary school and in high school, but also for adults. Created by french Ministry of national education, it contains 5 different domains, each containing different goals according to the level:
- Domain 1: taking a computer environment
- Domain 2: adopting a responsible attitude
- Domain 3: creating, producing, treating and exploiting data
- Domain 4: finding information and to making researches
- Domain 5: communicating and exchanging
If the basic idea is very interesting, it is often quite difficult to implement it for teachers. Here, the goal is not to train teachers specialized in B2i skills, it is the professors who make over their students and must ensure that capacity is well validated for each student. So the B2i is more often a cause of problems for teachers than a real enrichment of education instilled to students. Not to mention the reluctance of teachers in from of skills they mastered a little or not at all.
And Mozilla in all this? How could Mozilla support teachers in this task? If one reads the Mozilla Manifesto, you can find some answers:
- The Internet is an integral part of modern life - a key component in education [...]. li>
- The Internet is a global public resource that must remain open and accessible. li>
- The Internet should enrich the lives of of individual human beings. li>
- Individuals must have the ability to shape their own experiences on the Internet. li>
- Transparent community-based processes promote participation, accountability, and trust. li>
Well, okay, Mozilla could (should ?) do something to help teachers, but it's easier saying it than doing it. Where do we start first? Maybe creating a education's community with the aim to support teachers? Maybe making more interventions more frequently in schools? Maybe producing course content to validate the skills B2i?
To begin, this third option may be a solution called "low-hanging fruit". Creating a small group of teachers and volunteers who help Mozilla producing content optimized for technical B2i, but as generic and complete as possible, so that content can be reused anywhere in the world. It is necessary that the content is "hackable": any teacher in France or in the world should be able to modify it according to his need.
The question that remains in my mind is means to use. After some discussions during events or simply by talking around me, I got some contacts in the world of education who are willing to help in this task, but how to present the project to this heterogeneous group ? Which tool can be mastered by every volunteer ? A project Drumbeat ? A forum? A mailing-list?
While waiting to answer this question, I had fun with a tool that has been produced by Kaze, Timesheet. For the demo, post here it goes (but it's in French).
MoziB2i
En France, nous avons un brevet nommé le B2i, Brevet Informatique et Internet. C'est un diplôme délivré aux élèves de primaire, de collège et de lycée mais aussi à des adultes. Créé par le Ministère de l'éducation nationale, il contient 5 domaines différents, contenant chacun des buts différents suivant les niveaux:
- Domaine 1: s'approprier un environnement informatique de travail
- Domaine 2: adopter une attitude responsable
- Domaine 3: créer, produire, traiter, exploiter des données
- Domaine 4: s'informer, se documenter
- Domaine 5: communiquer, échanger
Si l'idée de base est très intéressante, il est souvent assez difficile à mettre en application pour les professeurs. Ici, il n'est pas question de former des professeurs spécialisés en B2i, ce sont les professeurs titulaires qui font les cours aux élèves et doivent vérifier que les capacités sont bien validées pour chaque élève. Si bien que le B2i est plus souvent une source de problèmes pour les professeurs que de véritable enrichissement de l'enseignement inculqué aux élèves. Sans oublier la frilosité des enseignants vis-à-vis de matières qu'ils maîtrisent peu ou pas et le difficulté techniques qui en découlent.
Et Mozilla dans tout cela ? En quoi Mozilla pourrait-il être un soutien aux professeurs dans cette tâche ? Si on relit le Mozilla Manifesto, on peut y trouver quelques éléments de réponse:
- Internet fait partie intégrante de la vie moderne — il s'agit d'un composant clé dans l'éducation [...].
- Internet est une ressource publique mondiale qui doit demeurer ouverte et accessible.
- Internet doit enrichir la vie de tout le monde.
- Chacun doit avoir la possibilité de façonner son utilisation d'Internet.
- Des processus transparents et communautaires favorisent la participation, la responsabilité et la confiance.
Bon, d'accord, Mozilla peut (doit ?) faire quelque chose pour aider les enseignants, mais c'est plus facile à dire qu'à faire. D'abord par quoi commencer ? Faut-il créer une communauté Éducation dont le but serait d'apporter un soutien aux enseignants ? Faut-il faire des interventions plus nombreuses dans les écoles ? Faut-il produire des contenus de cours permettant de valider les compétences B2i ?
Pour commencer, cette troisième option peut être une solution dite "low-hanging fruit" (traduisez par une solution facile et rapide à obtenir). S'entourer d'un petit groupe d'enseignants, qui aiderait les bénévoles Mozilla à produire un contenu technique optimisé pour le B2i mais le plus générique et complet possible, de manière à ce que ce contenu puisse être réutilisé n'importe où dans le monde. Il faut que le contenu soit "bidouillable", c'est-à-dire que n'importe quel professeur en France ou dans le monde doit pouvoir le modifier à sa guise et suivant son besoin.
La question qui reste encore en suspens dans mon esprit, c'est quel moyen utiliser. Après quelques discussions durant des événements libristes ou tout simplement en en parlant autour de moi, j'ai pu réunir quelques contacts dans le monde de l'éducation qui seraient prêts à m'aider dans cette tâche, mais comment présenter le projet de manière à ce qu'un groupe hétérogène de formation et de compétence puisse se créer et commencer à travailler ensemble ? Un projet Drumbeat ? Un forum ? Une mailing-list ?
En attendant de répondre à cette question, je me suis amusée avec un outil que vient de produire Kaze: Timesheet. Pour la démo, c'est par ici que ça se passe.
De l’action efficace…
Une question est ressortie durant une conversation avec un GUL orléanais: faut-il forcément sortir le sensationnel – dans le cas présent, il était question du panda roux taille humaine – pour attirer les gens sur un stand ? Il est vrai que dans le cas d’un stand à propos d’un Groupe d’Utilisateurs de Linux, il est dur de mettre en avant une activité « visible » tel qu’un club de broderies au crochet ou encore un groupe de théâtre. Peut-être, mais peut-être pas !
Présenter un club d’informatique revient au final à présenter ces activités. Si l’on se place dans le contexte du logiciel libre, la logique voudrait que l’on mette en avant les notions de logiciels libres, de standards ouverts, etc. Oui mais… le concept de liberté logicielle, très peu de gens le comprennent et beaucoup n’en ont totalement rien à faire – « Bah, du moment que ça marche, je m’en fous un peu de la licence avec laquelle c’est fait ». La problématique est donc d’amener les gens à réfléchir sur une notion qui ne les intéresse que très peu.
Exemple récent: les Vieilles Charrues en Bretagne. Pour ceux qui ne connaissent pas, les Vieilles Charrues est un grand festival, qui brasse beaucoup de personnes, des jeunes, des vieux, des gens très technophiles et des gens qui le sont moins. Tous sont réunis par la passion de la musique avant tout, donc pas du tout prêts à entendre le laïus d’idéalistes geeks. Durant cet évènement, une association française Ubuntu-Fr a tenu un stand avec des ordinateurs à disposition, une sorte de cyber café, où les gens pouvaient essayer quelques logiciels. À côté, ils tenaient un stand avec des bénévoles pour vendre des goodies qu’ils avaient fait faire et parler avec les gens. Cela permettait aux gens de discuter après ou avant avoir utilisé les machines.
Aussi étonnant que cela puisse paraître, le stand a eu un succès du tonnerre. Beaucoup de gens venaient sur les postes pour aller sur Twitter ou Facebook ou regardaient leurs webmails, le tout avec Firefox. Mais une fois qu’ils avaient un peu regardé le système, certains se dirigeaient vers les stands, intrigués par ces « geeks » en plein milieu du festival.
C’est comme cela que je me suis retrouvée à discuter de standards ouverts avec une femme pas du tout technique, venue me voir après avoir utilisé un des ordinateurs. Sa question première était de savoir ce que c’était que tout ça et comment on arrivait à équiper autant de machines pour un tel évènement. Je lui ai donc expliqué que les machines étaient pour la plupart des machines de bénévoles et que les logiciels tournant sur ces machines étant des logiciels libres, nous n’avions donc pas de soucis de licences ou de coûts excessifs pour l’installation. « Logiciel libre ? Licences ? » S’en est suivi un cours sur les logiciels libres, la différence avec logiciel proprio.
Comme ce concept est souvent assez brumeux pour les gens, j’ai choisi de prendre un exemple plus imagé. L’histoire de la recette de cuisine de RMS est une référence du genre, mais je lui préfère la notion de bidouillage de la voiture: vous avez un voiture libre, dont vous voulez ouvrir le capot et voir ce qu’il y a dedans. Si vous avez des connaissances de mécanique, vous aimeriez bien la bidouiller par vous-même, plutôt que de passer par le garagiste au moindre « pouet » de travers. Imaginez maintenant que l’on soude le capot pour que le moteur devienne inaccessible, sauf pour quelques techniciens qui ont les moyens d’ouvrir le capot. Voici donc la différence entre logiciel libre et logiciel propriétaire: d’un côté, on peut accéder au moteur pour le bidouiller, de l’autre non.
Elle m’a ensuite demandé ce qu’étaient les standards ouverts (le mot était écrit sur un panneau Mozilla derrière moi). Sans que je m’en sois rendue compte, 5 personnes écoutaient en même temps qu’elle et ce n’était pas moi qui avais introduit les notions de logiciel libre ou standard ouvert mais elle. Étrange !
Revenons à notre GUL orléanais: le but du stand n’est donc pas de rentrer bille en tête dans les concepts de base. « Mr et Mme Michu » se sentiront alors perdus dans cette discussion idéalistico-élitiste – « bien une problématique de geeks, moi l’informatique, je m’en sers juste pour mes mails ». Si on veut faire passer le message, ce n’est en effet pas à Mr et Mme Michu de se mettre à notre portée, car de toute manière, ils n’en auront pas envie. C’est à nous, les geeks idéalistes, de nous mettre à leur portée et d’aller vers eux. Facile à dire, mais à faire ? Et bien je dirais qu’il suffit de leur montrer ce qu’ils peuvent faire avec du libre:
- vous allez sur le Net => démonstrations de Firefox (les démos « sexy » ne manquent pas avec firefox 4 bêta en plus)
- vous faites vos papiers administratifs => OpenOffice ou autres éditeurs
- vous regardez des films et de l’audio => VLC + rhytmbox ou amarok
- vous aimez bidouiller vos photos et vidéos de vacances => Gimp + Kino
- etc.
Le but du « jeu » va donc de montrer aux gens ce qu’il est possible de faire avec du libre, que tous sont des logiciels complets et de bonne qualité, avec parfois de réelles entreprises qui sont derrière la conception et que le logiciel libre a une chose que n’a pas le logiciel propriétaire: sa communauté. Entre les GUL, les communautés de traducteurs, les communautés d’utilisateurs, Framasoft, l’April,… il y a toujours quelqu’un pour vous aider si vous avez un problème. Peut-on dire la même chose d’autres logiciels propriétaires ?
Petite anecdote pour finir: durant les Vieilles Charrues, je me souviens avoir vendu 10 CD d’Ubuntu en une après-midi, bizarre pour un logiciel qu’on peut trouver gratuitement et librement sur Internet
Les ongle(t)s du Panda Roux, le retour
L'année dernière, j'avais traduit un hack de l'inégalable Kaze qui permettait d'améliorer l'affichage des onglets sous Firefox pour les eeePC et tout autre ordinateur à petit écran.
Dans Firefox 4 (actuellement disponible en version beta ou nightly pour les plus téméraires), le système d'onglet a toutefois été modifié au profit de l'UserChrome. Heureusement que Bugzilla est là
Pour modifier vos onglets, il n'y a donc plus besoin d'aller modifier dans le about:config de votre Firefox, tout se passe dans le UserChrome.css:
.tabbrowser-tab:not([pinned]) {
max-width: 52px !important;
min-width: 32px !important;
}
.tabbrowser-tab:not([fadein]) {
max-width: 1px !important;
min-width: 1px !important;
max-width: 1px;
min-width: 1px;
}
.tabbrowser-tabs tab .tab-text { display: none; }
.tabbrowser-tabs tab[selected="true"] .tab-text { display: block; }
.tabbrowser-tabs tab[selected="true"] { min-width: 250px; }
Finito ! Plus simple, non ?
NB: hack testé sous Firefox 4b4pre (nightly)
2 formulaires pour 1 page Web
Petit casse tête de la semaine dernière en Django: comment introduire 2 formulaires indépendants l'un de l'autre dans une unique page web. Voici donc la solution, merci encore à Florian de m'avoir "tenu la main"
Première étape: définition des objets dans le models.py
# -*- coding: Utf-8 -*-
from django.db import models
from django.forms import ModelForm
## ----- Définition des objets ----- ----- ----- ----- ----- ----- ##
class Eleve(models.Model):
nom = models.CharField(max_length=150)
prenom = models.CharField(max_length=150)
class Prof(models.Model):
nom = models.CharField(max_length=150)
prenom = models.CharField(max_length=150)
## ----- Définition des formulaires ----- ----- ----- ----- ----- ##
class EleveForm(ModelForm):
class Meta:
model = Eleve
class ProfForm(ModelForm):
class Meta:
model = Prof
Deuxième étape: définition de la classe dans le views.py
# -*- coding: Utf-8 -*-
from django.template import Context, loader, RequestContext
from django.shortcuts import render_to_response
from testform.form.models import *
## ----- Définition de la fonction ----- ----- ----- ----- ----- ##
def fonction(request,page=None):
# Permet de lister les différents objets pour les afficher dans
# le template
eleve_list = Eleve.objects.all()
prof_list = Prof.objects.all()
if request.method == 'GET':
# en cas d'arrivée sur la page en mode GET,
# on crée les formulaires à afficher dans le template
eleveForm = EleveForm()
profForm = ProfForm()
else:
# en cas d'arrivée sur la page en mode POST
# 2 cas de figures:
if page == 'prof':
# l'expression régulière définie dans urls.py renvoie prof
# on récupère seulement le formulaire professeur
# et on le sauvegarde s'il est valide
profForm = ProfForm(request.POST)
eleveForm = EleveForm()
if profForm.is_valid():
profForm.save()
# vide les champs du formulaire
profForm = ProfForm()
elif page == 'eleve':
# l'expression régulière définie dans urls.py renvoie eleve
# on récupère seulement le formulaire eleve
# et on le sauvegarde s'il est valide
profForm = ProfForm()
eleveForm = EleveForm(request.POST)
if eleveForm.is_valid():
eleveForm.save()
# vide les champs du formulaire
eleveForm = EleveForm()
# on renvoie à la page d'index 4 objets: 2 formulaires
# et 2 listes
return render_to_response('index.html',
{'profForm': profForm, 'eleveForm': eleveForm,
'prof_list': prof_list, 'eleve_list': eleve_list},
context_instance = RequestContext(request))
Troisième étape: création du template index.html
<!-- Formulaire d'enregistrement d'un élève --> <form action="/eleve" method="post"> {{ eleveForm }} {% csrf_token %} <input type="submit" value="Enregistrer" /> </form> <!-- Liste des élèves --> {% if eleve_list %} <ul> {% for eleve in eleve_list %} <li>{{ eleve.nom }} {{ eleve.prenom }}</li> {% endfor %} </ul> {% else %} Il n'existe pas d'élèves. {% endif %} <!-- Formulaire d'enregistrement d'un professeur --> <form action="/prof" method="post"> {{ profForm }} {% csrf_token %} <input type="submit" value="Enregistrer" /> </form> <!-- Liste des professeurs --> {% if prof_list %} <ul> {% for prof in prof_list %} <li>{{ prof.nom }} {{ prof.prenom }}</li> {% endfor %} </ul> {% else %} Il n'existe pas de profs. {% endif %}
Dernière étape: on enregistre l'url dans urls.py
urlpatterns = patterns('',
(r'^$', 'testform.form.views.fonction'),
(r'^(?P<page>(prof|eleve))$','testform.form.views.fonction'),
)
Emballez, c'est pesé !
Si vous avez des idées d'optimisation / amélioration, n'hésitez pas à laisser un commentaire, j'ai encore beaucoup à apprendre en Python Django
