samedi 16 février 2008

Mise à jour du cours d'UML 2.0

Je viens de mettre à jour le cours d'UML 2.0. Le chapitre sur les diagrammes de classes a été substantiellement remanié avec, entre autres, la prise en compte de la notion de possession de terminaison d'association introduite dans la version 2.1.1 d'UML. Parmi les nouveautés, on peut également noter la présence de travaux dirigés, sans la correction, dans la version pdf du cours.

mardi 12 février 2008

LaTeX sous Ubuntu

Pour installer et travailler avec LaTeX sous Ubuntu, il faut installer les paquets suivant :
  • texlive correspond à l'installation minimale de LaTeX ;
  • texlive-fonts-recommended pour les fonts ;
  • texlive-lang-greek pour le symbole € ;
  • latex-ucs pour la prise en charge de l'UTF8 dans les documents LaTeX ;
  • latex-beamer pour les présentations en LaTeX ;
  • kile est un bon éditeur LaTeX ;
  • jabref ou pybliographer comme gestionnaire bibliographique ;
  • hevea pour générer des pages html.
Remarque : si vous êtes un utilisateur régulier de LaTeX, le mieux est d'installer le paquet texlive-full qui installe tous les paquets texlive.

lundi 4 février 2008

Configurer un moniteur LCD 22 pouces large (16:10) sous Ubuntu gutsy

Pour configurer un moniteur large (16:10) sous Ubuntu gutsy, il faut procéder de la manière suivante.
  1. Aller dans : Système > Administration > Écran et Affichage
  2. Choisissez votre modèle, par exemple Générique > LCD Panel 1680 x 1050 pour moniteur 22 pouces au format 16:10
  3. Cocher la case Écran large
C'est la troisième étape qui est contre-intuitive. En effet, on ne s'attend pas, après avoir spécifié LCD Panel 1680 x 1050, que la résolution 1680 x 1050 ne soit pas disponible ! Elle le devient si on coche la case Écran large ...
Il en va de même pour tous les écrans larges.

jeudi 24 janvier 2008

Tableaux à deux dimensions et passages de paramètres en langage C

Dans le langage C, les crochets que l'on utilise pour encadrer les index d'un tableau ne sont, en réalité, qu'une façon de déréférencer un pointeur.
Si ptr est un pointeur, et n un nombre entier, alors l'expression ptr[n] est strictement équivalente à *(ptr + n). Vous pourrez vérifier que ces deux notations sont équivalentes par vous-même.
Ces deux notations permettent de déréférencer un pointeur sur un tableau à une dimension. Intéressons-nous maintenant au cas d'un tableau à deux dimensions défini de la manière suivante :
int matrice[NB_LIGNES][NB_COLONNES]
Dans ce cas, l'expression matrice[ligne][colonne] est strictement équivalente à :
matrice[(NB_COLONNES * ligne) + colonne]
elle-même strictement équivalente à :
*(matrice + (NB_COLONNES * ligne) + colonne)
Ainsi, le compilateur a besoin du nombre de colonnes d'un tableau à deux dimensions pour pouvoir réinterpréter une notation du type matrice[ligne][colonne]. C'est pourquoi cette dimension doit être précisée lors du passage d'un tableau à deux dimensions comme paramètre d'une fonction.
En fait, lors de la transmission d'un vrai tableau à deux dimensions, le paramètre effectivement transmis est un pointeur sur le premier sous-tableau, et non un pointeur sur le premier élément.
Le passage du tableau matrice à une fonction devra donc se faire de la façon suivante :
void fonction(int (*matrice)[NB_COLONNES]) ;
Une autre notation possible, bien qu'elle masque la véritable nature du paramètre transmis (ce qui n'est pas bien), est :
void fonction(int matrice[][NB_COLONNES]) ;
L'inconvénient évident est que les fonctions ainsi définies ne sont absolument pas générales puisqu'elles ne peuvent manipuler qu'un tableau de NB_COLONNES. Le prix de la généricité est l'abandon du vrai tableau au profit de l'allocation dynamique.

dimanche 20 janvier 2008

VLC Media Player, un client UPnP sous Ubuntu ?

VLC permet d'accéder directement au contenu UPnP AV mis à disposition sur le réseau. Pour cela, Vue > Liste de lecture... puis Gérer > Découverte de services > Découverte Universal Plug'n'Play (Intel) et le ou les serveurs UPnP AV apparaissent dans la liste de lecture.
Hélas, chez moi, VLC n'arrive pas encore à développer complètement l'arbre UPNP : le client UPnP de VLC n'est donc pas encore utilisable.

dimanche 13 janvier 2008

Rhythmbox, un client UPnP sous Ubuntu ?

Théoriquement, Rhythmbox supporte maintenant l'UPnP. C'est très bien pour lire depuis Ubuntu la musique stockée sur son NAS et mise à disposition sur le réseau par une application comme TwonkyMedia par exemple. Cependant, Ubuntu Gutsy Gibbon n'est visiblement pas encore prêt pour ça. Tout d'abord, impossible d'activer dans Rhythmbox le greffon UPnP (Edition > Greffons... > Prise en charge du partage UPnP). Visiblement un problème de dépendance non renseignée par Rhythmbox. Ce n'est pas grave, il suffit d'installer le paquet python-louie avec Synaptic, par exemple, et le tour est joué : on peut activer le greffon UPnP. Mais il ne fait rien ... En effet, pour fonctionner correctement, il faut aussi installer le paquet python-coherence qui lui, n'est pas encore disponible pour Ubuntu Gutsy Gibbon, mais le sera pour la prochaine version : Ubuntu Hardy Heron. Rendez-vous donc en avril 2008 pour un support de l'UPnP probablement effectif avec Rhythmbox.

jeudi 3 janvier 2008

Lenteur du FTP vers la FreeboxHD causée par un problème d'interférences Wifi !

Depuis quelques semaines, le FTP vers la FreeboxHD est devenu lent et inutilisable avec un taux de transfert instable et inférieur à 5 KB/s ! Après de multiples tests et tentatives infructueuses de joindre la hotline de Free, j'ai fini par mettre le doigt sur le problème : interférences avec le Wifi du DLink DIR-635 ! En coupant, ou en baissant l'intensité Wifi du routeur tout rentre dans l'ordre (transfert stable de l'ordre de 1 MB/s). Il est probable qu'en éloignant les deux bestioles on obtienne le même effet. Curieusement, je n'avais pas de problème avec la diffusion de chaines de TV par ADSL. Dans tous les cas, il est bon de savoir que l'émission Wifi d'un routeur peut interférer avec la connexion Mimo (donc Wifi également) entre la Freebox et la FreeboxHD ...

Freebox : tout bien mais pas bien tout

Je possède une Freebox version 5. Je l'utilisais au départ simplement pour sa fonction modem (fonctions routeur et Wifi désactivées). La Freebox était connectée au routeur DLink DI-704P qui gérait un réseau filaire (deux ordinateurs, le Synology DS107e et une imprimante).
L'arrivée d'un smartphone et du Noxon 2 m'ont contraint à activer les fonctions routeur et Wifi de la Freebox afin de bénéficier du Wifi. Le routeur DLink DI-704P s'est alors transformé en simple serveur d'impression. Le résultat est que j'ai énormément perdu en fluidité du réseau. Visiblement, la Freebox n'assure pas du tout pour réaliser correctement les fonctions de routeur, de Wifi et de modem en même temps. Par exemple, si le NAS (DS107e) utilise plusieurs connections Internet, même avec un trafic très faible (proche de zéro), la bande passante pour les autres postes (PC et Noxon) devient très difficile et saccadée. La navigation sur Internet devient une galère et l'écoute d'une radio ou d'une musique disponible par UPNP avec le Noxon quasiment impossible. En fait, le réseau devient fluide uniquement si un seul client est actif à la fois ...
L'achat d'un routeur Wifi (DLink DIR-635) et la désactivation des fonctions routeur et Wifi de la Freebox m'ont permis de retrouver un réseau très fluide. Je déconseille donc d'utiliser la Freebox pour autre-chose que sa fonction de modem !

samedi 15 décembre 2007

Diffuser une application sous Linux

En raison de la prolifération des distributions des systèmes Unix (et Linux) la diffusion d'une application, que l'on a programmé, pose de réels problèmes, bien plus que sous Windows. Vous trouverez sur Internet de nombreux articles intéressant traitant du sujet comme : Deploying an Application on Qt/X11.

La solution que je propose ici n'est pas très élégante, mais elle possède l'avantage d'être simple et fonctionnelle. Cette solution consiste à utiliser la commande ldd pour connaître toutes les dépendances de l'application et à diffuser l'application accompagnée de toutes ses dépendances.

Voici un petit script qui réalise tout cela automatiquement.

Il fonctionne de la manière suivante :
./gen_package.sh \ou\est\le\program \ou\generer\le\package
Dans le répertoire \ou\generer\le\package vous trouverez :
  • un répertoire contenant toutes les librairies dont dépend l'application ;
  • l'application en question désignée par \ou\est\le\program au script ;
  • un script portant le même nom que l'application, permettant de lancer l'application et rendant accessible le répertoire où se trouvent les librairies dont dépend l'application. C'est donc ce script qu'il faut appeler pour lancer l'application. Le répertoire ainsi créé peut êtrer diffusé sans problème.

Connaitre la liste des dépendances d'un exécutable : commande ldd

Pour connaître la liste des dépendances d'un exécutable, il suffit de taper :
ldd