18 janvier 2010

Comment tester ou simuler un envois d'un email (via SMTP) en utilisant telnet ?

Supposons que votre serveur de mails est: smtp.monserveur.com
Et que vous voulez tester depuis votre ordinateur ou un autre serveur qui se nomme pc.chezmoi.com
En ligne de commande (sur votre fenêtre DOS ou Shell), exécutez les commandes suivantes:
C: la commande exécutée.
R: la réponse obtenue.

C:telnet smtp.monserveur.com 25
R:Trying smtp.monserveur.com...
R:Connected to smtp.monserveur.com.
R:Escape character is '^]'.
R:220 smtp.monserveur.com ESMTP ...versionXXXX DateTimeXXXXX
C:HELO local.domain.name
R:250 mail.domain.ext Hello local.domain.name [loc.al.i.p], pleased to meet you
C:MAIL FROM: mail@domain.ext
R:250 2.1.0 mail@domain.ext... Sender ok
C:RCPT TO: mail@otherdomain.ext
R:250 2.1.0 mail@otherdomain.ext... Recipient ok
C:DATA
R:354 Start mail input; end with .
C:subject: le sujet de mon mail

ceci est le corps du message
.
R:250 Mail accepted
C:QUIT
R:221 smtp.monserveur.com Service closing transmission channel
R:Connection closed by foreign host.

1 janvier 2010

MySQL: astuce pour activer/désactiver les logs MySQL sans redémarrer le serveur.

1- Activer toutes les logs MySQL en ajoutant les lignes suivantes dans votre my.cnf


log = /var/log/mysql/log.log
log_error = /var/log//mysql/error.log
log-slow-queries = /var/log//mysql/slow.log
log-queries-not-using-indexes=/var/log//mysql/no_index.log
long_query_time = 1


2- Redémarrer le serveur MySQL (sous debian : /etc/init.d/mysql restart)
3- Désormais les logs MySQL sont actifs. vous pouvez le voir en faisant: tail -f /var/log/mysql/log.log
4- Effacer les fichiers de logs ou les déplacer vers un répertoire de sauvegarde: mv /var/log//mysql/log.log /tmp/
5- Créer un lien le symbolique suivant: ln -s /dev/null /var/log//mysql/log.log
6- Se connecter sur la console MySql et faire un flush logs: #mysql> flush logs;

Si vous souhaitez à nouveau activer les logs :
1- Effacer les liens symboliques précédemment créés: rm /var/log//mysql/log.log
2- Se connecter sur la console MySql et faire un flush logs: #mysql> flush logs;

31 décembre 2009

Les outils d'analyse de logs MySQL

L'analyse des logs MySQL n'est pas toujours une tâche facile. Le travail est d'autant plus ardu lorsque les fichiers de logs sont volumineux. Afin de faciliter l'analyse de ces logs, plusieurs outils existent. La liste ci-dessous comporte les plus connus. 

mysqldumpslow: ce programme analyse et résume les log mysql "slow query log".
Usage:  mysqldumpslow [options] [logs]
Options:
-v : passer en mode verbeux
-d : passer en mode debug
-s=t, at, l, al, r, ar etc : indique le mode de tri
-r : inverser le mode de tri
-t=X: affiche le top X des requêtes
-g=MOT : filtre les requêtes à celles qui contiennent le mot "MOT"
Pour plus d'option, vous pouvez consulter le manuel d'utilisation en tapant : man mysqldumpslow

mysql_slow_log_filter: c'est un programme écrit en perl. Il parse les fichiers MySQL "slow queries", en ignorant toutes les requêtes qui ont pris moins de tempsenseconde. Il affiche comme résultat le nombre de fois que les requêtes ont dépassé ce tempsenseconde.
usage: msql_slow_log_filter -T tempsenseconde -R numrows < fichier_de_log


Usage:

30 décembre 2009

MySQL : comment activer le log-slow-queries ?

Il vous suffit d'ajouter les 2 lignes suivantes à votre my.cnf  et de redémarrer le serveur MySQL:
log-slow-queries = /var/log/mysql/slow.log
long_query_time = 1

De cette façon, le MySQL écrira dans le fichier de log  /var/log/mysql/slow.log toutes les requêtes dont le temps d'exécution aura dépassé 1 seconde.

Il existe un autre paramètre qui permet de détecter les requêtes qui ne se servent d'indexes. Il s'agit de log-queries-not-using-indexes = fichier/de/log

Pour l'activer, il vous suffit d'ajouter la ligne suivante à votre fichier de configuration mysql my.cnf et de redémarer votre serveur:
log-queries-not-using-indexes=/var/log/mysql/no_index.log

3 décembre 2009

Comment créer un repository SVN ?

Comment créer un repository SVN ?

La création d'un repository SVN est très simple.
Il vous suffit d'exécuter la commande suivante:

svnadmin create /chemin/vers/nouveau/repository



26 novembre 2009

Debian GPG error

Quelques fois, lorsque vous essayez de mettre à jour votre serveur Debian via les commandes apt-get update, apt-get upgrade ou apt-get dist-upgrade, un message d'erreur s'affiche disant que la signature du serveur n'a pas pu être vérifier.

"W: GPG error: http://your_server.net etch Release: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 9AA38DCD55BE302B"
.

9AA38DCD55BE302B: étant la clé publique (dans notre exemple: )
Ce message est dû à une nouvelle fonctionnalité de Debian permettant de garantir l'authenticité des serveurs contenant les packages utilisés pour effectuer les mises à jour.

Suite à ce message, la mise à jour est arrêtée.

Afin de corriger cette alerte, et de continuer votre mise à jour :

gpg --keyserver subkeys.pgp.net --recv-key 9AA38DCD55BE302B
gpg -a --export 9AA38DCD55BE302B | apt-key add -
apt-get update

27 mars 2009

Exim : Les commandes les plus utilisées.

Listes des commandes les plus utilisées lors de l'administration de Exim:

Afficher le mail en queue contenant $name
exim -bp|grep $name

afficher le header du message dont l'id est: $MSGID
exim -Mvh $MSGID

afficher le corp du message $MSGID
exim -Mvb $MSGID

Forcer la livraison du message $MSGID.
exim -M $MSGID

Forcer la livraison d'un seul message email-id:
exim -M email-id

Forcer la création d'un autre processus de traitement de la mail queue
exim -qf

Forcer la création d'un autre processus de traitement de la mail queue et essayer de vider les "frozen messages"
exim -qff

Afficher les logs du message messageID
exim -Mvl messageID

Afficher le corps du message messageID
exim -Mvb messageID

Afficher le header du message messageID
exim -Mvh messageID

Effacer un message sans envoyer des errors
exim -Mrm messageID

Combient de mails dans la fil d'attente?
exim -bpr | grep "<" | wc -l


Combien de message avec status "Frozen"
exim -bpr | grep frozen | wc -l


Effacer les Messages Frozen
exim -bpr | grep frozen | awk {'print $3'} | xargs exim -Mrm


Combien de messages dans la mail queue:
exim -bpc

Force la mise à jour des paramettres exim:
/scripts/eximup --force

21 janvier 2009

UML2

Cycle de vie des logiciels:
* l’analyse du besoin.
* l’élaboration des spécifications.
* la conceptualisation.
* le développement.
* la phase de test.
* la maintenance.

Notion de qualité pour un logiciel:
En génie logiciel, divers travaux ont mené à la définition de la qualité du logiciel en termes de facteurs, qui dépendent, entre autres, du domaine de l’application et des outils utilisés. Parmi ces derniers nous pouvons citer :

Validité :
aptitude d’un produit logiciel à remplir exactement ses fonctions, définies par le cahier des charges et les spécifications.

Fiabilité ou robustesse :
aptitude d’un produit logiciel à fonctionner dans des conditions anormales.
Extensibilité (maintenance) :
facilité avec laquelle un logiciel se prête à sa maintenance, c’est-à-dire à une modification ou à une extension des fonctions qui lui sont demandées.

Réutilisabilité :
aptitude d’un logiciel à être réutilisé, en tout ou en partie, dans de nouvelles applications.
Efficacité :
Utilisation optimales des ressources matérielles.

Portabilité :
facilité avec laquelle un logiciel peut être transféré sous différents environnements matériels et logiciels.

Vérifiabilité :
facilité de préparation des procédures de test.

Intégrité :
aptitude d’un logiciel à protéger son code et ses données contre des accès non autorisés.

Facilité d’emploi :
facilité d’apprentissage, d’utilisation, de préparation des données, d’interprétation des erreurs et de rattrapage en cas d’erreur d’utilisation.

Qu’est-ce qu’un modèle ?

Un modèle est une représentation abstraite et simplifiée (i.e. qui exclut certains détails), d’une entité (phénomène, processus, système, etc.) du monde réel en vue de le décrire, de l’expliquer ou de le prévoir. Modèle est synonyme de théorie, mais avec une connotation pratique : un modèle, c’est une théorie orientée vers l’action qu’elle doit servir.

Pourquoi modéliser ?

Modéliser un système avant sa réalisation permet de mieux comprendre le fonctionnement du système. C’est également un bon moyen de maîtriser sa complexité et d’assurer sa cohérence. Un modèle est un langage commun, précis, qui est connu par tous les membres de l’équipe et il est donc, à ce titre, un vecteur privilégié pour communiquer. Cette communication est essentielle pour aboutir à une compréhension commune aux différentes parties prenantes (notamment entre la maîtrise d’ouvrage et la maîtrise d’œuvre informatique) et précise d’un problème donné.

Dans le domaine de l’ingénierie du logiciel, le modèle permet de mieux répartir les tâches et d’automatiser certaines d’entre elles. C’est également un facteur de réduction des coûts et des délais. Par exemple, les plateformes de modélisation savent maintenant exploiter les modèles pour faire de la génération de code (au moins au niveau du squelette) voire des aller-retours entre le code et le modèle sans perte d’information. Le modèle est enfin indispensable pour assurer un bon niveau de qualité et une maintenance efficace. En effet, une fois mise en production, l’application va devoir être maintenue, probablement par une autre équipe et, qui plus est, pas nécessairement de la même société que celle ayant créée l’application.

Le choix du modèle a donc une influence capitale sur les solutions obtenues. Les systèmes non-triviaux sont mieux modélisés par un ensemble de modèles indépendants. Selon les modèles employés, la démarche de modélisation n’est pas la même.

De la programmation structurée à l’approche orientée objet

Méthodes fonctionnelles ou structurées:


Les méthodes fonctionnelles (également qualifiées de méthodes structurées) trouvent leur origine dans les langages procéduraux. Elles mettent en évidence les fonctions à assurer et proposent une approche hiérarchique descendante et modulaire.

Ces méthodes utilisent intensivement les raffinements successifs pour produire des spécifications dont l’essentielle est sous forme de notation graphique en diagrammes de flots de données. Le plus haut niveau représente l’ensemble du problème (sous forme d’activité, de données ou de processus, selon la méthode). Chaque niveau est ensuite décomposé en respectant les entrées/sorties du niveau supérieur. La décomposition se poursuit jusqu’à arriver à des composants maîtrisables (cf. figure 1.3).

L’approche fonctionnelle dissocie le problème de la représentation des données, du problème du traitement de ces données

. Sur la figure 1.3, les données du problème sont représentées sur la gauche. Des flèches transversalles matérialisent la manipulation de ces données par des sous-fonctions. Cet accès peut-être direct (c’est parfois le cas quand les données sont regroupées dans une base de données), ou peut être réalisé par le passage de paramètre depuis le programme principal.

La SADT (Structured Analysis Design Technique) est probablement la méthode d’analyse fonctionnelle et de gestion de projets la plus connue. Elle permet non seulement de décrire les tâches du projet et leurs interactions, mais aussi de décrire le système que le projet vise à étudier, créer ou modifier, en mettant notamment en évidence les parties qui constituent le système, la finalité et le fonctionnement de chacune, ainsi que les interfaces entre ces diverses parties. Le système ainsi modélisé n’est pas une simple collection d’éléments indépendants, mais une organisation structurée de ceux-ci dans une finalité précise.

En résumé, l’architecture du système est dictée par la réponse au problème (i.e. la fonction du système).


L’approche orientée objet:


L’approche orientée objet considère le logiciel comme une collection d’objets dissociés, identifiés et possédant des caractéristiques. Une caractéristique est soit un attribut (i.e. une donnée caractérisant l’état de l’objet), soit une entité comportementale de l’objet (i.e. une fonction). La fonctionnalité du logiciel émerge alors de l’interaction entre les différents objets qui le constituent. L’une des particularités de cette approche est qu’elle rapproche les données et leurs traitements associés au sein d’un unique objet.

Comme nous venons de le dire, un objet est caractérisé par plusieurs notions :

L’identité –
L’objet possède une identité, qui permet de le distinguer des autres objets, indépendamment de son état. On construit généralement cette identité grâce à un identifiant découlant naturellement du problème (par exemple un produit pourra être repéré par un code, une voiture par un numéro de série, etc.)
Les attributs –
Il s’agit des données caractérisant l’objet. Ce sont des variables stockant des informations sur l’état de l’objet.
Les méthodes –
Les méthodes d’un objet caractérisent son comportement, c’est-à-dire l’ensemble des actions (appelées opérations) que l’objet est à même de réaliser. Ces opérations permettent de faire réagir l’objet aux sollicitations extérieures (ou d’agir sur les autres objets). De plus, les opérations sont étroitement liées aux attributs, car leurs actions peuvent dépendre des valeurs des attributs, ou bien les modifier.

La difficulté de cette modélisation consiste à créer une représentation abstraite, sous forme d’objets, d’entités ayant une existence matérielle (chien, voitu

re, ampoule, personne, …) ou bien virtuelle (client, temps, …).

La Conception Orientée Objet (COO) est la méthode qui conduit à des architectures logicielles fondées sur les objets du système, plutôt que sur la fonction qu’il est censé réaliser.

En résumé, l’architecture du système est dictée par la structure du problème.


Concepts importants de l’approche objet:

Notion de classe

Tout d’abord, introduisons la notion de classe. Une classe est un type de données abstrait qui précise des caractéristiques (attributs et méthodes) communes à toute une famille d’objets et qui permet de créer (instancier) des objets possédant ces caractéristiques. Les autres concepts importants qu’il nous faut maintenant introduire sont l’encapsulation, l’héritage et l’agrégation.


Encapsulation

L’encapsulation consiste à masquer les détails d’implémentation d’un objet, en définissant une interface. L’interface est la vue externe d’un objet, elle définit les services accessibles (offerts) aux utilisateurs de l’objet.

L’encapsulation facilite l’évolution d’une application car elle stabilise l’utilisation des objets : on peut modifier l’implémentation des attributs d’un objet sans modifier son interface, et donc la façon dont l’objet est utilisé.

L’encapsulation garantit l’intégrité des données, car elle permet d’interdire, ou de restreindre, l’accès direct aux attributs des objets.

Héritage, Spécialisation, Généralisation et Polymorphisme

L’héritage est un mécanisme de transmission des caractéristiques d’une classe (ses attributs et méthodes) vers une sous-classe. Une classe peut être spécialisée en d’autres classes, afin d’y ajouter des caractéristiques spécifiques ou d’en adapter certaines. Plusieurs classes peuvent être généralisées en une classe qui les factorise, afin de regrouper les caractéristiques communes d’un ensemble de classes.

Ainsi, la spécialisation et la généralisation permettent de construire des hiérarchi

es de classes. L’héritage peut être simple ou multiple. L’héritage évite la duplication et encourage la réutilisation.

Le polymorphisme représente la faculté d’une méthode à pouvoir s’appliquer à des objets de classes différentes. Le polymorphisme augmente la généricité, et donc la qualité, du code.

Agrégation

Il s’agit d’une relation entre deux classes, spécifiant que les objets d’une classe sont des composants de l’autre classe. Une relation d’agrégation permet donc de définir des objets composés d’autres objets. L’agrégation permet donc d’assembler des objets de base, afin de construire des objets plus complexes.

UML en œuvre

UML 2.0 comporte treize types de diagrammes représentant autant de vues distinctes pour représenter des concepts particuliers du système d’information. Ils se répartissent en deux grands groupes :
Diagrammes structurels ou diagrammes statiques (UML Structure):
* diagramme de classes (Class diagram)
* diagramme d’objets (Object diagram)
* diagramme de composants (Component diagram)
* diagramme de déploiement (Deployment diagram)
* diagramme de paquetages (Package diagram)
* diagramme de structures composites (Composite structure
diagram)

Diagrammes comportementaux ou diagrammes dynamiques (UML Behavior)
* diagramme de cas d’utilisation (Use case diagram)
* diagramme d’activités (Activity diagram)
* diagramme d’états-transitions (State machine diagram)
* Diagrammes d’interaction (Interaction diagram)
diagramme de séquence (Sequence diagram)
diagramme de communication (Communication diagram)
diagramme global d’interaction (Interaction overview diagram)
diagramme de temps (Timing diagram)

Diagramme de cas d

’utilisation


Éléments des diagrammes de cas d’utilisation


Acteur:

Un acteur est l’idéalisation d’un rôle joué par une personne externe, un processus ou une chose qui interagit avec un système. Il se représente par un petit bonhomme avec son nom (i.e. son rôle) inscrit dessous.












Les raccoucis flex builder à connaitre.

Ctrl + Space : en mode "source", il permet d'afficher la liste des méthodes, des propriétés et des options.

Double clic sur un onglet: permet d'afficher la fenêtre de saisi sur un espace plus grand.

F1: en positionnant le curseur sur un élément du code (exemple: vbox), et en appuyant sur F1, une fenêtre d'aide s'affichera.

Ctrl + shift + c: mettre en commentaire un bout de code AS ou MXML. Pour cela, sélectionner un bout de code et appuyer sur Ctrl + shift + c .

Ctrl + shift + p: permet d'identifier un bout de code. Positionner le curseur sur une accolade { ouvrante et remarquer qu'une accolade } fermante se mettra en surbrillance.

Ctrl + o : afficher la liste des composant du fichier en cours d'édition.