mercredi, février 24 2021

How to update PlantUML diagram automatically?

PlantUML is a nice tool to generate diagram as code but unlike the visual editors (like diagrams.net) you don't have visual feedbacks.

Easy but manual

The following command will generate an image name mydiagram.png

plantuml mydiagram.puml

watch ?

Let's try to update it every 10s with watch. It's a good start but it refresh the diagram even if it's not saved. It you are not lucky it could take ~10s to display the change. (Ok you can lower the watch duration but...)

watch -n 10 plantuml mydiagram.puml

inotifywait

inotifywatch listen for filesystem events so it will reload the diagram at the right time : when you save it.

while inotifywait -e move_self cd.puml; do plantuml cd.puml; echo ""; done

My editor is vim so I'm listening to the event move_self that is enough but maybe it's not suitable with another editor. You could watch for events with inotifywatch.

vim !

In fact, vim have this feature built in with the autocmd. autocmd BufWritePost *.puml !plantuml %

mardi, juillet 10 2012

OpenDJ et les fichiers properties

Lorsque l'on souhaite passer une commande sur un annuaire il faut définir le serveur cible, son port, l'utilisateur et son mot de passe. Ceci est laborieux.

ldapsearch --hostname ldap.example.net --port 389 --bindDn "cn=Directory Manager" --bindPassword secret ...

Mais on peut s'en passer via les fichiers properties.

--propertiesFilePath \{CheminFichierPropriétés\}
    Chemin vers le fichier contenant les valeurs des propriétés par défaut pour
    les arguments de ligne de commande

Ce fichier permet de définir des informations génériques utilisables pour tous les outils en lignes de commandes opendj :

# Nom d'hôte ou adresse IP du serveur d'annuaire
hostname=ldap.example.net

# DN à utiliser pour effectuer une liaison au serveur
bindDN=cn=Directory Manager

# Mot de passe à utiliser pour effectuer une liaison au serveur
bindPassword=secret

# Numéro de port du serveur d'annuaire
port=1389

Il suffit alors de préciser le fichier properties à la ligne de commande :

ldapsearch --propertiesFilePath tools.properties

Mais on peut faire mieux encore et se passer de "propertiesFilePath".

Il suffit de placer ce fichier tools.properties dans le dossier ~/opends (oui j'ai bien noté opends, cela sera corrigé en 2.5.0[1]).

Et maintenant toutes les commandes opendj utilisent ce fichier.

Toutes et même stop-ds qui essaye de se connecter.

Ce qui ne nous intéresse pas outre mesure. Donc raffinons notre fichier :

# Nom d'hôte ou adresse IP du serveur d'annuaire
ldapsearch.hostname=ldap.example.net
ldapmodify.hostname=ldap.example.net

# DN à utiliser pour effectuer une liaison au serveur
ldapsearch.bindDN=cn=Directory Manager
ldapmodify.bindDN=cn=Directory Manager

# Mot de passe à utiliser pour effectuer une liaison au serveur
ldapsearch.bindPassword=secret
ldapmodify.bindPassword=secret

# Numéro de port du serveur d'annuaire
ldapsearch.port=1389
ldapmodify.port=1389

# Numéro de port d'administration du serveur d'annuaire (spécifique pour la commande dsconfig)
dsconfig.port=1390

Un peu de lecture

jeudi, juin 21 2012

Vive Oracle...

<users@opends.dev.java.net>:
Sorry, I couldn't find any host named opends.dev.java.net. (#5.1.2)

Après avoir changé le manuel d'OpenDS d'URL et en passant cassé toutes les bookmarks, l'indexation google etc...

Je viens de m'apercevoir qu'ils avaient changé les adresses des mailings listes sans prévenir les personnes concernés.

Heureusement que ForgeRock a repris le projet sous le nom d'OpenDJ.

lundi, juin 13 2011

Xdebug Trace Parser 0.1.0

Qu'est ce que Xdebug Trace Parser ?

Xdebug Trace Parser (Xdtp dans sa version courte) est un outil d'audit de performance d'une application PHP. Son objectif est d'identifier rapidement les points lents de l'application.

Xdtp analyse les traces produites par l'extension PHP Xdebug de Derick Rethans et génè un fichier DOT utilisable par Graphviz.

Et comment ca marche ?

Tout d'abord, il faut l'installer via PEAR.

pear channel-discover pear.au-fil-du.net
pear install afdn/xdtp

Puis il faut lui donner à manger

  1. Installer l'extension Xdebug
  2. Configurer Xdebug dans le php.ini

    Exemple d'une configuration PHP 5.2 sous Windows :

    [xdebug]
    zend_extension_ts="ext/php_xdebug-2.1.0-5.2-vc6.dll"
    xdebug.auto_trace=1 ; Repasser cette valeur à 0 une fois la capture terminée
    xdebug.trace_output_dir=c:\xdebug
    xdebug.trace_format=1

  3. Exécuter la page ou le script à auditer
  4. Récupérer la trace

Et on lance l'analyse

xdtp trace.123.xt > trace.dot

Consulter le résultat

Nécessite Graphviz.

Deux possibilités :

  • dotty trace.dot
  • dot -Tpng -O trace.dot

Ce qui doit vous donner un truc comme ça :

Xdtp - Exemple

dimanche, septembre 5 2010

PHP est faiblement typé !

A votre avis, que retourne le code suivant :

var_dump('11111111111111111' == '11111111111111112');
var_dump('11111111111111111' === '11111111111111112');
var_dump(11111111111111111 === 11111111111111112);
var_dump(11111111111111111 == 11111111111111112);

Et en bonus :

var_dump('12abc' == 12); 

On serait tenté de dire : c'est simple "faux" !

Et bien non..

Lire la suite...

mercredi, mai 26 2010

Conférence Agile France 2010

Mardi prochain, je co-animerais avec des collègues une session "retour d'expérience".

Le titre :: "Bâtir une communauté de développeurs par l'agile !" et c'est De 11h à 12h, salle A.

lundi, mai 24 2010

LDAP : les recherches non indexés et la pagination des résultats

Actuellement je travaille sur une application utilisant un annuaire LDAP comme conteneur de personnes. Dans cette application, les utilisateurs ont la possibilité de faire des recherches pouvant retourner beaucoup de résultats : quels personnes ont un nom commençant par "Du" (sn=Du*).

Par défaut, l'annuaire que nous utilisons (OpenDS 2.2) refuse cette requête :

ldapsearch -b "ou=People,dc=example,dc=com " -h localhost -p 1389 -D "uid=123456,ou=admins,dc=example,dc=com" -w azerty --countEntries "(sn=Du*)"
SEARCH RES conn=11 op=1 msgID=2 result=50 message="Vous ne disposez pas des privilèges suffisants pour lancer une recherche non indexée" nentries=0 etime=0

En effet les utilisateurs non-administrateur n'ont par défaut pas le privilège d'exécution de requête non indexées.

Exécutons la requête en mode administrateur : celle ci me retourne plusieurs milliers d'entrées.

Nous avons un index mais OpenDS limite sa taille à 4000 entrées.

dn: ds-cfg-backend-id=userRoot,cn=Backends,cn=config
ds-cfg-index-entry-limit: 4000

Que faire alors ?

Augmenter l'index peut paraitre une solution simple et évidente : mais quelle limite lui fixer ? 10000 ? Et qu'en sera il quand le volume de données dépassera se seuil ? Quid de l'espace disque consommé par cet index ? Et de son temps de calcul ?

Il semble plus pertinent de donner le privilège d'exécution des requêtes non indexés.

dn: uid=admin,ou=example,dc=com
changetype: modify
add: ds-privilege-name
ds-privilege-name: unindexed-search
SEARCH RES conn=15 op=1 msgID=2 result=4 message="Cette opération de recherche a renvoyé le nombre maximum d'entrées au client (1000)" nentries=1000 etime=532

Aie ! Ca ne marche toujours pas, car OpenDS ne permet pas de retourner plus de 1000 résultats pour une requête.

dn: cn=config ds-cfg-size-limit: 1000

Comment contourner cette limitation ?

Et bien paginons nos résultats !

Demandons à l'annuaire de nous retourner les toutes les entrées en X lots de 1000 résultats.

ldapsearch -b "ou=People,dc=example,dc=com " -h localhost -p 1389 -D "uid=admin,dc=example,dc=com" -w azerty --countEntries --simplePageSize 1000 "(sn=Du*)" dn

Et maintenant ca marche !

Source

LDAP Paged Results - More - Srikanth Konjarla (Sun)

OpenDS.org unindexed search (OpenDS Wiki)

Configuring Indexes on the Local DB Back End (OpenDS Wiki)