---
title: SLM, School Library Manager
subtitle: Gestion de livres à la coopérative scolaire
author: "Georges Khaznadar <georgesk@debian.org>"
institute: "Lycée Jean Bart -- Dunkerque ; organisation Debian"
topic: "LB"
theme: "Frankfurt"
colortheme: "beaver"
fonttheme: "professionalfonts"
fontsize: 9pt
urlcolor: red
linkstyle: bold
aspectratio: 169
date: 21 octobre 20247 avril 2025
lang: fr-FR
section-titles: false
toc: true
---

# La coopérative scolaire du lycée Jean Bart

Le lycée Jean Bart est au centre-ville de Dunkerque, dans le 
département du Nord.

![Le lycée](img/jb1.png){width=100%}

# But de la coopérative

La **Coopérative**, association sans but lucratif,a pour but de gérer 
les manuels scolaires : elle allège le fardeau financier et les aléas
qui touchent les familles.

![Coûts pour les familles](img/ccc2025.png){height=75%}

# Notre logiciel

Depuis 2023, la **Coopérative** utilise le logiciel libre SLM
(School Library Management), développé au 
[lycée Jean Bart de Dunkerque](https://www.lyceejeanbart.fr).

![Le hall du lycée](img/jeanbart-coupe.jpg){width=100%}

La coopérative distribue des livres, tous identifiés par une étiquette
à code-barre. *Avant l'usage de SLM, une application basée sur
Microsoft® Access, nommée GemaSCO, a été utilisée*.

## Le besoin

Il s'agit de gérer les livres scolaires prêtés aux étudiants du
second cycle (environ 20 000 livres en stock, pour 1 500 étudiants).

![Un livre à prêter, et son code-barre](img/bescherelle.jpg){height=50%}

Chaque élève a besoin de quelques dix livres, et la location des livres
est gérée au début du mois de septembre. Durant cette période, on doit
pouvoir servir une trentaine d'élèves par heure.

## Parcours typique

Un élève arrive, accompagné par toute sa classe, et écoute (attentivement,
bien sûr) les explications générales. Puis quand vient son tour, il 
échange des paiements : 12 € d'adhésion, 55 € de forfait de location, plus une
caution pour les « arrivants », contre une « entrée à la boutique ».

![L'étape du paiement](img/paiement-recadre.jpg){width=100%}

## La boutique

À l'entrée de la boutique, elle ou il pose son sac, prend
un panier et son joli-phone, et scanne un QR-code, ce qui
lui donne un jeton valide une heure durant...
Après quoi, l'application web SLM lui demande son nom et
prénom, lui montre la liste des options, spécialités et 
langues déjà connues à son inscription au lycée, avec une 
opportunité pour corriger des détails. 

Après confirmation, le mode « boutique » est enclenché.

![](img/b1.jpg){width=20%} 
![](img/b2.jpg){width=20%}
![](img/b3.jpg){width=20%}

## Le mode boutique

Rappel : l'élève tient un panier, dans le creux de son coude, a un téléphone
dans la main prêt à scanner des repères sous les piles de livres.

Si tout se passe bien, l'élève dispose aussi de son autre main pour 
prendre des livres, et de son cerveau, pour raisonner (optionnellement).

![](img/boutique4-recadre.jpg){width=100%} 


## Choix des livres

Face à un pile de livres, le QR-code scanné peut renvoyer un écran rouge
(pas bon, je prends pas), ou un écran vert (bon, je prends), avec un gros 
bouton « PRIS », juste sous le pouce. Si le bouton est là, il faut appuyer 
dessus, sans oublier de prendre le livre.

![](img/boutique5-recadre.jpg){width=100%} 

Quand tous les livres ont été pris, si le son n'est pas désactivé, une sonnerie
de trompette retentit : il est temps de revenir « aux caisses ».

## Enregistrement des locations

L'élève donne sa pile de livres au bénévole de la coopérative qui l'attendait,
la ou le bénévole identifie chacun des livres à l'aide d'un lecteur de
code-barre, valide la liste de prêts, imprime la « feuille de prêt » et la
fait signer à l'élève.

![Saisie des prêts](img/prets1.png){width=100%}

## Impression et signature de la fiche de prêts

![La fiche de prêts](img/prets2.png){width=100%}

# SLM est un logiciel libre

SLM (School Library Management) est a été créé pour les besoins de 
la **Coopérative**, il est publié sous la licence libre GPL-3 : vous
pouvez donc l'utiliser, le recopier, en comprendre le fonctionnement
pour le modifier si besoin, le diffuser tel quel ou avec des modifications.

Lien de téléchargement : 
[depuis le dépôt des source Debian](https://salsa.debian.org/debian/slm)

# Fonctionnement du logiciel

SLM est une application *web*, c'est à dire qui fonctionne à travers
le réseau : réseau local, ou Internet. Toute machine connectée qui
accède à un **serveur SLM** (ou le serveur SLM lui-même) peut faire
fonctionner le logiciel à travers un navigateur web récent.

Les données sont situées dans une base de données *SQLite*, ce qui
permet une gestion facile des sauvegardes (un seul fichier contient
toutes les données).

Seules les personnes authentifiées accèdent aux fonction du logiciel et
aux données.

# Comment installer SLM

La façon la plus simple consiste à installer Debian GNU/Linux sur un
ordinateur (une machine aux performances modestes suffit), et à
demander le paquet **slm**. Plusieurs autres paquets s'installent,
par le jeu de dépendances, et à la fin le service web est actif.

Pour le moment, la **Coopérative** se contente d'exploiter un petit serveur
avec un processeur Intel Atom® N2800 : deux coeurs, à 1,8 GHz, puissance
de dissipation thermique (PDT) de 6,5 W.

![Initiative de durabilité (logo © Tomasz Kozlowski, CC-BY-SA)](img/Sustainability_Initiative_logo_simplified.svg){width=100%}

## Pour découvrir SLM

Une base de donnée anonymisée est mise à disposition, pour faire des essais.
Les noms des élèves y ont été remplacés par ceux de divers personnages des
bandes dessinées créées par Gosciny & Uderzo, un seul numéro de téléphone
remplace les numéros personnels.

Voici comment faire un essai :

```shell
un_chemin:$ cp -Rd /var/lib/slm .
un_chemin:$ cp outils/db_test0.sqlite3 ./db.sqlite3
un_chemin:$ ./manage.py runserver
```

Le service web SLM sera alors basé sur la base anonymisée ; il existe un
utilisateur **`admin`**, qui a pour mot de passe **`slmslm1234`**.

# Un peu de technique ...

SLM est motorisé par le système Django ;
Django est un module Python... cependant SLM utilise plus que Django

![logo de SLM (© Berdea, CC-BY-SA)](img/Collaboration_logo_V2.svg){width=100%}

## L'aide contextuelle

La plupart des pages web visibles sont définies dans un fichier `views.py`
et sont rendues en tenant compte de quelques paramètres, dont un paramètre
**aide**. Ce paramètre, quand on le définit, permet de renvoyer 
automatiquement vers une page d'aide, en rapport avec le contexte courant.

**Toute l'aide** est servie sous forme de pages statiques, générées grâce
au logiciel [Pelican](https://getpelican.com/)

![Page d'aide pour l'URL `/inventaire`](img/snap-inventaire.png){width=100%}


## Les langues : I18N, L10N

SLM, ainsi que les pages d'aide, sont **internationalisés** grâce au module
Python `gettext` ; des traductions en espagnol/castillan et en 
anglais/américain sont maintenues. On peut facilement améliorer les
traductions, ou introduire d'autres langues dans le cadre de partenariats.

![Page d'aide traduite, pour l'URL `/inventaire`](img/snap-inventario.png){width=100%}

## Documents aux formats SVG, PDF, ODS

- Un module `pylabels` permet de générer, au format **PDF** des documents qui
  sont répétés au sein d'un page à imprimer, comme les étiquettes à code-barre,
  mais pas que...
- Les modules `pyx` et `cairosvg`, entre autres, sont utilisés pour pouvoir
  gérer l'I18N des copies d'écran sur lesquelles on ajoute des commentaires.
  Les copies d'écran annotées sont rendues au format **SVG**
- Les modules `reportlab` et `trml2pdf` permettent de générer des fichiers
  **PDF** à partir de modèles en langue **RML** (Reportlab Markup Language), qui
  sont bien sûr dynamiques, grâce au système de *templates* de Django
- Le module `odf` permet de produire des documents aux formats de LibreOffice :
  **ODS** est utilisé pour exporter des données à destination d'un tableur,
  comme par exemple des listes d'élèves que nos Conseillers Principaux
  d'Éducation (CPE) souhaitent convoquer.

## Des questions ?

On peut faire une démo, montrer des sources, ouvrir un shell Django, etc.

![Quelques bénévoles de la COOP](img/coop.png){width=100%}

Ce document, ainsi que les illustrations, sauf mention contraire : © 2025 Georges Khaznadar, 
[CC-BY-SA-4.0](https://fr.wikipedia.org/wiki/Licence_Creative_Commons)
