Author Archives: Michel Meynard

CodeRunner : 1ère utilisation

Introduction

CodeRunner est un plugin Moodle permettant de fournir des questions dans un Test Moodle qui nécessitent une tâche de programmation de la part de l’étudiant.

  • localisé actuellement sur https://moodle-prep.umontpellier.fr/ , authentification par le couple login/mot de passe habituel, accessible uniquement sur le domaine umontpellier.fr
  • l’auteur devra saisir :
    • le texte de la question
    • le type de question (on peut aller des questions prédéfinies à des questions personnalisées en utilisant un template Twig …
    • les cas de test qui permettront d’évaluer les réponses des étudiants

Une question sur la fonction factorielle

  1. Ouvrir la banque de questions d’un cours;
  2. Créer une catégorie « questions CodeRunner » afin de les distinguer des autres
  3. Créer une nouvelle question de type CodeRunner : s’ouvre alors un formulaire très imposant !
  4. Choisir comme ‘Question Type’, c_function : l’étudiant devra répondre en écrivant le code d’une fonction.
  5. ‘Customization’ : n’hésitez pas à cocher la case ‘Customize’ car cela vous permettra de visualiser (sans le modifier pour l’instant !) le template Twig du programme construit avec un main qui passe en revue les cas de test.
  6. Ne modifier pas les autres champs de cette section Question Type.
  7. Visualisez la section Customization (sans rien modifier)  afin de comprendre que la fonction main() passe en revue tous les cas de tests que vous allez définir par la suite :
  8. {{ STUDENT_ANSWER }}
    
    int main() {
    {% for TEST in TESTCASES %}
       {
        {{ TEST.testcode }};
       }
  9. Passer à la section ‘Généraux’ qui est la plus importante :
  10. Indiquer la catégorie « questions CodeRunner », le nom de la question « C function fact », et le texte de la question : « Ecrire le code de la fonction unsigned int fact(unsigned int n)  qui retourne n!, c’est-à dire n*(n-1)*(n-2)*2*1. Comme  cas particulier, 0!=1. »
  11. Dans la section Answer , saisissez le code la fonction fact, et cochez la case ‘Validate on save’ afin de vérifier lors de l’enregistrement de la question, que votre code est correct
  12.  unsigned int fact(unsigned int n){
        if(n<2)
            return 1;
        else 
            return n*fact(n-1);
    }
  13. Dans la section TestCases, saisissez plusieurs couples suivants (Test case i, expected output)  :
  14. Test Case 1 :  printf("%d",fact(4));
    Expected output :  24
    
  15. Vous pouvez (devez) utiliser un Test Case comme ‘Use as example’ afin qu’il soit montré aux étudiants avant leur premier essai
  16. Enfin, cliquez sur « enregistrer les modifications et continuer », puis cliquez sur « Aperçu » afin de visualiser la question comme un étudiant et de tester avec une version étudiante de la fonction fact
  17. Si l’enregistrement plante, vérifier que votre code dans la section Answer est correct …
  18. Pour aller plus loin :

Exportation

A l’heure actuelle, seule l’exportation au format XML permet de transférer des questions CodeRunner d’un Moodle à l’autre : questionsCodeRunner.xml

Trucs

  • Préférer cloner une question déjà existante, cela permet de ne pas re-saisir les printf dans les cas de test

 

Projet Tableur

Le document projetTableur  décrit un interprète de commandes permettant de manipuler des cellules d’une feuille de calcul. Pour réaliser ce projet,  vous devrez réaliser un fichier bison tableur.y et un fichier flex tableur.l qui utiliseront une bibliothèque C++ libtableur.so  au format ELF 64-bit LSB shared object, x86-64, qui vous sera fournie avec son API décrite en  html. Cette bibliothèque contient l’implémentation d’un modèle (M de MVC) de tableur sans interface. L’interprète en bison contiendra la Vue (textuelle) et le Contrôleur.

Les en-têtes sont également fournis afin de permettre la compilation : entete.

Afin de compiler le projet dans le répertoire contenant en-têtes, librairie libtab.so, tableur.y et tableur.l :

bison -ydtv tableur.y
flex tableur.l
g++ -std=c++11 -fPIC -o tableurlib  y.tab.c lex.yy.c -ltableur -L.
export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH
./tableurlib
$> a1=5
$> a2=7
$> somme(a1:a2;sin(1.57);2)
15.000000
$>

Vous devez avoir une démarche incrémentale en testant d’abord les fonctionnalités les plus simples puis en complexifiant votre démarche.

Doctrine

Installation au SIF

Téléchargement de composer et préparation de l’installation

~/public_html/Archiweb$ mkdir TestDoctrine
~/public_html/Archiweb$ cd TestDoctrine 
~/public_html/Archiweb/TestDoctrine$ curl -sS https://getcomposer.org/installer | php
~/public_html/Archiweb/TestDoctrine$ emacs composer.json
{
    "require": {
        "doctrine/orm": "*"",
        "symfony/yaml": "*"
    }
}

Installation de doctrine

$ php composer.phar install

Utilisation de doctrine au SIF

créer un fichier bootstrap.php

<?php
// bootstrap.php
use Doctrine\ORM\Tools\Setup;
use Doctrine\ORM\EntityManager;

require_once "vendor/autoload.php";

//METADATA YAML
$isDevMode=true;
$config = Setup::createYAMLMetadataConfiguration(array(__DIR__."/config/yaml"), $isDevMode);

// database configuration parameters
$dsn =  array(
    'dbname' => 'mmeynard',
    'user' => 'mmeynard',
    'password' => 'Le votre !',
    'host' => 'venus',    // '127.0.0.1' ne fonctionne pas car serveur MySQL sur venus
    'driver' => 'pdo_mysql',
    'charset' => 'utf8' ,    // sinon les char utf-8 ne passent pas en BD
);
// obtaining the entity manager
$entityManager = EntityManager::create($dsn, $config);

puis créer un fichier cli-config.php pour faire fonctionner la commande doctrine

<?php
// cli-config.php
require_once "bootstrap.php";

return \Doctrine\ORM\Tools\Console\ConsoleRunner::createHelperSet($entityManager);

puis créer en rétro-ingéniérie, les fichiers yaml dans /config/yaml définissant les métadonnées, puis les fichiers php dans le répertoire src définissant les classes d’entités

mkdir config/yaml
php vendor/bin/doctrine orm:convert-mapping --from-database yml config/yaml
mkdir src 
php vendor/bin/doctrine orm:generate-entities src/

On listera le répertoire src qui contient les classes Etudiant, Options,  Stagea : ls src; less Etudiant.php

on peut maintenant écrire un script php listant les étudiants (des stages d’analyse) : listetud.php : OUF !

<?php
include "src/Etudiant.php";
include "src/Options.php";
include "src/Stagea.php";

require_once "bootstrap.php";
$etudRep=$entityManager->getRepository('Etudiant');
$letud=$etudRep->findAll();
foreach($letud as $e){
  print($e->getNom() . " " . $e->getPrenom() . "<br>");
}
?>

Afin de ne pas avoir à inclure chaque classe avant utilisation, on utilisera la fonctionnalité de chargement automatique fournie par doctrine :

use Doctrine\Common\ClassLoader;
require 'vendor/doctrine/common/lib/Doctrine/Common/ClassLoader.php';
$classLoader = new ClassLoader(null, 'src/'); // null : pas d'espace de nom
$classLoader->register();

Attention les instances d’étudiant récupérées font référence à des instances d’Options et de Stagea (qui font eux  même référence à des étudiants grâce aux métadonnées) : ne pas faire de print_r car la récursivité risque d’être infinie !

foreach($letud as $e){
 print($e->getNom() . " " . $e->getPrenom() . " : " . 
 ($e->getOpt()?$e->getOpt()->getNom():"PAS D'OPTION") . "<br>");
}

permettra d’afficher :

GUILLAUME Julien : Langue naturelle
GUITARD Brice : Web et BD
HAET Franck : PAS D'OPTION
HERIZI Abderraouf : Bio-Informatique

Documents et Paramètres d’Architecture et Programmation du Web

Documents du cours


Paramètres 2016-2017

  • répertoire des documents web (html, php, …) : ~/public_html/
  • URL d’accès pour jdupont : http://localhost/~jdupont/mastermind.php
  • compte MySQL :
    1. se connecter sur le site du SIF : https://sif.info-ufr.univ-montp2.fr/
    2. dans le bloc « Mon Espace », cliquer sur « Mon compte » puis sur « Modifier » dans la partie centrale
    3. dans « Bases de données », cliquer sur MySQL puis indiquer oui et votre mot de passe
    4. votre BD MySQL et votre login mysql se nomment comme votre login SIF
    5.  pour tester (h hôte, u user, p password) : mysql -h venus -u jdupont -p
    6. use jdupont; show tables;

 

Contrôle Continu de Systèmes d’exploitation HLIN303

Compresseur/décompresseur de Huffman

Le sujet du contrôle continu : ccHuffman

Le contrôle continu est soumis à la règle du max , il n’est donc pas indispensable mais est fortement recommandé !

Les démos sur machine du projet « Code de Huffman » auront lieu fin décembre. Si vous désirez y participer, le binôme (groupe de deux étudiants) doit :
-  envoyer à Michel Meynard (meynard@lirmm.fr) et Pierre Pompidor (pompidor@lirmm.fr), une archive de vos codes 2 JOURS AVANT LA SOUTENANCE ;
-  en retour, nous vous enverrons un créneau plus précis de votre passage.

Veuillez dans votre archive (nommée par les noms des participants au projet), créer un petit fichier README qui indiquera l’état d’avancement de votre projet (et par exemple les bogues résiduels). Par ailleurs, TOUS les participants au projet devront être présents (les absents ne seront sinon pas notés).

Le jour de la soutenance, les participants doivent venir avec :
-  un micro rapport papier de 1 à 2 pages décrivant les choix importants effectués ;
-  les listings (fichiers sources) documentés (doxygen) ;
-  des réponses aux questions indiquées dans le CC ;

Chaque soutenance durera 12 à 15 minutes ! C’est extrêmement rapide, aussi soyez certain d’avoir les exécutables prêts à fonctionner sur votre compte Unix ainsi que les fichiers exemples. Une recompilation du projet durant la soutenance n’est pas envisageable !

Aides

Ci-après, des fichiers textes exemples qui devront passer au compresseur : unpeudetout , undechaque , quedes1 .

Vous pouvez également tester les exécutables suivants : huf le compresseur, dehuf le décompresseur. Enfin, un fichier compressé : unpeudetout.txt.huf .

TP Mastermind

Mastermind

Article permettant de voir un vrai makefile sur un projet de jeu mastermind en ligne de commande (mm) et avec interface graphique mmgui ! Après avoir lu et compris l’organisation du projet, il ne vous reste plus qu’à programmer mm.c !

  1. Après avoir téléchargé le fichier mm    (enregistrer le fichier puis l’ouvrir (ne pas l’ouvrir directement avec le gestionnaire d’archives))
  2. Extraire les différents fichiers et observer leur organisation
  3.  tester mm en ligne de commande
  4. tester mmgui &
  5. écrire le source mm.c

Documents du cours de L3 : Concepts et Programmation des Systèmes d’Exploitation

CC=gcc
CFLAGS=-g  -Wall -std=c99 -D_GNU_SOURCE

testMot : testMot.o mot.o
	$(CC) $(CFLAGS) -o $@ $+

.h.c:
	@echo regle de suffixe : .h modifie donne .c modifie
	touch $*.c

.c.o:
	@echo debut compil c sans edition de liens de $<
	$(CC) $(CFLAGS) -c $<
	@echo fin compil de $<

.c:
	@echo debut compil c complete de $<
	$(CC) $(CFLAGS) -o $* $<
	@echo fin compil de $< en $*