Envoie de sujets par mail avec AMC ?

A cause des réformes des retraites et des grèves qui ont suivi les examens sur table ont été annulés et ont été reprogrammé sous la forme d’un devoir à la maison.
Je devais donc envoyer mon QCM, élaboré avec auto-multiple-choice,  à un grand nombre de candidats. Je ne rentrerai pas ici dans l’intérêt de faire un examen QCM à domicile …

Avant de commencer noter que je suis sous Mac Os X Catalina.

Je fournis ici les scripts Python nécessaires pour :

  • Séparer le fichier PDF avec tous les sujets en autant de sujets qu’il y a de candidats
  • Envoyer les mails avec mutt (installer avec brew) à tous les candidats avec leurs fichiers en attachés

Mon sujet comporte 4 pages. Les N pdf individuels produits sont redirigés vers un dossier PDFSplitted. Je me suis basé sur cette page pour mon script.
Les noms de mes fichier se nomment : DOC-sujet1.pdf et DOC-sujet2.pdf.
Changer la variable « DOC-« +sujet+ ».pdf » en fonction du nom de votre sujet.

#!/usr/bin/env python
 
from PyPDF2 import PdfFileWriter, PdfFileReader
from multiprocessing import Pool
import glob, sys
 
sujet="sujet2"
pdfs = glob.glob("DOC-"+sujet+".pdf")
 
def process_pdfs(pdf):
    inputFile = PdfFileReader(open(pdf, "rb"))
    print("Processing %s"% pdf)
    for i in range(inputFile.numPages // 4):
        output = PdfFileWriter()
        output.addPage(inputFile.getPage(i * 4))
        output.addPage(inputFile.getPage(i * 4 + 1))
        output.addPage(inputFile.getPage(i * 4 + 2))
        output.addPage(inputFile.getPage(i * 4 + 3))
 
        newname = sujet + "-" + str(i+1) + ".pdf"
 
        outputStream = open("PDFSplitted/"+newname, "wb")
        output.write(outputStream)
        outputStream.close()
 
p = Pool(processes=4)
p.map(process_pdfs, pdfs)

Une fois les sujets produits je vais boucler sur l’ensemble des étudiants pour leur envoyer un mail (avec mutt) avec leur sujets individuels en attaché (il y a 2 sujets au choix).
La liste des étudiants avec leurs mails se trouve dans le fichier Emails-L2-1920.xlsx.
Je parse celui-ci avec xlrd.

import xlrd
import subprocess
import os
 
def body(*arg):
    mail_named="BodyMailStudents/"+str(arg[0]).replace(" ","-")+"-"+str(arg[1]).replace(" ","-")+"-N-"+str(arg[2])+".txt"
    fichier = open(mail_named, "w")
    temp=("Bonjour "+ str(arg[0])+ " " +str(arg[1]) + ",\n\n"\
            +"\t veuillez trouver en attaché de ce mail le sujet d'examen: MÉTHODES STATISTIQUES - PY03E300.\n"+\
            "Votre sujet n° " + str(arg[2]) +" est associé à votre numéro d'étudiant " + str(int(arg[3])) +".\n"\
            "Imprimez dans la mesure du possible votre copie en recto verso. Ne remplissez QUE L'UN DE CES DEUX SUJETS ET PAS UN AUTRE.\n"
            "Les copies doivent être rendues en mains propres à la scolarité entre le lundi 27 janvier\n"+\
            "et le jeudi 30 janvier en vous munissant de votre carte d’étudiant pour signer la feuille d’émargement.\n"\
            "Bon courage.\n\n"\
            "\n\t\t\t\t Cordialement,\n"\
            "\t\t\t\t\t Olivier Dadoun\n\n  ")         
    fichier.write(temp)
    fichier.close()
    print(temp)
    return mail_named
 
 
if __name__ == '__main__':           
    list_students="Emails-L2-1920.xlsx"
    wb = xlrd.open_workbook(list_students,encoding_override="utf_16_le")
    print(wb.sheet_names())
    sh = wb.sheet_by_name('Feuil3')
    num_etu          = sh.col_values(0)
    nom_pat_etu      = sh.col_values(1)
    prenom_etu       = sh.col_values(2)
    mail_etu         = sh.col_values(3)
    #list_pas_envoye=[18,30,40,41,44,45,51,56,57,100,101,102,103,109,115,119,128,158] 
    for i in range(1,len(num_etu)):
    #for i in list_pas_envoye:
        file_body=body(nom_pat_etu[i],prenom_etu[i],i,num_etu[i]) 
        files_attached1="\"PDFSplitted/sujet1-"+str(i)+".pdf\""
        files_attached2=files_attached1+" \"PDFSplitted/sujet2-"+str(i)+".pdf\""
        #mail="vous-aurez-pas-mon-mail@gmail.com"
        mail=mail_etu[i]
        mailcc="ni-celui-ci@gmail.com"
        bash_command="mutt -s \"Sujets d'examen MÉTHODES STATISTIQUES - PY03E300 \" " +  mail + " -c " + mailcc + " -a " + str(files_attached2)  + " -- < " + str(file_body)
        os.system(bash_command)
        print(bash_command)
        os.system("sleep 2")
    wb.release_resources()

Si pour une raison inconnue l’étudiant n’a pas reçu son sujet on peut lui renvoyer car le corps du mail a été sauvé dans un fichier qui se trouve dans le dossier BodyMailStudents/.

Publié dans Python | 3 commentaires

CM Statistiques L2 2019/2020

  • Voici le sujet donnée en Décembre 2018 et son corrigé
  • Attention le programme n’était pas tout à fait le même (donc il y a des questions pour lesquelles vous allez avoir du mal à répondre).

  • Un lien concernant les cours de Stanislas Dehaene au Collège de France.
    Le bébé statisticien : les théories bayésiennes de l’apprentissage
  • Publié dans Cours | 2 commentaires

    OBS probleme avec @rpath

    J’ai recompilé OBS Studio sur mon Mac sans gros soucis.
    Par contre lors de son execution j’obtenais:

    dadounair:bin dadoun$ ./obs
    dyld: Library not loaded: @rpath/QtWidgets.framework/Versions/5/QtWidgets
    Referenced from: /Users/dadoun/SoftsDivers/obs-studio/build/rundir/RelWithDebInfo/bin/./obs
    Reason: image not found
    Trace/BPT trap: 5

    Problème que j’ai rencontré de nombreuse fois et que j’avais réussi à chaque fois esquiver (sans trop savoir comment).
    Après avoir passé pas mal temps de temps j’ai trouvé cette solution simple et efficace: exporter la variable DYLD_FRAMEWORK_PATHdont je ne connaissais pas l’existence.
    Donc un

    export DYLD_FRAMEWORK_PATH=/usr/local/Qt/5.5/clang_64/lib

    a résolu mon problème.

    Publié dans Informatique, Non classé, Shell | Laisser un commentaire

    CM Statistiques L2 2018/2019

    Updated: 16 décembre 2018

    Bonjour,

    Attention: cours n°6 page 157 la formule que j’ai utilisée est fausse
    (ca change pas le résultat). Voici la bonne formule:

        \[    \boxed{s^2=\frac{1}{7}\times(\sum^{i=8}_{i=1}x_i^2-8\times(\frac{1}{8}\sum^{i=8}_{i=1}x_i)^2)} \]

    De plus, veuillez noter aussi un problème de précision qui se ballade dans cet exemple:
    pour calculer l’écart-type mieux vaut utiliser cette moyenne là (1623/8) plutôt que sa valeur approchée 202,90 ms (merci à Jennifer).

    – Nouvelles mise à jour du cours 6
    – J’ai rajouté une transparent p146 cours 6 qui vous donne la formule de la covariance dans le cas d’un échantillon. Vous connaissez la variance dans le cas d’un échantillon ça devrait pas poser trop de problèmes (et oui il faut connaître les formules).

    voici les cours de L2 CM Méthodes Statistiques 2018:

    Bonne lecture …

    PS: Comme d’hab. n’hésitez pas à donner commentaires, remarques et/ou réflexions diverses et variées …

    Annexes

    Table bilatérale
    Table unilatérale

    Pièce jointe

    Publié dans Cours | Marqué avec | 4 commentaires

    TD Méthodes statistiques L1 (2015/2016 et 2016/2017)

    Voici les exercices corrigés du TD Méthodes statistiques L1 45AE11AA

    TD1meth.stat.L1
    TD2meth.stat.L1
    TD3meth.stat.L1
    TD7-8meth.stat.L1
    TD9-10-11meth.stat.L1

    Pièce jointe

    Publié dans Non classé | Marqué avec | Laisser un commentaire

    CM Statistiques L2 2017/2018

    Updated: 5 juin 2018

    05/12/17 16/12/2018

    Bonjour,

    voici les CM de L2 Méthodes Statistiques 2017/2018 (45DE10BB):

    Cours1-L2-2017-Dadoun
    Cours2-L2-2017-Dadoun
    Cours3-L2-2017-Dadoun
    Cours4-L2-2017-Dadoun
    Cours5-L2-2017-Dadoun

    Cours6-L2-2017-Dadoun
    Cours7-L2-2017-Dadoun


    Sujet avec micro correction de l’exam n°1 de décembre 2017.

    Bonne lecture.

    Documents:

     

    PS: N’hésitez pas à donner commentaires, remarques et/ou réflexions diverses et variées…

    Pièce jointe

    Enregistrer

    Enregistrer

    Enregistrer

    Publié dans Non classé | Marqué avec , | Un commentaire

    CV

    I. Activité de recherches
    2000 – 2003
    « Mesure des réacteurs nucléaires dans l’expérience Borexino« , thèse de Doctorat.
    2005 – 2007
    Post doctorat dans le groupe « Machine Détecteur Interface » du futur Collisionneur Linéaire International ILC, LAL Orsay.
    2007-2010
    Post doctorat sur l’étude des « Sources de positrons pour les futurs collisionneurs électrons positrons », LAL Orsay.
    Depuis 2010
    Ingénieur de recherche CNRS spécialisé dans la simulation Monte Carlo interactions particule – matière.
    Actuellement au LPNHE.

    Biblio

    Continuer la lecture

    Publié dans Non classé | Laisser un commentaire

    libGL problème depuis un mac sur un serveur Linux

    Updated: 3 janvier 2017

    03/01/17

    Lorsque j’essayais de lancer glxgears sur un serveur linux distant (connecté avec ssh -X -Y ) j’avais cette erreur sur le serveur:

    libGL error: No matching fbConfigs or visuals found
    libGL error: failed to load driver: swrast
    X Error of failed request: BadValue (integer parameter out of range for operation)
    Major opcode of failed request: 149 (GLX)
    Minor opcode of failed request: 3 (X_GLXCreateContext)
    Value in failed request: 0x0
    Serial number of failed request: 26
    Current serial number in output stream: 28

    Malgré les apparences c’est un problème de mon client mac (malgré le fait que glxgears marchait parfaitement en local).
    Après pas mal de temps passé sur le web voici la solution (ici):

    defaults write org.macosforge.xquartz.X11 enable_iglx -bool true

    Il faut relancer Xquartz après.

    Finalement j’ai eu d’autre soucis j’ai donc reinstallé une version de XQartz plus vieille qui ne pose pas du tout ce problème: la 2.7.8 (les versions supérieures ne marchent pas).

    Publié dans CHEP, Mac Os X | Laisser un commentaire

    JE SUIS PARIS

    Updated: 18 novembre 2015

    13/11/2015

    ctuztumw4aaf8646-e7918

    Publié dans Non classé | Un commentaire

    Récupérer tous les mots composés de 11 caractères chiffres ET lettres

    Dans un premier temps on récupère tous les mots qui peuvent être composé soit de chiffres seuls, soit de lettres seules ou les 2 à la fois. Après on utilise 2 grep différents qui nous enlèvent les mots composés de chiffres seuls et de lettres seules.

     cat toto | grep -o '[a-zA-Z0-9][a-zA-Z0-9]\{10,10\}' | grep -v '[a-zA-Z][a-zA-Z]\{10,10\}' | grep -v '[0-9][0-9]\{10,10\}'
    Publié dans Shell | Marqué avec | Un commentaire