17 mai 2013

[Howto] A quoi servent les expressions régulières ?

Je ne vais pas faire un cours sur le fonctionnement des expressions régulières (RegEx ou RegExp), mais plutôt vous vanter ce que l'on peut faire avec.

J'ai recensé plusieurs usages que je peux en faire, mais il y en a plein d'autres.

On peut résumer la fonction d'une RegEx en deux choses :
- Vérifier si une chaîne correspond à un motif (pattern).
- Vérifier si une chaîne correspond à un motif, et si oui extraire une partie de cette chaîne.

Rappelons que les RegEx sont implémentées nativement dans beaucoup de langages, comme C#, PHP, JavaScript et même PowerShell avec -match (et d'autres) et y sont facile à utiliser. Néanmoins l'usage intensif de RegEx peut pénaliser les performances de votre application !

1) Rechercher dans un fichier texte avec Notepad+
Par exemple vous rechercher des adresses IPv4 dans un fichier.
Motif de la RegEx: [0-2]?[0-9]?[0-9]\.[0-2]?[0-9]?[0-9]\.[0-2]?[0-9]?[0-9]\.[0-2]?[0-9]?[0-9]
Avec ceci, vous trouverez toute de suite toutes les adresses IPv4 dans du texte. Notez cependant qu'il existe des expressions régulières plus ou moins précises pour faire la même chose. Celle présenter ici est assez simple, par exemple elle considérera 299.299.299.299 comme une adresse IP !

2) Vérifier si un champ est bien saisi dans votre formulair
Par exemple vérifier si le champ e-mail est bien une adresse e-mail, avec jQuery par exemple.
Motif de la RegEx: [-a-zA-Z0-9.]+@[-a-zA-Z0-9.]+\.[a-zA-Z]{2,5}
Encore une fois, ce motif peut être amélioré, ce n'est pas le but ici. Avec cette vérification à la validation du formulaire, vous vous assurez de la bonne saisie de l'adresse e-mail !

3) Manipuler un fichier texte avec Notepad++
Par exemple nous avons un fichier avec un séparateur ; et nous souhaitons supprimer la première colonne.
Motif de la RegEx: ^[^;]+(.+)$
Motif du remplacement : \1
Ceci vous permettra de récupérer, pour chaque ligne, le contenu de la ligne après le premier ;.
On aurait pu également le faire avec Excel en renommant notre fichier en CSV. Mais nous aurions pu vouloir faire quelque chose qu'Excel ne sait pas faire.

4) Extraire une chaîne dans un fichier HTML
Vous pouvez toujours passer par une librairie qui parsera le fichier dans un XMLDocument, et ensuite un peu de XPath pour rechercher le bon Node. C'est d'ailleurs la méthode la plus fiable, mais un peu lourde pour un usage occasionnel.
Par exemple nous voulons récupérer la valeur à l'intérieur d'une balise HTML.
Motif de la RegEx: <div>([^<]+)</div>
Nous pouvons ensuite récupérer facilement ce qui a été capturé par les parenthèses.

5) Dans une requête SQL
Par exemple, MySQL implémente la fonction REGEX qui permet de vérifier si une colonne de notre table correspond à un motif.
Par exemple nous une table commentaire et nous voulons récupérer tous les commentaires qui contiennent des balises HTML.
Motif de la RegEx: <[a-zA-Z]+( .*)?\/?>(.*<\/[a-zA-Z]+>)?
Ce motif permet de rechercher la présence d'une balise HTML. Nous pouvons l'utiliser de cette manière : SELECT * FROM commentaire WHERE body REGEXP '<[a-zA-Z]+( .*)?\/?>(.*<\/[a-zA-Z]+>)?';

6) Parser du langage de script
Les parseurs (et autres compilateurs) ne sont pas fabriqués avec des expressions régulières mais avec des lexèmes de grammaire de bas niveau et des automates, typiquement en Lex/Yacc ou équivalents.
Mais on peut, à haut niveau, utiliser des RegEx qui feront un travail tout aussi remarquable et plus facile d'accès aux néophytes.
Par exemple pour du BBCode sur les forums PHP, la balise [IMG].
Motif de la RegEx: \[IMG\]((https?://)?[-a-zA-Z0-9.]+\.[a-zA-Z]{2,5}(\/.*)?)\[\/IMG\]
Ce motif, améliorable, permettra de capturer l'URL de l'image et donc ensuite de générer la balise HTML <img>. Il faut cependant appliquer un attribut de répétitivité pour que la balise soit recherchée à l'infinie, car l'utilisateur sera susceptible de mettre plusieurs [IMG] dans la même ligne.

7) Rechercher des mots même mal orthographiés
Plutôt que de générer un dictionnaire de toutes les possibilités d'écrire un mot sous toutes ses formes phonétiques, on peut utiliser des motifs spécialement conçus pour rechercher ces mots.
Par exemple, pour la recherche d'insulte sur un forum ou dans un chat.
Motif de la RegEx: con+( |ar|as|ace)
Ce motif permet de remplacer un dictionnaire qui contiendrait 4 insultes, même si l'utilisateur essaie de mal orthographier le mot pour passer outre les filtres de détection, en rajoutant ou ne mettant qu'un seul n par exemple.
On peut ensuite améliorer le même motif comme ceci : c+o+n+( |a+r|a+s|a+c+e)
Ceci permettra de détecter les écritures à rallonges comme cccccooooooonnnnnnnnnaaaaarrrdddd.

8) Modifier en masse les Tag IDv3 de nos MP3
Par exemple avec le logiciel gratuit MP3Tag, on peut créer un Action rapide qui remplace le nom d'un fichier MP3 en utilisant une expression régulière.
Le principe identique existe pour le logiciel Advenced Renamer.


2 avr. 2013

[Snippet] Exécuter une requête SQL sans prise en compte des accents

Si vous essayez de faire une requête SQL qui utilise une colonne de votre table qui peut contenir des accents, mais vous souhaitez les résultats avec ou sans accents :

Il faut d'une part, lors de la création de votre requête, enlever tous les accents de la valeur recherchée.
D'autre part, il faut indiquer à la requête SQL de faire pareil pour les données de la table.
Note : Si la colonne concernée par la recherche est une clé primaire ou un index, alors le SGBD prend généralement en charge la recherche avec ou sans accents naturellement.

La requête va comparer, pour chaque ligne de la table, si la valeur de la ligne est égale à la valeur recherchée. Il faut donc que, pour chaque valeur, remplacer ses accents par des caractères non accentués.

Il est possible de faire des REPLACE() successifs, mais il y a une méthode bien plus pratique : TRANSLATE().
Attention : TRANSLATE() n'existe que pour certains SGBD, vous pouvez créer une fonction pour contourner le problème avec MySQL.
Voici le script de contournement :

# Changement du charset pour protéger CHAR_LENGTH
SET NAMES utf8;

DELIMITER //

# Création de la function translate

CREATE FUNCTION translate(V_string VARCHAR(255), V_from VARCHAR(255), V_to VARCHAR(255))
RETURNS VARCHAR(255) DETERMINISTIC
BEGIN
 DECLARE i INT;
 SET i = CHAR_LENGTH(V_from);

 WHILE i > 0 DO
  SET V_string = REPLACE(V_string, SUBSTR(V_from, i, 1), SUBSTR(V_to, i, 1));
  SET i = i - 1;
 END WHILE;

 RETURN V_string;
END
//

# Restauration du délimiteur d'origine
DELIMITER ;

Ce code est tiré et corrigé de cet article.

TRANSLATE va permettre de donner deux listes de caractères : chaque caractère (de la première liste) qui sera trouvé dans la valeur, sera remplacé par l'autre caractère (celui de la seconde liste situé à la même position).

Exemple :
TRANSLATE("coucou","u","i") // donnera coicoi.

Donc exemple plus intéressant :
TRANSLATE("Cédric","é","e") // donnera Cedric.

Exemple concret :
SELECT * FROM maTable WHERE TRANSLATE(prenom,'ÁÀÂÄÃÅÇÉÈÊËÍÏÎÌÑÓÒÔÖÕÚÙÛÜÝáàâäãåçéèêëíìîïñóòôöõúùûüýÿ', 'AAAAAACEEEEIIIINOOOOOUUUUYaaaaaaceeeeiiiinooooouuuuyy') = 'Cédric';


N'oubliez pas un petit LOWER (ou UPPER) pour ignorer la casse.

29 mars 2013

[howto] Comment gérer sa productivité avec rescuetime.com

Je voudrais vous parler d'un logiciel que j'apprécie beaucoup : RescueTime.

Il s'agit d'un programme que l'on installe sur un ordinateur. Il reste discret mais pourtant trace toutes vos actions, notamment les processus lancés, les fenêtres actives et les pages des sites internet où l'on s'attarde.

Son but est mémoriser et de compter le temps passé sur chaque fenêtres pour ensuite, avec un jeu de pondération, calculer votre productivité globale.

Chaque fenêtre/page internet est associé à une catégorie, et chaque catégorie à un taux de pondération de -2 à +2 (-2 très distrayant et +2 très productif).

Grâce à cela, tous les weekends vous recevez par e-mail un résumé de votre productivité de la semaine (que vous pouvez consulter plus particulièrement sur le site).

Exemple de Dashboard

Le Dashboard résume, sur une vue hebdomadaire, la durée passée sur l'ordinateur (hors inactivité), votre productivité exprimée en pourcentage, un graphique qui vous indique la répartition de la productivité tout au long de la semaine, ainsi que des statistiques par catégories par exemple.

RescueTime possède une large base de données d'association de fenêtres/sites vers des catégories. Évidemment, si vous utilisez un logiciel maison (spécifique à votre entreprise) qui n'est pas reconnu, vous pourrez l'associer à la catégorie de votre choix, ou en créer une pour l'occasion.
Selon le profil de votre emploi, vous pouvez ensuite modifier la pondération de vos catégories : par exemple un Community Manager mettra +2 à Facebook (au lieu de -2), un commercial mettra +2 à Amazon... Ceci permettra d'avoir une productivité au plus juste de votre poste.

Vous pouvez également connaître précisément le temps passé par tâches, par exemple la durée passée sur le développement d'un logiciel et le temps passé à répondre aux mails de l'entreprise ! Ceci permet également de gérer plus facilement la facturation en interne ou entre les services.

Un résumé de votre efficacité est calculé, vous indiquant à quelles périodes vous êtes le plus ou le moins efficace au travail, et vous compare aux autres membres de RescueTime.

Calcule votre efficacité et vous compare aux autres membres du site !

La version payante est très intéressante pour les patrons qui veulent s'assurer que leurs employés ne passent pas trop de temps à ne pas travailler. La Team Edition permet de gérer plusieurs ordinateurs (employés), ainsi que quelques options de détails (nom des documents Word/PDF ouverts, nom des contacts Skype...), ou les alertes en temps réel.

Dans cette période de crise actuelle où les mots productivité, efficacité sont les maîtres mots, il n'y a plus de raison à céder à la version gratuite de RescueTime !

27 mars 2013

[Astuce] Réparer l'association de fichier EXE sous Windows

Il peut arriver, dans certains cas inexpliqués que les applications ne se lancent plus du tout lorsqu'on double-clic sur l'icône, pourtant les dossiers s'ouvrent correctement.

Il s'agit d'un problème d'association de fichier, particulièrement celui des programmes exécutable (*.exe). Il n'est normalement pas possible de casser cette association, et c'est pour ça qu'il est également très difficile de la restaurer.

Vous obtenez ce message d'erreur :
Windows can't open this file
Message affiché lorsque Windows a perdu l'association des exécutables

Ce problème touchait plus particulièrement Vista bien que XP et Windows 7 ne soient pas immunisés. D'autres extensions peuvent être concernées, comme .BAT, .COM et .LNK.

Il existe plusieurs solutions pour réparer l'association des exécutables :

- exécuter ce script de registre (pour XP et Vista)
- exécuter ce script bat (pour XP ou Windows Vista/7)
- exécuter ce programme COM (pour XP et Windows Vista/7)
- exécuter cet écran de veille (pour XP et Windows Vista/7)
- installer ce fixit MSI (pour XP/Vista/7)
- installer cet INF (pour XP)
- exécuter ce programme (ne répare pas les exe!)

Certaines solutions requièrent un redémarrage pour être prises en compte. Pensez a exécuter ces scripts en tant qu'administrateur.

7 janv. 2013

[info] Différence entre Veille prolongée et Veille hybride ?

La veille est un état d'économie d'énergie qui permet au PC de revenir rapidement en état de marche normale pour continuer à travailler (généralement en quelques secondes). Lors de la mise en veille, l'ordinateur interrompt ce qu'il est en train de faire et se tient prêt a reprendre le travail quand vous le voulez. Le disque dur, le microprocesseur, mais la mémoire reste alimentée.


La veille prolongée est un état d'économie d'énergie conçu en premier lieu pour les ordinateurs portables. Alors que la veille conserve en mémoire votre travail et vos paramètres en consommant un peu d'énergie, la veille prolongée écrit le contenu de la mémoire sur le disque dur et éteint complètement l'ordinateur. De tous les modes d'économie d'énergie, c'est la veille prolongée qui consomme le moins d'énergie mais requiert plus de temps pour entrer et sortir de veille. Sur un ordinateur portable, utilisez la veille prolongée seulement si vous savez que vous n'utiliserez pas votre ordinateur très prochainement, ou dont vous n'aurez pas la possibilité de recharger sa batterie.

La veille hybride a été conçue en premier lieu pour les ordinateurs de bureau. C'est la combinaison de la veille et de la veille prolongée : il garde en mémoire et écrit sur le disque dur le contenu de la mémoire, et met l'ordinateur dans un état de faible consommation énergétique (autant qu'en veille) et peut revenir rapidement à la normale. Même en cas de coupure d'électricité, le contenu de la mémoire est perdue mais Windows peut récupérer votre travail depuis le disque dur. Sur Windows 7, quand la veille hybride est activée, mettre son ordinateur en veille le fera en veille hybride