Les bases des expressions régulières
Cet article propose une découverte des expressions régulières (ou rationnelles). Les expressions régulières emploient un langage puissant qui permet de retrouver des sous-chaînes dans des chaînes plus importantes en utilisant des motifs évolués.
Avant-propos
Avant tout, il est important d'indiquer que le terme Expressions régulières est une mauvaise traduction de l'anglais Regular Expressions. On devrait traduire ceci par "Expressions rationnelles". Mais les mauvaises habitudes sont parfois les plus tenaces et lorsque l'on parle d'expressions régulières, on sait généralement de quoi on parle. Vous trouverez également le terme regexici ou là, version plus courte de regular expression.
Les exemples donnés ici ne s'appliqueront pas à un langage particulier car seuls les motifs seront donnés (sans instruction de langages comme Perl, PHP, C, Java, ...)
Introduction
Les expressions régulières (ou regex) ont gagné leurs lettres de noblesse dans les années 70 avec l'utilitaire Unix grep. Cette utilitaire, toujours très utilisé, permet de rechercher les lignes de fichiers qui contiennent certains motifs. On retrouve une version très limitée des expressions régulières en utilisant les fameux jockers * ou ? lors du listage du contenu d'un répertoire du disque dur ou de son arborescence (avec dir, ls, ll, ...). On peut ainsi ne lister que certains fichiers ayant une certaine extension en ignorant ainsi tous les autres.
Mais les expressions régulières sont bien plus évoluées que cela puisque les motifs utilisés vont bien au dela du simple ? ou * car vous pouvez rechercher des chaînes de caractères particulières. Vous pouvez également, suivant les langages et les possibilités du moteur d'expressions régulières utilisé, décomposer une chaîne comme une adresse email pour en retrouver chaque élément (identifiant, hôte). [...Les bases des expressions régulières...]
Installation et utilisation de base de Subversion
Subversion est un système de contrôle des versions comme le célèbre CVS. Ce nouvel outil offre un grand nombre de fonctionnalités et d'innovations par rapport à son aîné. C'est ce que nous allons voir avec cet article.
Introduction
Subversion est un système de contrôle des versions OpenSource distribué sous une licence compatible Apache/BSD. Cet outil en développement depuis plus de 3 ans propose un grand nombre de nouveautés par rapport à son aîné vieillissant qu'est CVS. Pour CVS, il est temps de passer la main comme a pu le faire RCS en son temps.
Lexique et traductions
Comme tout lecteur n'a pas forcément la même expérience que l'autre avec les gestionnaires de versions, je vous propose un petit lexique des termes clés pour le sujet qui nous concerne.
- ressource: tout document (fichier, répertoire, lien, ...) enregistré dans le référentiel,
- référentiel: équivalent français pour repository. Certains préfèrent la traduction littérale "dépôt". Base de données conservant les différentes versions d'une ou plusieurs ressources,
- copie de travail ou copie locale: partie ou ensemble d'un référentiel copié sur le poste de la personne chargée d'y faire des modifications,
- commit: opération consistant à confirmer dans le référentiel les modifications apportées sur la copie de travail,
- révision: toute modification effectuée sur une des ressources du référentiel produit une révision. Un numéro unique est donné à chacune de ces modifications: r0, r1, r2, r3, ... Un numéro de révision est aussi affecté au référentiel lui même,
- tag/étiquette: marquage fait sur une révision afin d'y revenir plus tard. Le terme français ne me semble pas encore tout à fait accepté, j'utilise donc l'un ou l'autre.
== Fonctionnalités de Subversion == [...Installation et utilisation de base de Subversion...]
Découverte de Python, 2nd partie
Dans la première partie, Erwan Loisant nous proposait une courte présentation des bases du langage Python. Dans cette seconde partie, nous allons découvrir la programmation orientée objet avec Python.
Introduction
Bien que n'étant pas basé sur la programmation orientée objet, Python permet d'utiliser ces concepts. De plus, Python étant un langage adapté aux débutants, j'introduis ici les concepts objets. Vous pouvez aborder cet article sans connaître l'objet !
Mieux vaut tard que jamais, c'est après plusieurs mois que sort la deuxième partie de notre introduction à Python.
Dans l'article précédent nous avons découvert ensemble le langage Python. Si la programmation orientée objet n'est pas intrinsèque au langage, comme c'est le cas de Java, son utilisation permet de gagner en lisibilité, réutilisabilité et sécurité (par rapport aux éventuels bogues).
La programmation orientée objet, ou POO
Aujourd'hui, de nombreux langages sont des langages à objets : C++, Java, ObjectiveC et C# sont peut-être les principaux. La majeure partie des langages de script récents (tels que Python, bien sûr mais aussi Ruby) proposent également des notions objets.
Il faut noter qu'être "orienté objet" ne définit pas la nature du langage, mais plutôt une orientation, une facilité de développement. Ainsi, Smalltalk et C++ sont tous les deux parfaitement objets alors que le premier est un langage fonctionnel (issu de Lisp) et le deuxième un langage impératif (issu de Fortran).
Il s'agit avant tout de créer une meilleure représentation des données, et surtout rassembler données et traitements dans un même ensemble. Un autre aspect important de la programmation orienté est l'encapsulation des données, afin qu'à l'extérieur d'un module seul ce qui est nécessaire est visible.
=== Classe === [...Découverte de Python, 2nd partie...]
Découverte de Python, 1ère partie
Alors que PHP s'ancre de plus en plus dans le monde des développeurs, d'autres langages de script tiennent encore leur place. C'est le cas par exemple avec Python, langage créé à la fin des années 80. Erwan Loisant nous propose un premier article pour découvrir le langage Python.
Introduction
Vous avez sûrement entendu parler de ce langage populaire dans le milieu de l'Open Source. Si vous n'avez pas encore goûté à cette merveille, cette série d'articles est destinée à vous faire découvrir combien il est facile de faire des applications avancées dans un confort de développement inégalé.
Cet article est le premier d'une série destinée à faire de vous de vrais programmeurs Python.
Python... Pourquoi ?
Un langage de script
Python est un langage de script (au même titre que Perl, Lisp, Prolog et bien d'autres), ce qui signifie que les programmes ne sont pas compilés en exécutables mais interprétés, ligne par ligne, par un programme appelé justement l'interpréteur.
Les intérêts d'un langage interprété sont multiples. D'une part le cycle de développement est considérablement simplifié puisqu'il n'est pas nécessaire de compiler le programme, donc d'écrire un Makefile décrivant toutes les dépendances. Sous XEmacs par exemple, en mode Python, une simple pression de Ctrl-c-c permet d'interpréter le tampon (buffer) courant. Cependant, l'avantage décisif d'un langage interprété sur un langage compilé est qu'il permet de faire des opérations de bien plus haut niveau (nous découvrirons cela par la suite). De même, la gestion de la mémoire est bien plus automatisée. En contre-partie, les performances sont moindres.
Python et Perl
Perl est certainement le principal concurrent de Python. En effet, ces deux langages constituent à eux deux la majeure partie des développements en langage interprété.
Je propose donc une comparaison rapide : [...Découverte de Python, 1ère partie...]
Mise en bouche SDL
SDL est un framework multi-plateforme (pour Linux, Windows, MacOS, ...) permettant la réalisation d'applications multimédia. Cet article propose une courte présentation des différents composants de SDL.
Introduction
Cela fait déjà un petit moment que l'envie me titille de parler de la conception de jeux sous GNU/Linux et notamment des différentes bibliothèques utilisables à cet effet.
Et là, force est de constater que le moment est particulièrement bien choisi et cela pour deux raisons:
- premièrement, il vient d'y avoir un article sur ClanLib, l'autre bibliothèque en vogue.
- deuxièmement, car d'ici deux jours va sortir un jeu que j'ai développé avec SDL et qui vous permettra d'apprécier (en tout cas, j'espère) ce qu'on peut faire avec cette bibliothèque.
Tout d'abord, replaçons-nous dans le contexte...
SDL (Simple Directmedia Layer) est une bibliothèque pour le développement d'applications multimédia multi-plateformes. Placée sous licence LGPL, elle a été utilisée pour le développement de nombreuses applications, aussi bien libres que commerciales.
Son auteur Sam Lantinga est chef programmeur chez Loki Entertainment Software (société dévouée au portage de grands jeux sur Linux), où SDL est d'ailleurs, l'un des principaux outils de développement.
Notons au passage que Loki, a porté Civilization: Call To Power ou encore Myth II sous Linux.
Je vais maintenant essayer de définir les grandes parties de SDL, mais il ne s'agit là que d'une brève introduction et vous trouverez à la fin de l'article quelques liens si vous voulez approfondir la chose...
SDL peut être "coupé" en 4 parties:
- vidéo,
- événements,
- audio,
- divers.
La gestion vidéo
- passage en n'importe quel mode vidéo (8bpp ou plus) avec support logiciel si le mode vidéo n'est pas supporté par le matériel,
- possibilité d'écrire dans un framebuffer,
- créer des surfaces avec des couleurs ou un alpha blending choisi, [...Mise en bouche SDL...]
Installation et concepts de base de DirectX 9 SDK
Introduction
Avant l'arrivée de Microsoft Windows 95 et encore quelque temps après, la plupart des jeux vidéo développés pour l'univers PC l'étaient pour DOS. En effet, les versions de Windows disponibles avant 1995 (Windows 3.1 et 3.1 Workstation) ne fournissaient aucune moyen réel pour réaliser des jeux. Dès les premières versions de Windows il était possible de réaliser des jeux, mais comme il n'y avait pas d'API dédiée au multimédia les jeux réalisés dépassaient rarement le niveau technique d'une dame de pique.
Alors que les joueurs étaient habitués à un plus haut niveau technologique avec par exemple des jeux en 3D, il n'était pas concevable pour Microsoft de voir que le DOS pouvait mettre en péril la sécurité de son nouveau système d'exploitation en permettant des accès aux matériels sans aucune sécurité. Même si pendant encore quelque temps, Microsoft devait permettre aux joueurs d'utiliser leurs anciens jeux DOS avec Windows, ceci commença à changer à partir de 1997/1998.
En attendant, dès 1995, Microsoft proposa une nouvelle API avec son nouveau système d'exploitation fétiche: DirectX. Ce jeu de composants était pour la première fois en mesure d'effectuer des accès directs aux matériels présents sur le système PC depuis Windows. Que ce soit la carte vidéo, la carte son ou le réseau, il fallait que le nouveau Windows soit une plateforme crédible pour la réalisation de jeux vidéo.
DirectX n'est pas le seul kit de développement pour la réalisation d'applications multimédias comme les jeux. Il existe en effet, d'autres API mais aucune ne propose à ce jour un ensemble complet et homogène touchant aussi bien le graphisme, le son, le réseau, les joysticks, les volants, ... Malgré tout, si vous être intéressé par ces autres SDK, vous pouvez vous reportez aux différents liens ci-dessous: [...Installation et concepts de base de DirectX 9 SDK...]
Singletons et Multitons avec PHP 5
Les Design Patterns sont une solution de conception à©là©gante et robuste qui à©vite d'avoir à rà©inventer la roue. Avec ses à©volutions majeures telles que la visibilità© des membres ou les constructeurs/destructeurs unifià©s, PHP 5 autorise la conception par design pattern. Voyons comment mettre en Å“uvre les patterns simples que sont le singleton et le multiton.
Le singleton qu'est-ce que c'est ?
Le singleton est ce que l'on appelle un design pattern. Son but est d'éviter de multiplier les objets (et donc les ressources en mémoire) identiques. Autrement dit, il offre la possibilité d'utiliser un même (on parle souvent d'unicité) objet tout au long d'un programme, ce qui permet donc d'améliorer votre application.
La théorie
Voici à quoi ressemble un singleton en PHP5:
Avant de passer à une explication, essayer ce script avec la classe Singleton citée ci-dessus:
Et observez le résultat affiché dans votre navigateur. Comme vous pouvez le voir, la variable $var est en fait toujours la même, elle n'est nullement recrée à chaque appel de la méthode GetInstance.
Explications du fonctionnement
On utilise la variable statique $_instance qui va stocker l'objet que l'on souhaite construire et ensuite utiliser. Cet attribut est définit comme privé et static.
Comme dans toute classe que vous avez pu créer, il y a un constructeur, il a été définit avec un accès privé car on ne veut pas que l'objet soit recréé à chaque fois, mais qu'il soit appelé uniquement par la méthode GetInstance si besoin est. Un constructeur est par définition public mais recrée à chaque fois un objet en mémoire, ce que nous ne voulons pas dans le cas du Singleton ;). [...Singletons et Multitons avec PHP 5...]
Le clonage d'objets avec PHP 5
PHP évoluant énormément, son utilisation devrait petit à petit s'étendre à des domaines pour lesquels il n'avait pas été étudié à l'origine. C'est le cas par exemple avec PHP-GTK. Dans ce contexte de nouveaux besoins apparaissent comme par exemple la copie d'objets qui était inexistante jusqu'alors avec les autres versions de PHP.
A quoi sert le clonage d'objets
On entend par clonage d'objets l'action qui consiste à dupliquer intelligemment un objet. S'il y a copie, cela signifie que chacune des références des attributs de l'objet original sera elle aussi recopiée ce qui fait que le clone et l'original partageront certains espaces de la mémoire. Le clonage doit permettre de modifier cela afin que chacun des attributs du clone utilise sa propre instance.
Pas de clonage avec PHP 4
Le titre de cette section résume tout puisqu'en effet, il n'est pas possible avec PHP version 4 (et les versions antérieures) d'effectuer un clonage d'objet. Une chose possible, simple et rapide, est de faire une référence à un autre objet ce qui est très loin du clonage. Il est également possible de copier un objet mais le processus ne fera que copier les membres de l'objet original sans introduire de personnalisation automatisée.
Le clonage dans PHP 5
PHP 5 introduit le nouveau mot clé clone. Celui-ci fonctionne comme le mot clé new mais l'instance retournée est une référence sur une copie. Voici un exemple simple d'utilisation de cloneavec PHP 5:
produit:
Comme nous le voyons avec ces 2 personnes, Jeanest le clone de Paul: elles ont toutes les deux les mêmes caractéristiques (un nom et un prénom) mais ce sont 2 êtres indépendants. Ceci est démontré en modifiant le prénom du clone ce qui ne modifie pas le prénom de l'original. [...Le clonage d'objets avec PHP 5...]
Interface SWT selon le modèle MVC
Utiliser le paradigme MVC pour développer une application permet de mieux organiser la gestion des évènements et de mutualiser son code. Bref que du bonheur.
Introduction
SWT est une librairie Java proposée par le projet OpenSource Eclipse pour développer des applications avec des interfaces graphiques riches. Le site officiel de ce toolkit est à l'adresse: http://www.eclipse.org/swt/.
MVC les bases
MVC ou Model/View/Controller.
Le paradigme MVC est un schéma de programmation qui propose de séparer une application en 3 parties:
- Le modèle, qui contient la logique et l'état de l'application.
- La vue, qui représente l'interface utilisateur.
- Le contrôleur, qui gère la synchronisation entre la vue et le modèle. Il réagit aux actions de l'utilisateur en effectuant les actions nécessaires sur le modèle. Ce dernier notifie les vues lorsqu'il a été modifié.
Exemple de séquence d'un traitement :
- Le contrôleur et le modèle sont instanciés,
- Les vues sont instanciées et s'abonnent au modèle pour être à l'écoute des changements,
- L'utilisateur manipule l'interface homme/machine. Un évènement est envoyé. Cet évènement est récupéré par le contrôleur,
- Le contrôleur effectue l'action demandée par l'utilisateur en appelant les méthodes nécessaires sur le modèle,
- Le modèle étant modifié, il envoie une notification aux différentes vues du changement effectué,
- Chaque vue interroge le modèle afin de connaitre son état,
- L'utilisateur voit le résultat de son action.
Les fonctions de l'application
L'application que nous allons mettre en oeuvre est composée d'une fenêtre et d'un icône qui apparait dans la barre des tâches. [...Interface SWT selon le modèle MVC...]
Comment gérer correctement les magic-quotes
Les magic_quotes sont une fonctionnalité de PHP qui risque d'introduire des failles de sécurité importantes dans vos scripts si elles sont mal utilisées. Guillaume BOUCHARD propose une approche pour utiliser efficacement les magic_quotes.
Introduction
Les magic-quotes sont deux options de PHP accessibles dans le php.ini et qui gèrent les chaines de caractères. Mais leur utilisation devient complètement anarchique et même dangereuse quand l'on ne sait pas s'en servir.
Présentation des options
L'option magic_quotes_runtime permet, si elle est activée, d'échapper tous les caractères spéciaux des chaines provenant de fichiers ou de base de données.
Exemple:
L'option magic_quotes_gpc permet, si elle est activée, d'échapper tous les caractères spéciaux des chaînes provenant de Get, Post ou Cookie.
Exemple:
Le problème des 'injections SQL'
Les injections SQL c'est la possibilité d'exécuter une requête SQL différente de celle prévue par le programmeur.
Exemple:
| Note |
| Le SELECT * n'est pas recommandé. Et pour une sécurité optimale, l'on optera pour un password crypté en MD5. |
Cette requête semble inoffensive en utilisation normale :
La requête est donc SELECT * FROM user_tbl WHERE login = 'guillaume' AND password = 'sauce_tomate'.
Maintenant, modifions un peu nos valeurs :
La requête est donc SELECT * FROM user_tbl WHERE login = 'guillaume' AND password = OR password LIKE '%' et la ligne est quand même sélectionnée alors que le password n'est pas correct. Tout ceci aurait pu être évité si les quotes (') avaient été échappées.
Utilisation des magic_quotes
Nous avons donc vu qu'il était nécessaire d'échapper toutes chaînes de caractères en entrée de base de données et que les magic_quotes le font gentiment pour nous quand elles sont à on. Mais cela pose quand même des problèmes. [...Comment gérer correctement les magic-quotes...]
Fin du flux RSS...
Flux RSS
Rubrique Flux RSS Développement - Nb abonnés : 18
| Adresse du flux RSS à copier/coller |



tout programmer