mardi 30 octobre 2007

Cours en ligne : UML 2.0

UML (Unified Modeling Language, soit langage de modélisation objet unifié) est né de la fusion des trois méthodes qui s'imposaient dans le domaine de la modélisation objet au milieu des années 1990 : OMT, Booch et OOSE. D'important acteurs industriels (IBM, Microsoft, Oracle, DEC, HP, Rational, Unisys etc.) s'associent alors à l'effort et proposent UML 1.0 à l'OMG (Object Management Group) qui l'accepte en novembre 1997 dans sa version 1.1. La version d'UML en cours à la fin 2006 est UML 2.0 qui s'impose plus que jamais en tant que langage de modélisation standardisé pour la modélisation des logiciels.
Ce document constitue le support du cours d'UML 2.0 que je dispense aux étudiants du département d'informatique de l'institut universitaire de technologie (IUT) de Villetaneuse.

Table des matières du cours UML 2.0
  • Introduction à la modélisation objet
  • Diagramme de cas d'utilisation (Use Case Diagram)
  • Diagramme de classes (Class Diagram)
  • Object constraint langage (OCL)
  • Diagramme d'états-transitions (State machine diagram)
  • Diagramme d'activités (Activity diagram)
  • Diagrammes d'interaction (Interaction diagram)
  • Diagrammes de composants et de déploiement (Component diagram et Deployment diagram)
  • Mise en oeuvre d'UML

Cours en ligne : Base de Données et langage SQL

Ce cours commence par s'intéresser à la problématique de la conception des bases de données. La deuxième partie est consacré aux bases de données relationnelles, c'est-à-dire aux bases conçues suivant le modèle relationnel et manipulées en utilisant l'algèbre relationnelle. Il s'agit, à ce jour, de la méthode la plus courante pour organiser et accéder à des ensembles de données. La dernière partie constitue, enfin, une bonne introduction au langage SQL (Structured Query Language) qui peut être considéré comme le langage d'accès normalisé aux bases de données relationnel. Le langage SQL est supporté par la plupart des systèmes de gestion de bases de données commerciaux (comme Oracle) et du domaine libre (comme PostgreSQL).
Ce document constitue le support du cours Base de Données et langage SQL que je dispense aux étudiants du département d'informatique de l'institut universitaire de technologie de Villetaneuse.

Table des matières :
  • Introduction aux bases de données
  • Conception des bases de données (modèle E-A)
  • Bases de données relationnelles
  • Langage SQL

Cours : Informatique & linguistique

La linguistique informatique ou, suivant l'appellation anglo-saxonne, la linguistique computationnelle, est une discipline issue des développements de l'informatique dans le domaine des sciences du langage. Le domaine de la linguistique informatique recouvre toutes les applications informatiques qui ont trait au langage naturel. Par langage naturel on entend le langage tel qu'il est parlé spontanément par les êtres humains (le français, l'anglais, le russe, le wolof, etc.), par opposition aux langages formels utilisés en logique, en mathématique, en informatique, etc.
L'objet premier de la linguistique informatique est le traitement automatique du langage (TAL), c'est-à-dire l'analyse et la génération automatique du langage, et plus précisément, l'élaboration de modèles computationnels d'analyse et de génération à partir desquels on peut réaliser des logiciels capables de comprendre ou de produire des énoncés en langue naturelle.
Cette unité d'enseignement présente les bases de la théorie des automates et des langages formels : automates à états finis, expressions régulières, grammaires régulières, grammaires indépendantes du contexte, analyseurs syntaxiques ascendants et descendants.

Table des matières :
  • La linguistique informatique
  • Langages formels et leurs représentations
  • Langages réguliers (type 3)
  • Langages hors contexte (type 2)
  • Analyseurs (parser) syntaxiques

Cours : Introduction au monde d'Unix

Ce cours est une introduction au monde d'Unix dispensé (2002-2004) au Centre Informatique pour les Lettres et les Sciences Humaines (CILSH). Les objectifs de ce cours sont multiples. Il doit, tout d'abord, permettre aux étudiants d'avoir un premier contact réel avec le monde de Linux. D'autre part, certains étudiants seront amenés à poursuivre leurs études par un DESS informatique double compétence où ils seront certainement confrontés à des machines fonctionnant sous Unix. D'autres encore pourront être confrontés à Unix dans leur vie professionnelle. Ce cours devrait permettre à toutes ces personnes de ne pas se retrouver complètement déroutées et démunies face à cette situation possible à venir. Enfin, les utilitaires d'Unix, disponibles par la ligne de commande, permettent d'effectuer des opérations complexes et très utiles sur des fichiers, opérations qu'il est beaucoup plus fastidieux de réaliser dans le monde Windows. Ce cours devrait donc offrir une boîte à outils très utile pour des linguistes travaillant souvent avec de gros corpus écrits.

Table des matières :
  • Système d'exploitation
  • Introduction au monde d'Unix
  • Système de fichiers d'Unix
  • Opérations sur les fichiers et répertoires
  • Visualiser et éditer des fichiers
  • Installation de Linux et de Cygwin/XFree86
  • Redirections, tubes et filtres : principes
  • Filtres
  • Pratique des filtres, redirections et tubes

Cours : Logiques du raisonnement valide

Le but de la logique est de calculer des conclusions sûres. Le langage naturel s'avère trop imprécis et riche pour permettre des développements simples et rigoureux.
La logique est un outil pour parler et raisonner dans un domaine déterminé. Différents domaines ont différentes logiques. C'est un problème à la fois philosophique et mathématique que de savoir si une logique donnée est adéquate pour un domaine particulier.
Les logiques classiques (la logique des propositions et la logique des prédicats) ont été créées pour raisonner sur des objets mathématiques. Comme ces objets sont conceptuellement assez simple, ces logiques le sont aussi. Tout comme en mathématiques, les systèmes déductifs de la logique classique se limitent à la formalisation du raisonnement valide.

Table des matières :
  • Logique des propositions
  • Logique des prédicats
  • Programmation logique : PROLOG

Activer le serveur Telnet du Synology DS107e

Pour activer le serveur Telnet :
  1. Assurez-vous de posséder le firmware 2.0.3-0462 ou supérieur.
  2. Téléchargez le patch EnableTelnet.zip.
  3. Décompressez-le pour obtenir le fichier EnalbeTelnet.pat.
  4. Appliquez ce patch en utilisant l'interface de configuration web (Système > Mise à niveau progiciel).

Sauvegarde automatique et autonome du Synology DS107e vers un disque USB

Mon objectif est de mettre en place une sauvegarde automatique et autonome de répertoires d'un Synology DS107e vers un disque USB qui lui est connecté. Automatique et autonome veut dire que l'opération se fait toute seule (cron) et qu'elle ne nécessite aucun PC allumé (tout est dans le DS107e et le disque de sauvegarde lui est directement connecté).
De plus, je veux conserver dans un répertoire tierce les versions des fichiers modifiées ou supprimés. Je veux un fichier contenant des informations sur les dates des sauvegardes et les éventuelles erreurs survenues. Certains sous-répertoires des répertoires à sauver devront être exclus de la sauvegarde.

1) Le disque USB connecté au DS107e est préalablement formaté en ext3. Via un telnet sur le DS107e, j'installe, en utilisant ipkg, le bash, cron et rsync :
ipkg install bash
ipkg install cron
ipkg install rsync
2) Je prépare mon script de sauvegarde :
#!/opt/bin/bash
echo "____________________________________ $(date +%c)"
echo "$(date +%c) > Début de la sauvegarde de /volume1/data vers /volumeUSB1/usbshare/"
rsync -a --delete --backup --backup-dir=/volumeUSB1/usbshare/Archive-Data/$(date +%F) --exclude='*_(NSVG)/' /volume1/data /volumeUSB1/usbshare
echo "$(date +%c) > Fin de la sauvegarde de /volume1/data"
echo "-----"
echo "$(date +%c) > Début de la sauvegarde de /volume1/photo vers /volumeUSB1/usbshare/"
rsync -a --delete --backup --backup-dir=/volumeUSB1/usbshare/Archive-Photo/$(date +%F) /volume1/photo /volumeUSB1/usbshare
echo "$(date +%c) > Fin de la sauvegarde de /volume1/data"
Que fait ce script :
  • Il sauve le répertoire /volume1/data, en excluant tous les sous-répertoires contenant la chaîne de caractères _(NSVG), dans le répertoire /volumeUSB1/usbshare.
  • Il archive les versions des fichiers modifiés ou supprimés de la sauvegarde ci-dessus dans le répertoire /volumeUSB1/usbshare/Archive-Data/.
  • Il sauve le répertoire /volume1/photo dans le répertoire /volumeUSB1/usbshare.
  • Il archive les versions des fichiers modifiés ou supprimés de la sauvegarde ci-dessus dans le répertoire /volumeUSB1/usbshare/Archive-Photo/.
3) Il faut maintenant automatiser l'exécution de ce script avec cron. Par, exemple, si je veux exécuter ce script tous les jours à 23h30, il faut insérer dans la table cron la ligne :
30 23 */1 * * /volume1/backup/Backup-Syno.sh >> /volume1/backup/log_sauvegarde.txt 2>&1
Je suppose ici que mon script est /volume1/backup/Backup-Syno.sh et que je conserve ses sorties sur stdout et les messages d'erreurs dans /volume1/backup/log_sauvegarde.txt. L'édition de la table cron se fait avec la commande :
crontab -e
qui a pour effet de lancer l'éditeur Vi présentant la table actuelle.

4) Voila, à vous d'adapter tout cela à votre cas de figure !

Sauvegardes avec rsync

rsync est une commande simple et efficace pour sauver ses données en utilisant un transfert de fichiers incrémental (seul les nouveautés et modifications sont tranférées).

Par exemple, supposons deux dossiers (source et destination) :
rsync -a source destination
rsync -a source/ destination
La première commande copie source dans destination, alors que la seconde copie tout le contenu de source dans destination.

L'option -a (--archive) est une abréviation de -rlptgoD. C'est un moyen rapide de dire que vous voulez la récursion et préserver pratiquement tout.
-r (--recursive) : indique à rsync de copier les répertoires récursivement.
-l (--links) : lorsque des liens symboliques sont rencontrés, ils sont recréés à la destination.
-o (--owner) : indique à rsync de mettre le propriétaire du fichier de destination identique à celui du fichier source.
-g (--group) : indique à rsync de mettre le groupe du fichier de destination identique à celui du fichier source.
-D (--devices) : entraîne le transfert d'informations sur les périphériques caractères et blocs vers le système distant pour recréer ces périphériques.
-t (--times) : indique à rsync de transférer les dates de modifications avec les fichiers et de les mettre à jour sur le système distant. Si cette option n'est pas utilisée, l'optimisation qui consiste à exclure les fichiers qui n'ont pas été modifiés ne fonctionne pas et au prochain transfert tous les fichiers seront mis à jour.

Il est souvent utile de pouvoir préciser que certains répertoires ne doivent pas être sauvés. Par exemple, supposons deux dossiers, /home/toto/source et /media/destination, et supposons que /home/toto/source/tmp ne doive pas être sauvé. Dans ce cas, il faut utiliser l'option --exclude= :
rsync -a --exclude=/source/tmp/ /home/toto/source /media/destination
rsync -a
--exclude=/tmp/ /home/toto/source/ /media/destination
La racine du chemin précisé dans --exclude= est celle du répertoire source et non la racine du système (observez la différences entre les deux lignes de commande). Le "/" à la fin est indispensable et précise qu'il s'agit du répertoire tmp/ et non du fichier tmp.



Synology DS107e : rdiff-galères

Je souhaitais faire des sauvegardes de mon disque externe sur mon DS107e en utilisant la commande rdiff-backup. J'ai monté certains répertoires en CIFS et rencontré mes premières difficultés. De plus, impossible de faire une sauvegarde en utilisant rdiff-backup car cette commande n'est pas compatible avec CIFS :
Using rdiff-backup to backup files to a server mounted via smbfs or CIFS has been a troublesome configuration for some users. Mounting via smbfs tends to be more reliable than CIFS, although it is deprecated on Linux and does not support files greater than 2 GB. See the FAQ for more on this setup.
Je change d'optique, je ne ferai pas mes sauvegardes de mon disque externe sur le DS107e. Par contre, le DS107e contient des données qu'il me faut sauver sur un autre disque externe. Dans ce sens, rdiff-backup fonctionne, mais c'est bien trop lent : plus de 15h pour archiver quelques 250Go.

Tant pis, ou plutôt tant mieux, car j'ai eu une meilleur idée : installer rdiff-backup et cron sur le DS107e et brancher mon disque externe sur le DS107e. C'est plus rapide car la sauvegarde ne passe plus par le réseau, et en plus, le DS107e est autonome et n'a plus besoin de mon PC allumé pour réaliser ses sauvegardes ! Pour installer rdiff-backup et cron, j'utilise ipkg. Une fois tout installé sur le DS107e, et bien rien ne fonctionne, ou plutôt, impossible de faire fonctionner rdiff-backup :
Exception ''module' object has no attribute 'gettempdir'' raised of class 'exceptions.AttributeError':
File "/opt/lib/python2.4/site-packages/rdiff_backup/Main.py", line 299, in error_check_Main
try: Main(arglist)
File "/opt/lib/python2.4/site-packages/rdiff_backup/Main.py", line 315, in Main
Security.initialize(action or "mirror", cmdpairs)
File "/opt/lib/python2.4/site-packages/rdiff_backup/Security.py", line 53, in initialize
set_security_level(action, cmdpairs)
File "/opt/lib/python2.4/site-packages/rdiff_backup/Security.py", line 107, in set_security_level
rdir = tempfile.gettempdir()

Traceback (most recent call last):
File "/opt/bin/rdiff-backup", line 23, in ?
rdiff_backup.Main.error_check_Main(sys.argv[1:])
File "/opt/lib/python2.4/site-packages/rdiff_backup/Main.py", line 299, in error_check_Main
try: Main(arglist)
File "/opt/lib/python2.4/site-packages/rdiff_backup/Main.py", line 315, in Main
Security.initialize(action or "mirror", cmdpairs)
File "/opt/lib/python2.4/site-packages/rdiff_backup/Security.py", line 53, in initialize
set_security_level(action, cmdpairs)
File "/opt/lib/python2.4/site-packages/rdiff_backup/Security.py", line 107, in set_security_level
rdir = tempfile.gettempdir()
AttributeError: 'module' object has no attribute 'gettempdir'
Qu'à cela ne tienne, je n'utiliserai pas rdiff-backup qui commence à me fatiguer, mais rsync qui lui, une fois installé et configuré, fonctionne.

lundi 29 octobre 2007

Synology DS107e : installation et utilisation de ipkg

1) Installer telnet puis se loguer en tant que root. Le mot de passe de root est celui du compte admin.

2) Télécharger dans le dossier public du Synology
ds101-bootstrap_1.0-4_powerpc.xsh
puis l'installer :
cd /volume1/public
sh ds101-bootstrap_1.0-4_powerpc.xsh
3) Mise à jour :
ipkg update
ipkg upgrade
4) Utilisation d'ipkg :
  • ipkg update pour mettre à jour la base de donnée d'ipkg (liste des paquets disponibles) ;
  • ipkg upgrade pour obtenir la dernière version de tous les paquets ;
  • ipkg list pour avoir la liste des paquets disponibles ;
  • ipkg install <pkg> pour installer le paquet <pkg> ;
  • ipkg status pour avoir la liste des paquets que vous avez installés ;
  • ipkg remove <pkg> pour enlever le paquet <pkg> ;
  • ipkg files <pkg> pour lister tous les fichiers installés par <pkg> ;
  • ipkg search <file> pour trouver un paquet fournissant <file>.
Mes indispensables d'ipkg :
  • ipkg install bash
  • ipkg install screen
  • ipkg install cron
  • ipkg install rssh (pour scp)
Remarque : après un reboot du Synology, ipkg ne fonctionnait plus. J'ai découvert à cette occasion que l'installation de TwonkyMedia écrase le fichier /etc/rc.local que l'installation d'ipkg met à jour pour son fonctionnement. En tout cas, une réinstallation d'ipkg a résolu le problème.