Skip to content

Linux Attitude

Le libre est un état d'esprit

Archive

Archive for October, 2007

Niveau :      
Résumé : Loi de Gall

Pas d'article technique aujourd'hui. Pour me faire pardonner, je vous donne une petite phrase sur laquelle vous pourrez prendre 5mn à réfléchir.

Libre traduction de http://en.wikipedia.org/wiki/Gall's_law :

Un système complexe qui fonctionne provient nécessairement d'un système simple qui a fonctionné. La proposition inverse est aussi vraie : un système complexe construit à partir de zéro ne fonctionne jamais et ne peut pas être modifié pour fonctionner. Vous devez recommencer à partir d'un système simple qui fonctionne.

Pensez-y, ça s'applique probablement à ce sur quoi vous êtes en train de travailler ...

Niveau :      
Résumé : openssl

Je vous propose de devenir votre propre autorité de certification.

Pour quoi faire ?

En général une autorité de certification permet de garantir à un utilisateur lambda que le certificat que vous allez lui présenter correspond bien à ce que vous prétendez et ce sans devoir chercher à le vérifier lui-même. Pour que cela fonctionne, il faut que le client en question fasse déjà confiance à cette autorité.

Or si vous êtes votre propre autorité, personne ne vous fera confiance. En fait ceci n'est utile que dans deux cas. Le premier pour faire des tests sans devoir payer (relativement cher). Le deuxième pour avoir des certificats SSL sur un parc de clients que vous pouvez maîtriser. Par exemple sur un intranet pour pouvez exiger des clients qu'ils installent votre autorité.

Comment faire ?

Créez votre propre clé privée :

$ openssl genrsa -des3 -out ca.key 2048

Créez votre demande de certificat

$ openssl req -new -key ca.key -out ca.csr
# vous avez le droit à ce que vous voulez dans le CN

Signez le certificat par lui-même :

# longue durée
$ openssl x509 -req -days 3650 -in ca.csr -signkey ca.key -out ca.crt

Bravo ! Vous avez maintenant un certificat que vous pouvez utiliser pour signer tous vos autres certificats. Le certificat est dans ca.crt et sa clé privée dans ca.key.


continue reading...

Niveau :      

Prototypage

L'optimisation est un processus qui cherche à accélérer le fonctionnement de ce que vous avez développé. Cette amélioration intervient à plusieurs étapes. La première se trouve tôt dans le développement (en gros après ou pendant le prototype) et est le choix des algorithmes à utiliser. C'est eux qui détermineront si votre application tournera en O(n) ou en O(2^n)

Note : O(n) veut dire que la mesure du temps d'exécution de votre application (ou de son occupation en RAM selon le problème considéré) sera de la forme a*n avec a constante et n le nombre de données à traiter (pour n grand). O(n^2) -> a*n^2 + b*n + c . On considère que pour n suffisamment grand les termes après le premier sont non significatifs. Mais il ne faut pas oublier que pour n petit ils le deviennent ...

Développement

Ensuite vous développerez en respectant un certain nombre de standards ou de normes. Vous vous retrouverez alors avec les recommandations de milliers de consultants et surtout de votre chef. Et attention, ce n'est qu'après ce développement qu'interviendra l'optimisation. Ce qui veut dire que si votre chef vous demande de dérouler les boucles, soit il sait que c'est un cas particulier qui l'exigera (très rare) soit vous lui dites qu'il peut aller ennuyer un autre collègue.

Profiling

En pratique, toute optimisation doit être précédée d'un profiling. L'optimisation sans profiling, c'est la loi sans justice, la répression sans prévention ... ça ne sert à rien si ce n'est faire chier sans aucune raison autre que vos idées reçues. Pour preuve une expérience très simple. Une application développée, demandez à un développeur dans quelle fonction il pense que le plus de temps est dépensé. Ensuite effectuez un profiling et déterminez le temps réellement dépensé dans cette fonction. Dans la majorité des cas, il aura tort (sauf s'il a quelques années de profiling derrière lui).

La plupart des langages disposent maintenant d'outils de profiling adapté. A vous de le trouver (notez que je ne l'ai pas encore trouvé pour javascript). Un certain nombre de ces outils permet de fournir des données au format Kcachegrind (wincachegrind sous windows). Kcachegrind est un outil formidable qui permet de suivre l'arbre d'appel des fonctions, d'avoir les temps d'exécution de chaque fonction de façon très visuelle. Vous verrez tout de suite où agir.

Et ce n'est qu'après avoir vu de vos yeux dans kcachegrind quelle partie du code prend du temps ou quelle fonction est appelée fréquemment, que vous pourrez vous atteler à l'optimisation.

Optimisation

Et cette fois, c'est parti, optimisation à fond, la règle est qu'il n'y a plus de règle, tout est bon pour optimiser. Casser des standards de codage, dérouler des boucles, copier/coller des fonctions ... Mais tout ceci n'est valable que parce que cela se fait sous le contrôle d'un profiling qui vous indique que ce que vous faites sert vraiment. Attention, à partir du moment où l'optimisation change ou égratigne des bonne pratiques de codage, elle doit être localisée et commentée.

Je sais tout ceci n'est que du blabla, pas de cas concret, mais ça permet de mettre un peu les idées en place, éviter quelques erreurs. À bientôt pour de nouvelles aventures !

Bonsoir,

Aujourd'hui j'ouvre une nouvelle catégorie sur le développement. Hé oui, si vous êtes sysadmin, il est faut connaître la partie développement, car les développements des autres seront hébergés chez vous. Il est donc important de savoir lire ce qu'on vous donne comme code. Et il est tout aussi important de connaître les contraintes associées au développement pour donner des conseils avisés aux développeurs que vous rencontrez.

Mais peut-être que vous n'êtes pas sysadmin et que vous êtes développeur dans l'âme. Alors la partie sysadim est un hobby pour vous. Ces articles vous intéresseront aussi, et n'oubliez pas il est aussi important pour vous de comprendre les contraintes des sysadmins qui hébergeront vos applications.

Ayant moins d'activité de développement que de sysadmin (en ce moment), les articles sur le développement commenceront à un rythme moins rapide. En effet j'ai peu d'idées d'articles d'avance (contrairement à sysadmin ou je peux tenir un an et demi sans proposition d'article).

Comme disait Pline l'ancien (le vrai cette fois) Nulla dies sin linea.

Alors si vous avez des suggestions, n'hésitez surtout pas à les poster en commentaire ou à m'envoyer un mail.