• Home
    • Home
    • Wouf's Blog
    • Bibliowouf
    • Boutique TShirt
    • Sponsoring
    • Politique de confidentialié
  • Math
    • Math au collège
    • Applis et boutiques
    • Cours particuliers
  • Jeux
    • Echecs
    • Poker
    • Des chiffres et des lettres
    • Dogs and cats (mastermind)
    • boggle - version Anglaise
    • boggle - version Française
  • Info
    • Console Python
    • SVG EDIT
    • fond d'écran
    • Prénom en chinois
    • Boite à outils
    • Mes Logiciels
    • DIVERS
    • Webmaster?
    • Liens

Laurent Petitprez

Tweet

Les conseils de Wouf

Beaucoup d’élèves entrant au lycée ont en effet des difficultés à manipuler les fractions, les racines carrées, les puissances, à factoriser des expressions… Ces notions, apprises au collège, sont mal assimilées, et le programme des classes de lycée ne prévoit pas de les retravailler en profondeur.

Cet ouvrage propose une remédiation pas à pas. Un code simple et mnémotechnique est associé à chacune des règles et rappelé dans toutes les corrections d’exercices. Il permet de se repérer et de comprendre ses erreurs.


Magic 500

Magic 500 n'est que le jeu où l'on devine un nombre, après essais successifs (trop grand, trop petit...)

Développé par les membres de Microloges, le club d'informatique de Beaumetz les loges, Magic 500 présente l'interêt d'offrir des sources quickbasic qui peuvent servir d'exemples aux débutants...

source: magic.bas

Le fichier principal:

DECLARE SUB jeu (moinsbon!)
DECLARE SUB regle ()
DECLARE SUB beethov ()
DECLARE SUB init (e$)
DECLARE SUB texte (a$, li!, co!, couleur!, t$)
DECLARE SUB espace (w!)
DECLARE SUB elise ()
CONST nbnb = 5         'nb de nb à trouver
CONST nbch = 3          'nb de chiffre à trouver
CONST nbenr = 30
TYPE sov
      chnom AS STRING * 20
      chnbes AS INTEGER
     END TYPE

DIM joueur AS sov
joueur.chnom = "Adam"


'                              Page de garde...
'__________________________________________________

DO


WIDTH 40, 25
CLS

texte "MICRoLoGES", 12, 5, 3, "non"

elise

texte "PRESENTE:", 14, 10, 4, "oui"

CLS

texte " M A G I C  5 0 0", 12, 1, 5, "non"

SLEEP 2
'_______________________________________________
'page 2

WIDTH 80, 50
CLS
OPEN "score.wou" FOR RANDOM AS #1 LEN = LEN(joueur)
i = 1

texte "MEILLEURS SCORES", 1, 25, 2, "non"
texte "NOM", 5, 15, 3, "non"
texte "ESSAIS", 5, 50, 3, "non"

max = LOF(1) / LEN(joueur)

IF max > nbenr THEN max = nbenr

FOR i = 1 TO max
  GET #1, i, joueur




  LOCATE 7 + i, 2
  COLOR 1
  PRINT i
  LOCATE 7 + i, 15
  PRINT joueur.chnom
  LOCATE 7 + i, 50
  COLOR 5
  PRINT joueur.chnbes


 NEXT



CLOSE #1
moinsbon = joueur.chnbes
IF moinsbon = 0 OR max < nbenr THEN moinsbon = 9999


LOCATE 50, 35
COLOR 2
PRINT "J";
COLOR 1
PRINT "ouer/";
COLOR 2
PRINT "R";
COLOR 1
PRINT "ègles/";
COLOR 2
PRINT "Q";
COLOR 1
PRINT "uitter";





DO
init e$  'on initialise la liste de nb aleatoires
LOOP UNTIL INSTR("jJrRqQ", e$) > 0 AND e$ <> ""



 


 SELECT CASE UCASE$(e$)


 CASE "J"
	jeu moinsbon

 CASE "Q"
 fin$ = "oui"

 CASE "R"
       regle

 END SELECT

 LOOP UNTIL fin$ = "oui"

SUB jeu (moinsbon)
DIM joueur AS sov
    DIM j AS sov
CLS
WIDTH 80, 50
BEEP

FOR no = 1 TO nbnb

 nbcach = INT(RND * 9 * 10 ^ (nbch - 1)) + 10 ^ (nbch - 1)
 DO
   essai = essai + 1
   PRINT
   COLOR 3
   PRINT "Encore "; nbnb - no + 1; "nombre";
   IF nbnb - no + 1 > 1 THEN PRINT ("s");
   PRINT " ...trouver. ";

  
   COLOR 3
   PRINT " Essai nø ";
   COLOR 4
   PRINT essai;
   COLOR 3
   PRINT " >  ";
   t = 0


   FOR y = 1 TO nbch

   t$ = ""
     DO
      t$ = INKEY$
     LOOP UNTIL INSTR("0123456789q", t$) > 0 AND t$ <> ""
     IF t$ = "q" THEN STOP
   PRINT t$;
   t = t * 10 + VAL(t$)

   t$ = ""
   
   
   NEXT y
  
   IF t > nbcach THEN PRINT "   trop grand "
   IF t < nbcach THEN PRINT "   trop petit "


 LOOP UNTIL t = nbcach
   COLOR 4
   PRINT " BRAVO !"
   IF no <nbnb THEN elise ELSE beethov
   espace (5)


NEXT no


PRINT "                           Mission accomplie !"
SLEEP 3

' ici on regarde le score et on le sauve si il est bon

IF essai < moinsbon THEN
PRINT " Bravo ! Vous entrez dans le top "; nbenr
PRINT
BEEP

INPUT "Entrez votre nom : "; nom$
OPEN "score.new" FOR RANDOM AS #2 LEN = LEN(joueur)

OPEN "score.wouf" FOR RANDOM AS #1 LEN = LEN(joueur)

 ok$ = "non"
 
 i2 = 0
 
 
max = LOF(1) / LEN(joueur)
 IF max = 0 THEN
       ok$ = "oui"
       j.chnom = nom$
       j.chnbes = essai
       i2 = i2 + 1
       PUT #2, i2, j
     END IF


 FOR i = 1 TO max

 GET #1, i, joueur

  IF (essai < joueur.chnbes OR joueur.chnbes = 0) AND ok$ = "non" THEN
       ok$ = "oui"
      
       j.chnom = nom$
       j.chnbes = essai
       i2 = i2 + 1
       PUT #2, i2, j
      
      
       END IF

       i2 = i2 + 1
       PUT #2, i2, joueur
      

 NEXT

 IF ok$ = "non" THEN

       ok$ = "oui"
     
       j.chnom = nom$
       j.chnbes = essai
       i2 = i2 + 1
       PUT #2, i2, j
      END IF


CLOSE #2
CLOSE #1

KILL "score.wou"
NAME "score.new" AS "score.wou"


END IF


END SUB

SUB regle
WIDTH 40, 25

CLS
texte "Règles", 5, 10, 5, "non"
texte "du jeu", 5, 23, 5, "oui"
espace (5)
COLOR 4
PRINT "Il s'agit de découvrir ";
PRINT nbnb;
PRINT " nombres cachés en dépensant"
PRINT "le moins d'essais possibles."
PRINT
PRINT " Les nombres sont des entiers de "; nbch; " chiffres"
PRINT
PRINT " plus petit, ou plus grand"
PRINT "seront mes seules indications"
PRINT
texte "BONNE CHANCE", 23, 12, 3, "oui"

LOCATE 25, 10
COLOR 4
PRINT " presser une touche";
SLEEP

END SUB
source: divers.bas

Et ce fichier externe, comme un "include"...

SUB beethov
ECOUTE$ = "T180 o2 P2 P8 L8 GGG L2 E-"
SUITE$ = "P24 P8 L8 FFF L2 D"
PLAY ECOUTE$ + SUITE$

END SUB

SUB elise
   PLAY ON
   lise$ = "o3 L8 E D+ E D+ E o2 B o3 D C L2 o2 A"
   PLAY "MB X" + VARPTR$(lise$)

END SUB

SUB espace (w)
FOR i = 1 TO w
 PRINT
 NEXT

END SUB

SUB init (e$)
DO
e$ = INKEY$
z = z + 1
LOOP UNTIL e$ <> ""
RANDOMIZE (z)

END SUB

SUB texte (a$, li, co, couleur, t$)
      
      LOCATE li, co
      COLOR couleur
      FOR i = 1 TO LEN(a$)
       PRINT (MID$(a$, i, 1)); " ";
       IF t$ = "oui" THEN SLEEP 1
       NEXT



END SUB
Téléchargements:

Télécharger le zip (EXE + sources)

Liens divers:

Quick Basic

Quick Basic est téléchargeable: qb45fr.zip

Un autre exemple sur Wikipedia: Exemple de programme sous Qbasic


 


Tweets by wouf

Comment ???

NEWS

  • Page : https://site2wouf.fr/magic500.php
  • Catégorie : Informatique

Sozi + TBI : un script bash pour créer vos visuels SVG en un clin d'œil

Sozi + TBI : un script bash pour créer vos visuels SVG en un clin d'œil

Si vous enseignez avec un tableau blanc interactif (TBI), vous connaissez le dilemme : les logiciels fournis avec le tableau sont souvent propriétaires, lourds, et vos documents ne sont pas réutilisables ailleurs. Depuis plusieurs années, j'ai adopté une autre approche, entièrement libre — j'expliquais déjà en 2018 pourquoi le format vectoriel est le mieux adapté à un TBI — avec Sozi, un outil de présentation qui transforme un simple fichier SVG en présentation animée, lisible dans n'importe quel navigateur, sans installation côté classe.

Le seul point de friction, c'était la préparation du fichier SVG de départ : rassembler mes captures, mes schémas et mes décorations dans un seul document Inkscape, calque par calque, à la main. J'ai fini par écrire un petit script bash qui fait tout ça en une commande. Il est gratuit, open source, et je vous le partage dans cet article.

Sozi + TBI : pourquoi ce duo fonctionne si bien en classe

Sozi n'est pas un logiciel de diaporama classique. Au lieu d'enchaîner des diapositives, il définit des vues (zooms, rotations, translations) à l'intérieur d'un unique document SVG. Le résultat est un fichier HTML autonome qui s'ouvre dans Firefox ou Chrome, y compris sur le poste du TBI, sans dépendre du logiciel du fabricant.

Pour un usage TBI, c'est idéal : on prépare un grand « poster » vectoriel contenant tous les supports de la séance, puis on navigue de zone en zone au fil du cours. On peut zoomer sur un exercice, revenir à la consigne, afficher une correction… Le tout reste net à n'importe quel niveau de zoom, puisque c'est du vectoriel (et les images intégrées restent à leur résolution d'origine).

L'idée : empiler ses images en calques Inkscape, automatiquement

Mon flux de travail est simple. Je place dans un dossier toutes les ressources de ma séance : captures d'écran d'exercices (PNG, JPG), schémas ou figures déjà en SVG. J'ajoute éventuellement un sous-dossier deco/ contenant mes décorations récurrentes (cadres, flèches, mascotte, bandeau de titre…).

Le script parcourt ce dossier et génère un fichier SVG unique, conforme à Inkscape et à Sozi, dans lequel :

chaque image et chaque SVG devient un calque Inkscape nommé (d'après le nom du fichier), les fichiers de la racine forment les calques du bas, et le contenu de deco/ vient se superposer au-dessus. Il suffit ensuite d'ouvrir le résultat dans Inkscape, de déplacer et redimensionner chaque calque, puis de définir ses vues dans Sozi. La corvée de copier-coller a disparu.

Ce que le script fait pour vous (et bien)

Une première version naïve aurait pu se contenter de concaténer des balises <image>. Celle-ci va plus loin, avec quelques choix techniques qui font la différence au quotidien :

Des SVG imbriqués plutôt qu'un sed fragile

Intégrer un SVG dans un autre est plus délicat qu'il n'y paraît. Le script s'appuie sur un extracteur Python qui retire l'en-tête XML et le DOCTYPE, conserve la viewBox d'origine et ré-emballe le contenu dans une balise <svg> imbriquée avec preserveAspectRatio="xMidYMid meet". Vos figures gardent donc leurs proportions, même si elles ne sont pas au format 16/9.

Pas de collisions d'identifiants

Deux SVG exportés du même logiciel contiennent souvent les mêmes id (dégradés, filtres, marqueurs de flèches…). Quand on les fusionne, les références se mélangent et les rendus deviennent imprévisibles. Le script préfixe automatiquement les identifiants de chaque calque (calque1_, calque2_…) et réécrit les références internes (href, url(#…)) uniquement lorsqu'elles pointent vers un identifiant réellement défini dans le fichier. Les dégradés du calque 3 ne viendront jamais polluer le calque 7.

Images encodées en base64

Les PNG et JPG sont intégrés directement dans le SVG en data URI. Le fichier produit est donc autonome : un seul fichier à copier sur la clé USB ou sur le réseau de l'établissement, aucune image cassée parce qu'un dossier a été déplacé.

Robustesse et petits soins

Le script utilise set -euo pipefail, vérifie la présence des outils requis (base64, python3, find, sort), gère les dossiers vides, échappe les caractères XML dans les noms de calques, et trie les fichiers en ordre naturel : image2 passe bien avant image10. Un détail ? Pas quand on numérote ses captures d'exercices.

Installation et utilisation

Aucune installation à proprement parler : c'est un script bash qui fonctionne sur toute distribution Linux disposant de python3 (et sous Windows via WSL). Récupérez-le depuis GitHub, rendez-le exécutable, et lancez-le depuis le dossier contenant vos images :

wget https://raw.githubusercontent.com/w0uf/sozi_conform.sh/main/sozi_conforme.sh
chmod +x sozi_conforme.sh
cd mon_dossier_de_seance
/chemin/vers/sozi_conforme.sh

Le script produit un fichier resultats.svg prêt à ouvrir dans Inkscape. Tout est personnalisable par variables d'environnement, sans toucher au code :

WIDTH=1920 HEIGHT=1080 OUTPUT=seance-thales.svg TITLE="Théorème de Thalès" ./sozi_conforme.sh

WIDTH et HEIGHT définissent le canevas (1920 × 1080 par défaut, adapté aux TBI récents), OUTPUT le nom du fichier généré, et TITLE le titre du document — celui qui apparaîtra dans l'onglet du navigateur une fois la présentation exportée par Sozi.

Le flux de travail complet, de la capture au TBI

Concrètement, préparer une séance ressemble à ceci : je rassemble mes captures et figures dans un dossier, je dépose mes décorations dans deco/, je lance le script, j'ouvre le SVG dans Inkscape pour arranger la mise en page (chaque élément étant sur son propre calque, c'est très confortable), puis j'ouvre l'éditeur Sozi pour définir l'enchaînement des vues. Le fichier HTML exporté par Sozi se lance ensuite sur n'importe quel poste équipé d'un navigateur. Ni le TBI ni les élèves n'ont besoin du moindre logiciel spécifique.

Télécharger le script (libre et gratuit)

Le script sozi_conforme.sh est disponible gratuitement sur GitHub : github.com/w0uf/sozi_conform.sh. Il est publié sous licence libre : vous pouvez l'utiliser, le modifier et le redistribuer, en classe comme ailleurs. Si vous l'améliorez — prise en charge d'autres formats, options supplémentaires — les issues et pull requests sont les bienvenues, et les commentaires ci-dessous aussi.

Et si vous découvrez Sozi à cette occasion, foncez : c'est l'un de ces outils libres discrets qui changent réellement le quotidien d'un enseignant équipé d'un TBI.

lien vers l'article sur wouf blog
 

TIPS

Allhtml est plus qu'un site, c'est une communauté de passionnés en développement web.

Sur le site de Wouf, AllHtml est accéssible en cliquant sur liens puis "plus"

Voir tous les conseils.

Dernière mise à jour:

Juillet-aôut 2023

Nouvelle Page !

  • Exercices du jour : Les 16 immeubles !

Pages modifiées (ou corrigées) !

  • Exercices du jour : L'enclos
  • Exercices du jour : Les carrelages de couleur /a>

Voir toutes les mises à jour.

 

Trois liens disponibles !

Votre propre message ici, c'est possible! Plus d'informations



Sauf mention contraire, le site est placé sous double licence Creative Commons et GNU Free Documentation License, par contre les grandes images décoratives appartiennent à Corbis et sont licenciées par microsoft

Contact: w0uf@free.fr (avec un zéro à la place du O)