Générer la documentation de votre modèle physique de données MySQL

L'outil mysqldump permet d'exporter toute ou une partie de la structure d'une base de données au format XML. De là, il est possible de tansformer ce document, avec une feuille de style XSL, pour générer la documentation de votre modèle physique de données au format HTML.

La solution exposée ici permet de générer une documentation complète de la structure des tables du schéma, en incluant les index, les clés étrangères ainsi que les commentaires des tables et des colonnes.

Conversion de document avec LibreOffice

Il est souvent très utile de pouvoir convertir un document dans un autre format en vue de son traitement ou son export pour l'utilisateur final. OpenOffice (ou LibreOffice) est le roi en la matière : il peut lire et convertir plusieurs dizaines de formats de document.

OpenOffice, sous linux, peut être lancé en ligne de commande (headless) afin de convertir un document dans un autre format. Unoconv permet de lancer cette instance d'OpenOffice et de procéder à la conversion.

Voici un petit exemple pour convertir un document Word en document PDF :

./unoconv -vvv -d document -f pdf -o "fichier.doc" "fichier.pdf"

Dans certains traitements d'import, il peut être très avantageux de convertir un fichier XLS en fichier CSV. Dans ce cadre, les paramètres de filtre / conversion de colonne / séparateur devront être utilisés, par exempble :

./unoconv -d spreadsheet -f csv -e FilterOptions=59,34,0,0 --stdout -vvv "fichier.xls" > "fichier.csv"

Notez que LibreOffice convertira toujours, dans ce contexte, la première feuille du document. Pour convertir une autre feuille, il vous faudra simplement modifier le programme avec le patch lié à ce billet, et rajouter l'argument -S à la ligne de commande :

./unoconv -d spreadsheet -f csv -S 2 -e FilterOptions=59,34,0,0 --stdout -vvv "fichier.xls" > "feuille-2.csv"

Design pattern : Un Singleton PHP

Le design pattern Singleton vous permet, en tant que développeur, de vous assurer qu'une classe n'est instanciée qu'une seule fois durant toute l'exécution de votre script. Ce cas de figure se présente notamment lorsqu'il s'agit de stocker une connexion à une base de données ou de charger un fichier de configuration. Voici un gabarit simple et commenté qui vous permettra de maitriser le concept... pour ceux qui ne le savent pas déjà !

Hello World ! Un plugin Firefox 4 avec le JetPack SDK

Le navigateur Web et certainement l’un des programmes les
plus utilisés dans notre domaine d’activité. Y intégrer des
fonctionnalités additionnelles peut s’avérer d’une grande utilité en termes d’ergonomie
et d’efficacité, pour nos clients comme en interne. De bonnes connaissances en Javascript seront nécessaires pour développer un plugin, grâce au JetPack SDK de Mozilla.

Attention, ça va aller très vite !!!

Script keep-alive Apache2 en PHP

Bonjour à tous,

Apache 2, et notamment lors de l'utilisation de modules complémentaires,
peut être capricieux et planter de façon un peu mystérieuse... Afin de
surveiller que votre serveur web répond correctement, je vous propose
ici un petit script PHP qui vous redémarrera Apache automatiquement et
vous alertera par e-mail si ce dernier est tombé.

SSO : Authentification automatique entre une session Windows et votre application web

Dans la mesure où les utilisateurs de votre parc informatique ouvrent
leurs sessions Windows sur un contrôleur de domaine de votre
infrastructure, vous pouvez utiliser la fonction d’authentification
intégrée de Windows (Windows Integrated Authentification) pour leur éviter
de re-saisir leur login et mot de passe lorsqu’ils se connectent, par
exemple, à votre intranet.

Planification multi-projets et ressources mutualisées

Je vous fais part, dans cet article, de mon retour d'expérience sur la création d'un environnement de planification multi-projets sous Microsoft Project 2010. L'objectif étant de :

  • Gérer plusieurs projets en parallèle (chacun pouvant être géré par un chef de projet différent)
  • Que tous ces projets utilisent les mêmes ressources
  • Qu'un projet "Général" puisse inclure chaque projet pour la planification globale