Toute l'actualité francophone sur PHP en un seul flux

Juillet 2008 – PHP Index: Symfony 1.1

Après plusieurs mois de développement, la version 1.1 du framework PHP Symfony est désormais officiellement disponible.

Parmi les nouveautés et évolutions nous trouvons entre autres :

  • Une nouvelle architecture de Symfony plus configurable et découplée pour utiliser ou remplacer des parties du framework plus facilement.
  • Un nouveau framework de formulaire orienté-object facilitant leur création.
  • Un nouveau système de tâches pour les scripts batch et les utilitaires en ligne de commande.
  • Un nouveau parser YAML avec un reporting des erreurs plus détaillé.
  • Un nouveau gestionnaire de plugins compatible avec l'API standard de PEAR et qui gère désormais les dépendances.
  • L'ORM Propel 1.2 est désormais intégré en temps que plugin pour faciliter le passage à un autre ORM (comme Doctrine ou Propel 1.3).
  • Un plugin sfCompat10Plugin facilite le passage d'un projet basé sur la branche 1.0 de Symfony vers la branche 1.1.
  • Une mise en cache du système de routing pour augmenter les performances.

A noter également des améliorations de l'internalisation, des outils de test et une refonte totale de l'utilitaire en ligne de commande.

Pour en savoir plus :
The wait is over: symfony 1.1 released
Documentation d'installation

Juillet 2008 – tigrou/pwet.fr: La recherche universelle de Google même dans le code

Petite découverte aujourd'hui en cherchant un peu par hasard mysql_num_rows dans Google, puisqu'on peut y voir un petit extrait de code PHP d'une application nommée eNdonesia (d'ailleurs le fait d'avoir des mysql_query() et mysql_num_rows() perdus au milieu de HTML ne donne pas très envie mais c'est une autre histoire...).

Je savais que la recherche universelle était en place depuis un moment, mais c'est la première fois que je vois des morceaux de Google Code Search au milieu des résultats et pourtant des recherches portant sur du code j'en fais régulièrement. En regardant les autres moteurs sur la même recherche, il est amusant de constater que Yahoo! remonte en dixième place une page avec le célèbre warning "Warning: mysql_num_rows(): supplied argument is not a valid MySQL result" qui est certes répèter un bon nombre de fois. Les résultats sur Live sont encore plus surprenants, puisque ce dernier sort une page du même genre en neuvième position mais chose étonnante, il faut aller en troisième page pour trouver une page de PHP.net et encore ce n'est pas la bonne ! Google a semble t il encore un bonne longueur d'avance !

Juillet 2008 – PHP Index: Symfony 1.2 planifié pour octobre 2008

Après la sortie récente de Symfony 1.1, Fabien Potencier décrit la feuille de route pour Symfony 1.2, dont la sortie est prévue en octobre 2008.

Les nouvelles fonctionnalités prévues sont les suivantes :

  • Réécriture complète de l'admin generator, afin de profiter des nouvelles fonctionnalités pour les formulaires et en vue de la rendre plus souple et personnalisable.
  • Plugins Propel et Doctrine.
  • Filtrage natif des données.
  • Intégration de la librairie Swift (solution d'envoi d'email).
  • Création d'un plugin pour les éléments javascript, en vue de laisser le choix à l'utilisateur pour l'éventuel framework javascript à employer.
  • Discussion ouverte sur les fonctionnalités nécessaires pour un "deployement task" adéquat.

Il annonce un nouveau management des sorties de Symfony dont la date de sortie sera désormais fixée à l'avance. Notamment celle de la version 1.2 est d'ores et déjà prévue pour octobre 2008, quatre mois selon après la version 1.1. Pour permettre ce type de management, le développement de chaque nouvel élément sera rendu indépendant des autres et attribué à un membre spécifique de l'équipe.

Il est à noter que seul l'ajout du point sur l'admin generator est considéré comme "must-have" pour la version 1.2, les autres seront ajoutés s'ils sont prêts à la date échue.

Pour en savoir plus :

Juillet 2008 – Arnaud Limbourg: Lightroom - photos supprimées du catalogue mais pas du disque

Lors du traitement de photos avec Lightroom l'une des étapes essentielles est de supprimer des photos du catalogue lors du tri. Il arrive que la photo soit retirée du catalogue mais se trouve toujours sur le disque. La place disque ainsi perdue devient non-négligeable.

N'ayant pas trouvé de solution sur la toile j'ai écrit un script [PHP][php] qui parcourt récursivement un répertoire et regarde si les fichiers photos existe dans le catalogue de lightroom.

[php]: http://www.php.net Attention : je ne prends aucune responsabilité quand à l'utilisation que vous pourrez en faire, une mauvaise utilisation peut détruire votre catalogue, faites une sauvegarde au préalable.

Limitations : ce script n'interagi qu'avec un catalogue à la fois, si vous avez plusieurs catalogues référençant les mêmes photos sur le disque ce script ne vous sera pas d'une grande aide

Lightroom utilise une base de données SQLite il est donc possible de faire des requêtes sur cette base. Le schéma n'est pas publié par Adobe, si votre catalogue est corrompu ne venez pas vous plaindre :-)

Le script est non destructif, il affiche les informations sur les fichiers et les commandes que vous pouvez executer pour les supprimer.

Exemple d'utilisation (sur OS X):

php find_deleted_photos_lr.php ~/Pictures ~/Pictures/Lightroom/Lightroom\ Catalog.lrcat

Le script : http://www.limbourg.com/arnaud/code/find_deleted_photos_lr.php.txt

Les extensions considérées comme des photos se trouvent en début de script, modifiez les à votre guise.

ps: le script n'est pas spécialement beau. Denombreux bouts de code des examples de SPL (la librairie standard PHP) sont utilisés

Juillet 2008 – Arnaud Limbourg: Lightroom - photos supprimées du catalogue mais pas du disque

Lors du traitement de photos avec Lightroom l'une des étapes essentielles est de supprimer des photos du catalogue lors du tri. Il arrive que la photo soit retirée du catalogue mais se trouve toujours sur le disque. La place disque ainsi perdue devient non-négligeable.

N'ayant pas trouvé de solution sur la toile j'ai écrit un script [PHP][php] qui parcourt récursivement un répertoire et regarde si les fichiers photos existe dans le catalogue de lightroom.

[php]: http://www.php.net Attention : je ne prends aucune responsabilité quand à l'utilisation que vous pourrez en faire, une mauvaise utilisation peut détruire votre catalogue, faites une sauvegarde au préalable.

Limitations : ce script n'interagi qu'avec un catalogue à la fois, si vous avez plusieurs catalogues référençant les mêmes photos sur le disque ce script ne vous sera pas d'une grande aide

Lightroom utilise une base de données SQLite il est donc possible de faire des requêtes sur cette base. Le schéma n'est pas publié par Adobe, si votre catalogue est corrompu ne venez pas vous plaindre :-)

Le script est non destructif, il affiche les informations sur les fichiers et les commandes que vous pouvez executer pour les supprimer.

Exemple d'utilisation (sur OS X):

php find_deleted_photos_lr.php ~/Pictures ~/Pictures/Lightroom/Lightroom\ Catalog.lrcat

Le script : http://www.limbourg.com/arnaud/code/find_deleted_photos_lr.php.txt

Les extensions considérées comme des photos se trouvent en début de script, modifiez les à votre guise.

ps: le script n'est pas spécialement beau. Denombreux bouts de code des examples de SPL (la librairie standard PHP) sont utilisés

Juillet 2008 – PHP Index: Test des performances de CMS : Typo3, Joomla!, and Drupal

Sur son blog, Alex Shapovalov propose deux séries de tests comparatifs des CMS Typo3, Joomla!, and Drupal.

En mai 2008, une première série de tests lui avait permis de conclure que Drupal était notablement plus rapide que les autres CMS testés.
De nombreuses personnes lui avaient alors reproché de ne pas avoir fait le nécessaire pour optimiser le résultat de chacun des CMS testé (cache, environnement, ...). Aujourd'hui il propose les résultats d'une nouvelle série de tests en ayant fait les optimisations demandées. Il en conclut que Drupal tire encore une fois son épingle du jeu.

Affaire à suivre. Il ne serait guère étonnant que d'autres séries de tests voient le jour dans les prochains mois.

Pour en savoir plus :

Juillet 2008 – Hello Design: VIP 2008 : Conference PHP

 Après quelques années d'absence, la 5ème édition de la VIP aura lieu du 11 au 13 juillet 2008 aux alentours de Lyon.

Cette rencontre sera le lieu de prédilection de la création numérique. La demoparty  ou aussi appelé coding party comporte différents concours informatiques dans lesquels les créateurs peuvent s'affronter, s'évaluer, en laissant une grande part de liberté dans la création et l'imagination.

Les principaux sponsors de ce rendez-vous sont :

 Cette année verra apparaitre une série de conférences accessible pour les visiteurs et les participants, dont une des conférences sera sous le thème de "Qu'est ce PHP ?" le Samedi 12 juillet a 14h00, présente par moi même (christophe Villeneuve)

 

Pour plus d'informations sur la VIP : cliquez ici


 

 

Juillet 2008 – Apprendre-PHP.com: Générer une liste déroulante HTML de nombres

Cette petite fonction permet de générer une liste déroulante de nombres en une seule ligne de code. Il suffit de lui fournir quelques paramètres obligatoires tels que son nom, la valeur de départ, la valeur d'arrivée, la valeur par défaut et quelques autres données facultatives pour obtenir une belle liste déroulante sexy.

Juillet 2008 – Apprendre-PHP.com: Introduction aux Cross Site Request Forgeries ou Sea Surf

Vous connaissez peut-être les attaques XSS qui consistent à injecter du code malveillant, et où l'utilisateur est directement victime de l'action du code (boîtes de dialogue, redirections, vols de cookies, etc.) ? Eh bien, ce tutoriel va vous apprendre un autre type de faille radicalement opposé à celui-ci. Il s'agit bien entendu des attaques CSRF.

Juillet 2008 – PHP News: Rsync avec un client Windows en 3 commandes

rsync

Une stratégie de backup complète d’un site web est efficace tant que la taille de ce site web reste raisonnable. Avec un site de plusieurs dizaines de gigaoctets, il devient en effet plus compliqué de rapatrier chez soi la backup du site.

Je ne parle ici que de backup des fichiers propres au site (images uploadées par exemple), pas de sa base de donnée qui doit faire l’objet d’une stratégie de sauvegarde plus poussée.

Jusqu’à présent, en faisant “avec les moyens du bord”, je procédais de la façon suivante pour posséder une sauvegarde perso d’un site web:

  • Une tâche cron tourne chaque X jours la nuit et met tout le site dans une archive tar.gz
  • Je télécharge cette archive sur mon PC personnel peu après

Mais voilà, maintenant que le site en question pèse dans sa totalité une vingtaine de giga, même avec une connexion symétrique à 100Mb/s, c’est laborieux. Il faut donc trouver un autre moyen. Ici, la solution s’appelle rsync et permet de posséder une copie du site identique à l’instant de la synchronisation.

Maintenant pour posséder une sauvegarde perso d’un site, je n’ai plus qu’à lancer manuellement ma commande rsync sur mon PC quand celui-ci est allumé afin de rapatrier les nouveaux fichiers crées ou supprimés sur le serveur, et sans devoir télécharger tout le reste qui n’a pas changé. Mon PC étant sous Windows, il serait dommage de se priver de rsync.

Voiçi en 3 commandes comment avoir un mirroir de votre site avec une connexion sécurisée et un PC où effectuer la sauvegarde sous Windows

Prérequis :

Sur votre serveur, en root :

1. #useradd -g www -s /bin/bash rsync

2. #passwd rsync

Sous Windows, dans le dossier \bin de cwRsync

3. rsync –verbose –progress –stats –compress –recursive –delete -e “ssh.exe -p 8000″ rsync@monserver.fr:/home/server/htdocs/mondossier “/cygdrive/f/Backup/rsync”

Note : il s’agit de double tiret et non de tiret simple

Explications :

Etape 1 :

On crée un utilisateur sur le serveur possédant un vrai shell (pas de /bin/false car rsync doit pouvoir exécuter des commandes shell). Cet utilisateur doit posséder le droit de lecture sur votre répertoire à backuper (par exemple htdocs/), ainsi que ses sous-répertoires. Ici je le place dans les users de mon groupe www qui possèdent le droit de parcourir mon répertoire htdocs et ses enfants.

Etape 2 :

Un password fort à mettre en place pour l’utilisateur. Cet utilisateur aura le pouvoir de se connecter en SSH sur votre serveur et de parcourir vos fichiers. Ici pas de mis en place d’une authentification par clés SSH, nous utiliserons une connexion manuelle avec un mot de passe à entrer manuellement, car ici c’est à vous de lancer le processus de synchronisation quand vous le souhaitez. Pour un tutorial complet sur comment mettre en place un rsync automatique avec utilisations de clés SSH, rendez-vous sur cet excellent tutotial publié sur Howtoforge

Etape 3 :

cwRsync est une version packagée pour windows de rsync et ssh grâce à cygwin. Il vous fournit une fois installé les binaires rsync.exe et ssh.exe dans son dossier \bin.

Voici les arguments utilisés (rsync –help pour toutes les options) :

–verbose

Détails de l’exécution du programme

–progress

Voir l’avancement du téléchargement pendant les transferts

–stats

Des stats sur les transferts (vitesse de transfert)

–compress

Compression des fichiers transférés

–recursive

Parcourir les sous répertoires du dossier à backuper

–delete

Supprimer aussi les fichiers sauvegardés si ils n’existent plus sur le serveur

-e “ssh.exe -p 8000″ ou -e “ssh -p 8000″ ou -e “ssh”

Commande du shell distant à utiliser (ici ssh.exe dans le même répertoire que rsync.exe), suivi des arguments optionnels à lui passer, ici connexion sur le port distant 8000 et pas le traditionnel 22 (le serveur cible n’acceptant pas les connexions SSH sur le port 22 mais sur le 8000)

rsync@monserver.fr:/home/server/htdocs/mondossier

L’utilisateur ssh est ici rsync, on se connecte au server cible server.fr (ou une IP) et on demande de commencer la sauvegarde en démarrant depuis le dossier /home/server/htdocs/mondossier. Extrait du manpage :

“Le transport par shell distant est utilisé à chaque fois que le chemin source ou destination contient un séparateur «:» après la spécification de l’hôte. Le contact direct avec un démon rsync est utilisé lorsque le chemin source ou destination contient un séparateur «::» après la spécification de l’hôte, OU lorsqu’une URL rsync:// est spécifiée”

“/cygdrive/f/Backup/rsync”

C’est la synthaxe à utiliser pour copier les fichiers sur le disque dur F: et dans le dossier Backup/rsync. On ne peut pas indiquer un chemin windows directement comme ‘F:/Backup …’, il faut passer par l’abstraction des disque cygwin (/cygdrive/LETTRE_LECTEUR/VOTRE/DOSSIER)

Une fois la commande lancée, une connexion SSH va se mettre en place, le mot de passe donnée en #2 vous sera demandé et le processus de synchro sera lancé.

Enjoy ;)

Juillet 2008 – z-f.fr: Roadmap mise à jour

Forum: Brèves
Auteur: philippe
Écrit le: Tue, 08 Jul 2008 13:34:56 +0200
Dernier message: Tue, 08 Jul 2008 23:23:38 +0200

Juillet 2008 – PHP Index: IBM : Intégration de Google Agenda dans une application PHP

Dans un article paru sur le site IBM, Vikram Vaswani propose un tutoriel permettant d'associer l'API Google calendar et l'extension SimpleXML de PHP et/ou la librairie GData de Zend.

Ce tutoriel commence par donner quelques explications sur le format de sortie de l'API Google Calendar et comment récupérer les événements en usant de SimpleXML ou des librairies Zend. Il aborde ensuite les fonctionnalités de gestion et de recherche des événements.

Pour en savoir plus :

Juillet 2008 – PHP Index: Inscriptions ouvertes pour la Zendcon 2008

Zend Technologies a annoncé aujourd'hui l'ouverture des inscriptions pour la quatrième conférence annuelle Zend/PHP.

Celle-ci se tiendra du 15 au 18 septembre, à Santa Clara, en Californie. Cette année sera axée sur les améliorations importantes que PHP peut apporter aux nouvelles applications web, à l'avantage de leurs utilisateurs.

Pour plus d'informations :

Juillet 2008 – Glagla.org: PHPTeam, une vieille application de retour sous Symfony

Je découvre la nouvelle version de PHPTeam. Pour l’instant, le fork de Symfonians est encore un peu brutal, comme, par exemple, le bloc “a propos” mais il y a déjà quelques articles, un super logo et deux offres d’emploi !

Une bonne initiative si elle est suivie d’inscriptions et de contenus.

Bon courage aux développeurs de ce site.

Article original publié sur Glagla Dot Org. Tous droits réservés.

PHPTeam, une vieille application de retour sous Symfony

Juillet 2008 – PHP Index: Devshed : Envoi d'email MIME avec PHP

Sur le site Developper Shed, Alejandro Gervasio propose aujourd'hui un tutoriel pour réaliser une classe d'envoi de emails MIME avec PHP5.

Ce tutoriel est composé de quatres parties :

Juillet 2008 – Glagla.org: Lier vos médias depuis vos vues Symfony

(encore un post un peu pense bête pour moi)

Les helpers sont pratiques pour afficher des images ou créer des liens htmls. Parfois, on désire lier des documents que l’on a uploadé dans un répertoire spécifique ou autre bizarrerie. La classe sfWebRequest de Symfony fourni une méthode bien pratique pour faire ça. Par exemple pour accéder au fichier raoul.pdf dans le répertoire web/uploads/pdf :

echo '<a href="'.$sf_request->getRelativeUrlRoot().'/'.
  sfConfig::get('sf_upload_dir_name').'/pdf/raoul.pdf'
  .'raoul.pdf</a>';

Cet objet est automatiquement accessible depuis vos vues via la variable $sf_request.

Article original publié sur Glagla Dot Org. Tous droits réservés.

Lier vos médias depuis vos vues Symfony

Juillet 2008 – Glagla.org: Blogmarks pour le 10/07/2008

Web Form Design Patterns: Sign-Up Forms, Part 2 | How-To | Smashing Magazine

Last week we have presented first findings of our web forms survey. The main objective of the survey was to provide designers and developers with some intuition of how effective web forms are designed; we also presented some guidelines of how an effective and user-friendly web form can be achieved.

(categories: )

ratproxy - Google Code

A semi-automated, largely passive web application security audit tool, optimized for an accurate and sensitive detection, and automatic annotation, of potential problems and security-relevant design patterns based on the observation of existing, user-initiated traffic in complex web 2.0 environments.

(categories: )

Recherchez vos documents Google Documents sur votre Mac avec Spotlight

Vous possédez un Mac et vous utilisez Google Document. Voici une application qui vous permettra de rechercher des documents et signets présents sur votre compte Google en utilisant Spotlight. Cette utilitaire se nomme Precipitate, il a été développé par Stuart Morgan de chez Google.

(categories: )

Go!Explore

Go!Explore est hyper facile à utiliser, et que vous soyez piéton ou automobiliste, il fait de votre PSP un système GPS idéal.

(categories: )

blogmarks.net

Article original publié sur Glagla Dot Org. Tous droits réservés.

Blogmarks pour le 10/07/2008

Juillet 2008 – PHP Index: Drupal 6.3 et 5.8

Les version 6.3 et 5.8 de DRUPAL sont disponibles. Ce sont des versions de maintenance pour corriger des failles de sécurités ainsi que des problèmes signalés par l'outil de suivi des bugs.

La version 6.3 inclue également :

  • Quelques modifications sur l'installeur pour prévenir les problèmes de propriétés des fichiers au niveau des partages
  • Passage à la version 1.2.6 de jQuery
  • Amélioration de la compatibilité PostgreSQL
  • Amélioration des performances des API search, menu et form.

Il est a noter que Views pour Drupal 6 nécessite la version 6.3 pour fonctionner correctement.

La mise à jour des versions existantes de DRUPAL 5 et 6 est vivement recommandée. Pour plus d'information, vous pouvez consulter l'annonce sur le site du projet DRUPAL

Juillet 2008 – PHP Index: Mastering phpMyAdmin

L'ouvrage "Mastering phpMyAdmin for Effective MySQL Management" est recommandé sur le site de Zend.

Ce livre a été écrit par Marc Delisle [ISBN 1904811035]. D'après Cal Evans, ce livre s'adresse aussi bien aux utilisateurs finaux (développeurs et administrateurs de bases de données) qu'aux administrateurs systèmes. Il considère que ce livre est particulièrement intéressant pour :

  • Les personnes ne connaissant pas encore phpMyAdmin et voulant en tirer le maximum,
  • Les personnes l'utilisant déjà et voulant savoir ce qu'il peut faire de plus.

Pour plus d'informations :

Juillet 2008 – PHP Index: Joomla! 1.5.4

Joomla! 1.5.4 [Naiki] est disponible depuis quelques jours. Il s'agit d'une version de maintenance incluant quelques correctifs de vulnérabilités modérées, des corrections de bugs et quelques améliorations.

Juillet 2008 – PHP Index: wampMSS 1.1.1

La version 1.1.1 de wamp MSS (Mobil Storage Server) est enfin disponible !

La version 1.1.1 de wampMSS (Mobile Storage Server) qui est une version modifiée de wamp permet de faire fonctionner un serveur apache, php, mysql sur un périphérique USB

Cette version comprend :
- Apache 2.2.9
- PHP 5.2.6
- MySQL 5.0.51b
- PhPMyAdmin 2.11.7
- SQLiteManager 1.2.0 RC2

rendez-vous sur http://www.uni-d.net

Proposé par UNi

Juillet 2008 – Glagla.org: Les cousines se bidonnent !

Ce qui est sympa à trois ans, c’est qu’un rien t’amuse !

Article original publié sur Glagla Dot Org. Tous droits réservés.

Les cousines se bidonnent !

Juillet 2008 – Lapin Blanc: 6 plugins Symfony indispensables

Écrit en PHP, orienté objet, implémentant le design pattern Moèle-Vue-Controlleur, doté de nombreuses fonctionnalités et soutenu par Yahoo! : Symfony, le framework web développé par Sensio Labs, à tout pour plaire. L’une des forces de ce framework est la disponibilité de nombreux plugins qui permettent (...)

Juillet 2008 – Hello Design: L'approche d'un projet en PDO

Dans le magazine PHP solution (4/2008) qui vient de sortir, un article sur le PDO et plus précisemment : L'approche d'un projet en PDO

Dans ce numéro les autres concernent : 

  • Les services web SOAP avec PHP 5...
  • L'approche d'un projet en PDO...
  • Faire communiquer Flex et AMFPHP...
  • Flux RSS...
  • Un site communautaire avec Copix...
  • Les nouveautés de MySQL 5.1...
  • Découvrez les design patterns...
  • Les nouveautés de PHP 5.3...
  • Framework ZEND : MVC...
  • Les problèmes de sécurité avec PHP...
  • Générer des fichiers pour tableurs...
  • 4D v11 SQL et PHP : développement durable...

Vous pouvez vous rendre directement sur le lien suivant (cliquer ici) pour voir les résumés des articles.

Juillet 2008 – Digital Fashion: About the self keyword in static methods

While setting up a test server for some software I wrote at the office, I eventually noticed the following notice:

Notice: Use of undefined constant self - assumed 'self'

That surprised me, because 1) I though self were some kind of "superglobal" constant or a special token of the parser, always automatically available in a static method and 2) the code works. So what's up in there ? Let's make a simple test:

<?php

class foo {
	static public function bar() {
		var_dump(is_callable(array('self', 'foobar')));
		var_dump(is_callable(array(self, 'foobar')));

		var_dump(class_exists('self'));
		var_dump(class_exists(self));

		self::foobar();
	}

	static public function foobar() {
	}
}

foo::bar();

Executing the above code will yeld the following result:

bool(true)

Notice: Use of undefined constant self - assumed 'self' in /home/geoffreyb/test.php on line 6
bool(true)
bool(false)

Notice: Use of undefined constant self - assumed 'self' in /home/geoffreyb/test.php on line 9
bool(false)

What do we learn here ? Not much actually. It seems like self as a constant is only available when used with the scope resolution operator, aka double-colon or paamayim nekudotayim. When you want to use it in, for example, a callback definition, use a string representation of self:

<?php

is_callable(array('self', 'bar'));
call_user_func(array('self', 'bar'));

Which, while making absolutely no sense at all, works. Another way to get around this is to use the get_class() function that, without any argument, will return the name of the class you're currently in (foo in my example).

After a bit more investiging, I found out that there is nothing special about the self token, which is actually a string token. You can check this very easily with the following code:

<?php

class foo {
	static public function bar() {
		self::foobar();
	}
}

var_dump(token_get_all(file_get_contents(__FILE__)));

Somewhere inside the output, you'll find the following piece of text:

  array(2) {
    [0]=>
    int(307)
    [1]=>
    string(4) "self"
  }

And the token id 307 is resolved by token_name to string.

Juillet 2008 – Digital Fashion: About the self keyword in static methods

While setting up a test server for some software I wrote at the office, I eventually noticed the following notice:

Notice: Use of undefined constant self - assumed 'self'

That surprised me, because 1) I though self were some kind of "superglobal" constant or a special token of the parser, always automatically available in a static method and 2) the code works. So what's up in there ? Let's make a simple test:

<?php

class foo {
	static public function bar() {
		var_dump(is_callable(array('self', 'foobar')));
		var_dump(is_callable(array(self, 'foobar')));

		var_dump(class_exists('self'));
		var_dump(class_exists(self));

		self::foobar();
	}

	static public function foobar() {
	}
}

foo::bar();

Executing the above code will yeld the following result:

bool(true)

Notice: Use of undefined constant self - assumed 'self' in /home/geoffreyb/test.php on line 6
bool(true)
bool(false)

Notice: Use of undefined constant self - assumed 'self' in /home/geoffreyb/test.php on line 9
bool(false)

What do we learn here ? Not much actually. It seems like self as a constant is only available when used with the scope resolution operator, aka double-colon or paamayim nekudotayim. When you want to use it in, for example, a callback definition, use a string representation of self:

<?php

is_callable(array('self', 'bar'));
call_user_func(array('self', 'bar'));

Which, while making absolutely no sense at all, works. Another way to get around this is to use the get_class() function that, without any argument, will return the name of the class you're currently in (foo in my example).

After a bit more investiging, I found out that there is nothing special about the self token, which is actually a string token. You can check this very easily with the following code:

<?php

class foo {
	static public function bar() {
		self::foobar();
	}
}

var_dump(token_get_all(file_get_contents(__FILE__)));

Somewhere inside the output, you'll find the following piece of text:

  array(2) {
    [0]=>
    int(307)
    [1]=>
    string(4) "self"
  }

And the token id 307 is resolved by token_name to string.

Juillet 2008 – Lapin Blanc: Faire fonctionner PHP mail() sous Debian et dérivés

Peut-être avez-vous remarqué que l’envoi de mail en PHP ne fonctionne pas après une installation standard de Debian ou de Ubuntu. Pourtant, Debian fournie le serveur de mail exim qui fait partie de la base du système. Le problème est que la configuration initiale d’exim l’empêche d’envoyer des mails (...)

Juillet 2008 – Kamelot Blog: Vendredi c'est l'apéro php de Bruxelles et le 20 aout c'est le 2eme meeting (pas apéro) à Gand

Vendredi aura lieu le prochain apérophp à "la lunette" place de la monnaie à Bruxelles. 19h le 18 du 7 espérons être au moins 6 ....

Signalez votre participation pour cette rencontre informelle




Au mois d'Août aura lieu le 2ème phpBelgium Meeting.

Plus conventionnel, il y aura des présentations/discussions au sujet de diverses matières connexes par PHP, telles que la certification de Zend PHP5, le Zend framework et davantage.

Envoyez vos idées l'adresse pour les intéressés c'est http://upcoming.yahoo.com/event/805818. et suivez le twit de phpBelgium

Juillet 2008 – Rom's blog: PHP 5.3, plus que quelques mois!

D’après le blog de mon collègue et ami Julien PAULI, PHP 5.3 devrait bientôt être disponible.
Reprise des infos de son post :

PHP 5.3 :

* Features freeze le 24 Juillet
* Bétas à partir du mois prochain (courant Aout 2008)
* Sortie prévue fin octobre 2008

Points actuellement sous l’attention :

* namespaces
* late static binding
* re2c
* windows support
* minimizing BC support/documentation
* intl extension
* phar extension
* E_DEPRECATED
* __callStatic
* Garbage Collection
* MySQLnd

Sa source : http://marc.info/?l=php-internals&m=121577053504295&w=2

Juillet 2008 – PHP Index: Wordpress 2.6

La version 2.6 de Worpress est disponible, presque un mois avant la date prévue.

Cette version comporte quelques nouvelles caractéristiques pour augmenter la performance de Wordpress en tant que CMS, notamment un système de suivi des révisions. Une vidéo est disponible sur wordpress.org pour faire le tour des améliorations apportés par Wordpress 2.6.

D'après l'auteur du communiqué sur wordpress.org, la compatibilité des plugins et thèmes entre les versions 2.5 et 2.6 ne devrait pas poser de problèmes majeurs. Il est à noter que la branche 2.5 ne sera désormais plus maintenue, que tous les utilisateurs sont encouragés à passer à la version 2.6.

Juillet 2008 – Glagla.org: Une bande de petits braillards

Pas possible de prendre son petit dej tranquille !!!!

Article original publié sur Glagla Dot Org. Tous droits réservés.

Une bande de petits braillards

Juillet 2008 – Glagla.org: WordPress 2.6 intègre Google Gears

Dans le but d’accélérer le back office, WordPress 2.6 intègre maintenant Google Gears !

Pour l’instant le bouton turbo ne sert qu’a mettre en local certaines CSS, javascripts et autres données générales de votre blog, mais on peut espérer une utilisation plus intensive dans le futur comme la contribution hors-ligne.

activation de Google Gears

Google Gears activé

Sur mon hébergement, le back office est sensiblement plus rapide.

Chapeau WordPress !

Article original publié sur Glagla Dot Org. Tous droits réservés.

WordPress 2.6 intègre Google Gears

Juillet 2008 – Dur Comme Faire: PHPTV

La première télévision sur le web entièrement consacrée à PHP vient d'être officiellement lancée. PHPTV est une initiative de l'AFUP produite par la société OpenStates. Cette web TV publiera une émission chaque mois. Au programme de la première émission, on trouve :...

Juillet 2008 – Apprendre-PHP.com: L'AFUP lance PHP TV et PHP 5.3 sur les rails !

Ce soir, en ouvrant mes flux RSS préférés, j'ai eu la grande surprise de découvrir le nouveau site francophone PHPTV.fr né du travail de l'AFUP et de la société OpenStates. Il s'agit un site qui publiera chaque mois des podcasts vidéos d'informations et de reportages dédiés à l'univers...

Juillet 2008 – Glagla.org: Sauvegarde de ce site avec Automator

Automator est un logiciel fourni par apple permettant au premier utilisateur venu de créer visuellement des applications enchainant des actions simples. Automator est à mon avis assez méconnu et mériterait plus de publicités.

Mon site hébergé par Gandi avait besoin d’un petit système de sauvegarde. En bon informaticien j’ai cherché le moyen le plus rapide et simple pour le réaliser.

Il se trouve que mon ordinateur personnel est largement sauvegardé via un disque dur externe + Time Machine ainsi que par Mozy. Rapatrier les sauvegardes sur cet ordinateur n’est donc pas idiot. Certes, il n’est pas tout le temps allumé, par exemple quand je part en vacances, mais dans ce cas là je ne mets pas à jour ce blog non plus … ce système me parait donc pas mal.

J’ai donc réaliser un script shell qui dump les données de mes bases SQL, qui copie les données de mes sites et qui compresse tout ça. J’obtiens une belle archive que je place dans un répertoire publié sur le web. (avec une protection htaccess bien suffisante).

Exemple de code :
/usr/bin/mysqldump -u reader blog > /tmp/dump.sql
/bin/tar zcf /tmp/backup_sql.tgz /tmp/dump.sql
/bin/tar zcf /tmp/backup_olivier.tgz /srv/d_glagla/olivier
mv …
zip …

A partir de là j’assemble un script automator sauvegardé comme une application qui :

  • déplace dans un répertoire temporaire mes sauvegardes de moins de 15 jours,
  • purge mon répertoire de sauvegarde,
  • restaure tout depuis le répertoire temporaire,
  • télécharge le fichier de backup,
  • le renomme en le préfixant de la date du jour,
  • envoie une notification Growl signalant que la sauvegarde est finie.

Et voila. Le tout sans taper une ligne de code.

Vous pouvez télécharger cet exemple enregistré sous forme de workflow : exemple de processus.

Afin de lancer ce script tous les jours, j’ajoute simplement une alerte iCal ouvrant le fichier correspondant à mon appli automator.

Article original publié sur Glagla Dot Org. Tous droits réservés.

Sauvegarde de ce site avec Automator

Juillet 2008 – PHP Index: Lancement de PHPTV.

Le mois dernier a été lancé la première émission de la "chaine" PHPTV.

En partenariat avec l'AFUP, PHPTV est un projet communautaire ayant pour but de proposer un magazine TV orienté sur la technologie PHP.

Au programme de l'émission de juin vous retrouverez :

  • Des news sur google summer of code, PHP5.3, ...
  • L'interview de la société e-TF1.
  • Un débat sur PHAR.
  • Une rubrique "coups de cœur/gueule".

Comme d'habitude, pour plus d'informations rendez-vous directement à la source (qui dispose d'un flux RSS et/ou d'une newsletter pour vous tenir au courant de nouvelles émissions).

Souhaitons bonne chance à cette initiative !

Juillet 2008 – PHPortail: Plume CMS 1.2.3 (17/07/08)

La version 1.2.3 de Plume CMS est disponible. Elle contient entre autres nouveautés :

* un moteur de recherches qui supporte les langues asiatiques ;
* un filtre antipourriel très performant...

Juillet 2008 – PHPortail: Inscriptions ouvertes pour la Zendcon 2008 (17/07/08)

Zend Technologies a annoncé aujourd'hui l'ouverture des inscriptions pour la quatrième conférence annuelle Zend/PHP.

Celle-ci se tiendra du 15 au 18 septembre, à Santa Clara, en Californie....

Juillet 2008 – PHPortail: Subversion 1.5 (17/07/08)

La nouvelle version de subversion, ou encore appelle SVN, vient de sortir et permet toujours d'effectuer le contrôle de système. Cette nouvelle version se trouve indispensable pour avec l'ensemble...

Juillet 2008 – PHPortail: Copix : 3.0.3 (17/07/08)

Copix 3.0.3 est officiellement disponible sur la page de téléchargements du projet. Pas mal de nouveautés majeures. Parmi celles-ci on peut citer l’apparition de valideurs qui permettent de...

Juillet 2008 – PHPortail: Sécurité : 8 plugiciels Firefox pour vous aider (17/07/08)

Il existe plusieurs modules de sécurités pour Firefox, voici une liste pour éviter les malwares, générer des mots de passe sécuritaires, surveiller les témoins, nettoyer l'historique, naviguer...

Juillet 2008 – PHPortail: MySQL 5.1.26 (17/07/08)

MySQL/SUN annonce la publication de MySQL 5.1.26-rc,
la dernière version de la série des 5.1, et possiblement la
dernière avant la publication en GA. MySQL 5.1.25 inclut
essentiellement des...

Juillet 2008 – PHPortail: PHP sécurité de PHP freaks (17/07/08)

Daniel Egeberg publie un dossier plutôt complet sur la sécurité PHP, sous forme d'un PDF de 20 pages. La sécurité PHP passe par le masquage d'erreur, les injections SQL et HTML, les...

Juillet 2008 – PHPortail: Drupal 6.3 (17/07/08)

La version 6.3 DRUPAL est disponible. C'est une version de maintenance pour corriger des failles de sécurités ainsi que des problèmes signalés par l'outil de suivi des bogues.

Elle inclut...

Juillet 2008 – PHPortail: Joomla! 1.5.4 (17/07/08)

Joomla! 1.5.4 [Naiki] est disponible depuis quelques jours. Il s'agit d'une version de maintenance incluant quelques correctifs de vulnérabilités modérées, des corrections de bogues et quelques...

Juillet 2008 – PHPortail: Rapport sur le CodeFest 2.1 de PHP Québec (18/07/08)

J'en avais parlé, mais PHP Québec avait fait un CodeFest au mois de mai. Montréal Tech Watch en fait un bon rapport.

Mais deux points s'en détachent...

Premièrement, Evan Prodromou...

Juillet 2008 – PHPortail: Livre blanc sur quatre cadres d'applications PHP (18/07/08)

« Fruit d'une étude de longue haleine, ce livre blanc aborde les différents aspects du choix d’un framework : problématiques fonctionnelles, techniques et stratégiques, avec notamment une...

Juillet 2008 – PHPortail: PHP-GTK 2.0.1 (18/07/08)

La version de PHP-GTK 2.0.1 est sortie. De nombreuses évolutions majeures y sont apparues :

- Soutien GtkBuilder
- Prise en charge du nouveau GTK+ 2,12 API de bulles
- Prévenir de segmentation...

Juillet 2008 – PHPortail: Les classes abstraites et finales (18/07/08)

Un article intéressant, sur les classes abstraites et finales, sur notre partenaire Apprendre PHP :

« PHP intègre un autre concept de la programmation orientée objet : les classes abstraites....

Juillet 2008 – PHPortail: phar arrive (18/07/08)

Phar est un format de fichier d'archive pour PHP : (PHp ARchives). Il permet de stocker des applications PHP complètes dans un seul fichier, et de les exécuter de manière indépendante. Toutes les...

Juillet 2008 – PHPortail: Classe singleton d'accès aux SGBD intégrant PDO (18/07/08)

« Et voilà! » Comme le dirait une des membres de l'équipe qualité chez mon employeur. Encore un autre tutoriel d'Apprendre PHP.

« J'ai commencé à créer ma propre classe d'accès aux...

Juillet 2008 – PHPortail: Singleton : instance unique d'une classe (18/07/08)

J'ai un peu trop négligé ce partenaire, alors voici un tutoriel sur les Singletons d'Apprendre PHP.

« Dans la plupart des développements professionnels ou de grande envergure, il est...

Juillet 2008 – PHPortail: Sécurité : Identification X.509 PKI avec PHP et Apache (18/07/08)

« Comme certains d'entre vous le savent, je travaille actuellement dans un environnement dont la sécurité de résume aisément à "comment faire pour s'assurer que ceux qui utilisent le service...

Juillet 2008 – PHPortail: Découvrez APC, le cache d'Opcode de PHP (18/07/08)

« Les caches d'opcode de PHP économisent de l'énergie, des dépenses, et améliorent l'expérience utilisateur générale sur les sites Web, tout en étant l'une des optimisations les plus simples...

Juillet 2008 – PHPortail: Couverture de code avec PHPT (18/07/08)

« Mes premières expériences avec les tests unitaires et PHP ont été avec PHPUnit. C'est un excellent outil, et je remercie vivement Sebastian pour avoir contribué à ce projet. Mais j'ai aussi...

Juillet 2008 – Kamelot Blog: L'apéro PHP de Bruxelles 07-2008

Voilà c'est fait. Il y avait quand même plus de monde cette fois. Vous retrouverez déjà quelques photos ici D'autre en ont fait je les linkerai plus tard dans ce post.

Juillet 2008 – Glagla.org: Blogmarks pour le 19/07/2008

Royal Pingdom » Forget about hacking - your servers might get stolen

When it comes to security, there is often a focus on the software side, thwarting hackers and other virtual threats such as viruses and worms. When it comes to uptime and availability, focus often rests on redundant power, clustering, and other similar strategies. We often forget about something that can put a stop to any operation: good, old-fashioned, real-life robbery.

(categories: )

Le spam représente 81,6% des emails au niveau monde par Neteco.com

Malgré bien des tentatives pour essayer de l’éradiquer et de le minimiser, le spam ou courrier électronique non sollicité reste plus que jamais d’actualité. Dans une récente étude publiée par MessageLabs, 81,5% des emails reçus au travers des fournisseurs d’accès seraient du spam.

(categories: )

PHPTV - Dur Comme Faire

La première télévision sur le web entièrement consacrée à PHP vient d’être officiellement lancée. PHPTV est une initiative de l’AFUP produite par la société OpenStates. Cette web TV publiera une émission chaque mois.

(categories: )

Zend, la PHP compagnie, lève 7 millions de dollars par Neteco.com

Zend, « The PHP Company », lève 7 millions de dollars auprès de TriplePoint Capital. Cette nouvelle levée de fonds doit lui permettre de monter en puissance sur un marché en croissance.

Après tout, ce n’est qu’un petit million de moins que seesmic :-p

(categories: )

Comment localiser sa copine grâce à Orange !

Orange vient tout juste de mettre en ligne son API de localisation de téléphone mobile sur son portail Orange Partner :

http://www.orangepartner.com/

Cette API REST fonctionne pour tous les clients Orange France quel que soit leur modèle de téléphone (GPS ou non) à condition bien sûr qu’ils aient accepté préalablement le SMS de demande de localisation envoyée par le service.

(categories: )

Integrate your PHP application with Google Calendar

Google Calendar allows Web application developers to access user-generated content and event information through its REST-based Developer API. PHP’s SimpleXML extension and Zend’s GData Library are ideal for processing the XML feeds generated by this API and using them to build customized PHP applications. This article introduces the Google Calendar Data API, demonstrates how you can use it to browse user-generated calendars; add and update calendar events; and perform keyword searches.

(categories: )

Google devrait numériser des documents de la bibliothèque de Lyon

Le groupe internet Google devrait être choisi demain par la municipalité de Lyon pour numériser 500.000 documents du fonds ancien de la bibliothèque municipale.
Cela ferait de Lyon la première ville française à procéder à la numérisation de ses ouvrages patrimoniaux, antérieurs au XXe siècle.

(categories: )

blogmarks.net

Article original publié sur Glagla Dot Org. Tous droits réservés.

Blogmarks pour le 19/07/2008

Juillet 2008 – Prendre un Café: Debug PHP facile avec Firefox, Firebug et FirePHP

Tous ceux qui ont déjà eux à batailler avec du code javascript connaissent certainement la fabuleuse extension Firebug pour Firefox. L'outil propose une console permettant d'examiner l'environnement d'exécution javascript mais aussi HTML et CSS de n'importe quelle page web.

FirePHP est une autre extension qui a pour but de proposer le même service mais pour le langage PHP. L'extension repose elle-même sur Firebug et propose, une fois installée, l'affichage dans la console des messages de debug émis depuis vos scripts PHP :

Démo FirePHP

Une fois l'extension Firefox installée, pour pouvoir envoyer un message de log dans la console depuis vos scripts, il faut utiliser une librairie spécifique PHP fournie téléchargeable depuis la page d'accueil du projet FirePHP. Cette librairie très simple est d'ailleurs documentée ici. Une fois l'archive récupérée, décompressez-la et appelez FirePHP de cette façon depuis un script PHP standard :

require_once '/path/to/firephp/lib/FirePHPCore/FirePHP.class.php';
 
$f = FirePHP::getInstance(true);
$f->fb('Hello FirePHP console', FirePHP::INFO);
$f->fb(array('hello' => 'how are you?'));
$f->fb(array('hello' => array('how', 'are', 'you')));
$f->fb(array('foo', 'bar'), 'Results', FirePHP::WARN);
 
$o = new stdClass();
$o->foo = 'foofoo';
$o->bar = 'barbar';
 
$f->fb($o);

Pour envoyer les informations de debug à la console, la librairie PHP envoie les données sérialisées au format JSON dans un entête HTTP personnalisé dédié (X-FirePHP-Data). Ainsi, aucune interférence n'est possible avec vos scripts existants, la seule condition étant bien entendu de ne pas lancer la sortie standard PHP avant que ces entêtes aient été envoyés.

Données JSON passées dans un entête dédié

En bref, un outil génialement simple et efficace.


Ce billet intitulé Debug PHP facile avec Firefox, Firebug et FirePHP a été rédigé par Nicolas Perriault et publié sur le blog Prendre un Café sous licence Creative Commons BY-NC-SA.

Juillet 2008 – PHP Index: La prochaine version de SPIP sous licence GNU/GPL 3

C'est officiel depuis l'anniversaire des sept ans de SPIP (début juillet), la prochaine version de celui-ci adoptera une licence GNU/GPL 3.

Cette version de la licence GPL remplacera pour SPIP la version 2 écrite par la Free Software Foundation il y a déjà plus de 15ans !
Le principal intérêt qui a plébiscité le changement de la licence est la meilleure protection des droits d'auteurs pour les pays autres que les Etats-Unis.

Il faut tout de même savoir que la GPL2 et sa petite sœur la GPL3 sont incompatibles entre elle. Incompatible dans le sens où la version 2, comme la 3, interdit de combiner du code sous une autre licence. Plus concrètement les licences nous disent : "si vous incorporez du code sous cette licence dans un plus grand programme, ce dernier doit aussi être sous cette licence".
Mais bien sûr rien n'empêche a deux applications sous chacune de ces licences de fonctionner dans un même environnement. Comme nous le dit Richard Stallman en personne : "Par exemple, la licence TEX et la licence Apache sont incompatibles avec la GPLv2, mais cela ne nous empêche pas d'avoir TEX et Apache dans le même système avec Linux, Bash et GCC car ce sont tous des programmes séparés. Ainsi, si Bash et GCC évoluent vers la GPLv3, tandis que Linux reste sous la GPLv2, il n'y a pas de conflit."

Pas trop d'inquiétude avoir donc, mais pour plus d'informations :

Juillet 2008 – PHPortail: wampMSS 1.1.1 (21/07/08)

La version 1.1.1 de wamp MSS (Mobil Storage Server) est enfin disponible !

wampMSS est une version modifiée de wamp permet de faire fonctionner un serveur apache, PHP, MySQL sur un périphérique...

Juillet 2008 – PHPortail: 9 solutions pour avoir des captures d'écran sur votre site (21/07/08)

Proposer une capture d'écran du site qui va être visitée lors du survol d'un lien par la souris est une fonctionnalité à la mode sur les sites : il permet de donner un aperçu du site de...

Juillet 2008 – PHPortail: Trois conseils pour rendre le code PHP lisible (21/07/08)

dom29399 propose trois approches pour améliorer la lisibilité du code PHP :

* Réduire la taille des conditions : les blocs de conditions qui font des centaines de lignes perdent aisément les...

Juillet 2008 – PHPortail: Mise au point de votre site web (21/07/08)

La mise au point de votre site web pour l'ensemble des utilisateurs est un point important.

Yahoo propose un nouveau service concernant le modèle de réputation ("Reputation Pattern") qui se...

Juillet 2008 – PHPortail: 30 Classes et Composants PHP utiles (21/07/08)

Frederico s'est penché sur les classes et les composants utiles touchant PHP.

La liste qu'il propose concerne les thèmes suivants :

* Base de données
* Outil de développement
* Test...

Juillet 2008 – Lapin Blanc: PHP et ses tags

Il existe plusieurs manières de délimiter les blocs de code en PHP : <?php et ?> (les tags standard) <? et ?> (leur version courte) <?= et ?> (équivalent de <?php echo et ?>) <% et %> (style ASP) <script language="php"> et </script> (style (...)

Juillet 2008 – Prendre un Café: Mes conventions de codage...

... sont celles des projets sur lesquels je me greffe. C'est en effet pour moi une forme de respect que d'appliquer les standards de codage partagés par une communauté (ou une équipe) de développeurs : ainsi, on maximise les chances de se comprendre et on minimise les coûteuses phases de communication entre geeks introvertis[1] :p

En effet, rien de plus pénible que de reprendre le code de quelqu'un qui a pris des libertés avec des conventions établies à ce niveau, l'apothéose étant obtenue avec ce genre de code :

<?php
  class Ma_superClasse {
 
    function dire_coucou ( $popol) {
  echo 'coucou ' . $popol   . ' !' ;
}
     function DireAuRevoir($Popol )
{ print "Au revoir $Popol !";
     }
  }

Je force bien évidemment ici le trait, mais tout le monde est déjà tombé sur ce genre de code illisible, qui multiplie par 10 votre temps d'intervention sur ce dernier et divise par 1000 votre passion pour la TMA.

Bien entendu, il peut arriver de produire du code sur un projet ne nécessitant l'utilisation d'aucune brique logicielle existante. Auquel cas vous pouvez librement appliquer vos propres standards de codage, l'important étant ici qu'ils soient cohérents et constamment appliqués. S'il peuvent être ceux d'un projet open source existant reconnu, cela augmentera la sympathie potentielle à votre égard de futurs intervenants sur votre code ;)

Je noterai quand même en vrac quelques bonnes pratiques générales globalement reconnues et appréciées :

  • être explicite,
  • indenter son code,
  • documenter son code,
  • à choisir entre les deux, privilégier la lisibilité à la concision,
  • utiliser des noms de variables, de classes, de méthodes, de fonctions et d'arguments parlants,
  • utiliser des noms anglophones,
  • utiliser des motifs de conception connus.

Personnellement, j'ai mes petites préférences et tout comme Oncle Tom - qui m'a gentiment refilé cette chaîne[2] - j'ai tendance à appliquer les standards de codage de symfony, que je trouve homogènes et cohérents. Mais ce sont là bien évidemment essentiellement des questions de goûts et de couleurs.

Notes

[1] Voire les trolls genre les tabulations ça pue, vive l'indentation à trois espaces...

[2] Salopard, ça va se payer ! ;-)


Ce billet intitulé Mes conventions de codage... a été rédigé par Nicolas Perriault et publié sur le blog Prendre un Café sous licence Creative Commons BY-NC-SA.

Juillet 2008 – Lapin Blanc: Ne fermez pas vos tags à la fin des fichiers PHP

Pendant que NikO nous présente ses conventions de codage, parlons d’une autre bonne pratique concernant les tags de délimitation de blocs en PHP. Le langage PHP n’impose pas de fermer un bloc de code avec ?> si se bloc se trouve tout à la fin du fichier, et pour cause, mieux vaut l’omettre dans (...)

Juillet 2008 – Glagla.org: Téléchargez votre vin en direct des domaines !

C’est beau la technologie !

usbwine.com

Article original publié sur Glagla Dot Org. Tous droits réservés.

Téléchargez votre vin en direct des domaines !

Juillet 2008 – PHP Index: Zend Framework 1.6 Release Candidate 1

La version 1.6 de Zend Framework est disponible au téléchargement.

Parmi les principales évolutions, on trouve par exemple :

  • Intégration du framework javascript Dojo
  • SOAP : SOAP server, SOAP client, autodiscovery, WSDL access, WSDL generation
  • Aperçu du "Tooling Project" encore à l'étude
  • Tests unitaires Harness (controllers)
  • Support du format Lucene 2.3
  • Composant Paginator
  • Support Text/Figlet
  • ...

Pour plus d'information, vous pouvez consulter l'annonce sur le site Zend.

Juillet 2008 – Glagla.org: Liens inter-applications avec Symfony 1.1

Un important travail réalisé pour la sortie de Symfony 1.1 a été le retrait du pattern singleton du framework. On peut maintenant instancier plusieurs objet sfContext par exemple. Cela permet notamment de faire des liens inter-application a peu près proprement. Voici l’avancée de mon travail sur la question :

fichier lib/helper/crossAppLinkHelper.php

<?php
/**
 * @author Olivier Mansour
 */
 
/**
 * return an url for a given symfony application and an internal url
 * work with symfony 1.1
 * freely inspired from sfWebControlleur code
 *
 * @author Olivier Mansour
 * 
 * @param string $appname
 * @param string $url
 * @param boolean $absolute
 * @param string $env
 * @param boolean $debug
 * @return string
 */
function cross_app_url_for($appname, $url, $absolute = 'false', $env = null, $debug = 'false')
{
 
  if (sfConfig::get('sf_no_script_name'))
  {
  // wont work
  throw new sfException(__FUNCTION__.' : the cross app link helper will not work with sf_no_script_name to true');
  }
 
  // get the environment
  if (is_null($env))
  {
    $env = sfContext::getInstance()->getConfiguration()->getEnvironment();
  }
 
  // context creation
  if (!sfContext::hasInstance($appname))
  {
    $c = ProjectConfiguration::getApplicationConfiguration($appname, $env, $debug);
    sfContext::createInstance($c, $appname);
  }
 
  list($route_name, $parameters) = sfContext::getInstance($appname)->getController()->convertUrlStringToParameters($url);
  $request = sfContext::getInstance($appname)->getRequest();
 
  $url_root = $request->getRelativeUrlRoot();
  if ($absolute)
  {
    $url_root = 'http'.($request->isSecure() ? 's' : '').'://'.$request->getHost().$url_root;
  }
 
  //scriptname
  $scriptname = '';
  if (($env != 'prod') and ($env))
  {
  	$env_suf = '_'.$env;
  } 
  else
  {
   $env_suf = '';
  }
  if (!file_exists(sfConfig::get('sf_web_dir').DIRECTORY_SEPARATOR.$appname.$env_suf.'.php'))
  {
  	//test with index ?
  	if (file_exists(sfConfig::get('sf_web_dir').DIRECTORY_SEPARATOR.'index'.$env_suf.'.php'))
  	  $scriptname = 'index'.$env_suf.'.php';
  	else
      throw new sfException(__FUNCTION__.' : can\'t find a script name for appname : '.$appname.' and env : '.$env); 	 
  }
  else
  {
  	$scriptname = $appname.$env_suf.'.php';
  }
 
 
  $fragment = '';
  // strip fragment
  if (false !== ($pos = strpos($url, '#')))
  {
    $fragment = substr($url, $pos + 1);
    $url = substr($url, 0, $pos);
  }
 
  // generate url
  list($route_name, $parameters) = sfContext::getInstance($appname)->getController()->convertUrlStringToParameters($url);
 
  if (sfConfig::get('sf_url_format') == 'PATH')
  {
    // use PATH format
    $divider = '/';
    $equals  = '/';
    $querydiv = '/';
  }
  else
  {
    // use GET format
    $divider = ini_get('arg_separator.output');
    $equals  = '=';
    $querydiv = '?';
  }
  $web_url = $url_root.$querydiv.$scriptname.sfContext::getInstance($appname)->getRouting()->generate($route_name, $parameters, $querydiv, $divider, $equals);
 
  if ($fragment)
  {
    $web_url .= '#'.$fragment;
  }
 
  return $web_url;
}

Pour l’utiliser (par exemple, depuis une application nommée back) :

<?php echo cross_app_url_for('front' , '/module/action?id=5&tmp=ok#raoul'); ?>

Je ne l’ai pas beaucoup testé et a vrai dire je ne sais pas si on peut faire plus efficace. Le point particulier qui m’a poussé à écrire autant de code est que, si il est facile d’extraire les routes pour un contexte donnée, la méthode genUrl de sfWebController utilise un objet sfRequest pour obtenir l’url du contrôleur (back_dev.php par exemple) ce qui est bloquant dans mon cas.

Si vous avez des retours n’hésitez pas.

Vous pouvez télécharger le code cité plus haut : crossAppLinkHelper.php.zip

Article original publié sur Glagla Dot Org. Tous droits réservés.

Liens inter-applications avec Symfony 1.1

Juillet 2008 – PHP Index: Generating PDF Forms From a Flex Application With PHP

Sur le site de Zend, Richard Bates a récemment publié un tutoriel sur l'utilisation conjointe de AMFPHP et de dompdf pour créer des formulaires PDF sur une application Flex.

Ayant pu observé que la génération de fichier PDF à partir d'une application est considérée comme un standard par les utilisateurs alors que ce n'est pas forcément si simple pour les développeurs d'application web, il propose un tutoriel très complet pour répondre simplement à ce genre de problématique.

Juillet 2008 – PHPortail: 8 astuces pour bien développer une application web (24/07/08)

Loïc d'Anterroches a fait une liste de petits trucs pour aider à développer une application Web.

« Voici une petite liste de choses auxquelles il faut bien penser quand on développe une...

Juillet 2008 – PHPortail: Symfony 1.1 (24/07/08)

Symfony 1.1 est publié en version stable et finale. La liste des évolutions et nouveauté du populaire cadre de développement est très intéressante :

* Une nouvelle architecture de Symfony...

Juillet 2008 – Prendre un Café: Partager la session utilisateur entre Flash/Flex et symfony avec AmfPHP

Pour les besoins d'un projet récent, j'ai eu besoin de valider la possibilité de gérer l'authentification et l'accès à la session symfony (côté serveur) depuis une interface générée par Adobe Flex (en Flash, donc côté client).

Pour cela, j'ai utilisé la librairie AmfPHP en version 1.9beta2, certes pas très récente mais suffisament fonctionnelle pour satisfaire à ce besoin précis. Voyons comment ça se passe concrètement. L'avantage de la démonstration ci-dessous est qu'elle ne nécessite pas d'installer Flex puisque AmfPHP fournit un navigateur de services (browser) qui nous suffira pour valider notre concept.

Installation du plugin sfGuard

Je pars du principe que tout le monde a une installation de symfony 1.1 nanti d'une application main, ainsi qu'un projet et un virtual host apache fonctionnels pointant sur local.mademo.org. Si ce n'est pas le cas, voila de quoi vous mettre à jour.

On commence par installer le plugin sfGuard, qui se chargera de la persistance des droits et permissions utilisateurs en base de données, et fournira les utilitaires d'authentification et de manipulation de la session côté serveur :

$ ./symfony plugin:install sfGuardPlugin
$ ./symfony propel-build-all
$ ./symfony cc

On charge quelques données de test dans notre base de données nouvellement mise à jour :

$ mkdir data/fixtures 
$ cp plugins/sfGuardPlugin/data/fixtures.yml.sample data/fixtures/fixtures.yml
$ ./symfony propel:data-load main

Ce jeu de données de test nous fournit par défaut un compte admin (mot de passe admin) qui nous servira à tester notre service d'authentification.

Ensuite, il nous faut modifier notre classe apps/main/lib/myUser.php gérant la session utilisateur afin qu'elle étende désormais la classe sfGuardSecurityUser, fournie par le plugin sfGuard :

<?php
// Fichier apps/main/lib/myUser.php
class myUser extends sfGuardSecurityUser
{
}

Installation et configuration d'AmfPHP

Nous allons installer la librairie AmfPHP dans le sous-répertoire web/ de notre projet[1], et aménager quelque peu notre arborescence pour accueillir les services AmfPHP :

$ cd /path/to/project
$ svn export https://amfphp.svn.sourceforge.net/svnroot/amfphp/tags/1.9beta2 web/amfphp
$ mkdir lib/amfphp-services
$ mv web/amfphp/services/amfphp lib/amfphp-services/

Ceci fait, nous allons éditer plusieurs fichiers d'amfphp afin de l'adapter à notre environnement symfony. Tout d'abord, commençons par éditer la valeur de la variable $servicesPath dans le fichier web/amfphp/globals.php :

<?php
// ...
$servicesPath = dirname(__FILE__).'/../../lib/amfphp-services/';

Enfin, il nous faut "patcher"[2] le fichier web/amfphp/core/amf/app/Filters.php, qui initialise la session PHP sans définir le nom de la session. Ici, nous utiliserons le nom de la session symfony par défaut, "symfony" (ligne 105 du fichier) :

102     //Fix for godaddy not allowing ini_get
103     $sessionName = "PHPSESSID";
104   }
105   session_name('symfony');
106   session_start();
107   $session_id = session_id();

Création d'un service permettant le partage de la session utilisateur

Voila, nous pouvons maintenant créer un service de gestion de l'authentification, que nous nommerons pompeusement UserSessionService et que nous enregistrerons dans le fichier lib/amfphp-services/UserSessionService.php :

<?php
require_once dirname(__FILE__).'/../../config/ProjectConfiguration.class.php';
 
/**
 * This class tests the symfony session within an AmfPHP context
 *
 */
class UserSessionService
{
  /**
   * Symfony context
   * @var sfContext
   */
  protected $context = null;
  
  /**
   * Symfony session
   * @var sfGuardSecurityUser
   */
  protected $user = null;
  
  /**
   * Public constructor
   *
   */
  public function __construct()
  {
    $configuration = ProjectConfiguration::getApplicationConfiguration('main', 'dev', true);
    $this->context = sfContext::createInstance($configuration);
    $this->user = $this->context->getUser();
  }
  
  /**
   * Checks wheter user is authenticated or not
   *
   * @return boolean
   */
  public function isAuthenticated()
  {
    return $this->getUser()->isAuthenticated();
  }
  
  /**
   * Authenticates user
   *
   * @param  string  $username
   * @param  string  $password
   * @return boolean True if user has been successfully authenticated
   */
  public function login($username, $password)
  {
    if ($this->isAuthenticated())
    {
      return true;
    }
    
    $user = sfGuardUserPeer::retrieveByUsername($username);
    
    if (!is_null($user) && $user->checkPassword($password))
    {
      $this->getUser()->signIn($user);
      return true;
    }
    
    return false;
  }
  
  /**
   * Signs out a user 
   *
   */
  public function logout()
  {
    return $this->getUser()->signOut();
  }
  
  /**
   * Retrieves the current symfony context
   *
   * @return sfContext
   */
  protected function getContext()
  {
    return $this->context;
  }
  
  /**
   * Retrieves the current symfony user session
   *
   * @return sfGuardSecurityUser
   */
  protected function getUser()
  {
    return $this->user;
  }
}

Pour tester notre service, utilisons le navigateur de service proposé par AmfPHP. Pour cela, il faut lancer un navigateur sur http://local.mademo.org/amfphp/browser/index.html :

Naviagateur de services AmfPHP

Via cette interface, elle même réalisée en Flex, on peut tester les méthodes publiques définies dans notre service, manipuler les arguments, et constater que nous arrivons à nous authentifier et que nous accédons bien à la même session utilisateur que dans symfony : login, logout et test du statut d'authentification.

En conclusion

On pourrait aller beaucoup plus loin dans cet exemple, en proposant par exemple une classe proxy en ActionScript 3 représentant un utilisateur du système (dans notre cas, une instance de la classe sfGuardUser), cette dernière reproduisant tout ou partie de ses méthodes et propriétés, et donc d'utiliser l'ORM Propel directement depuis Flash... Je vous laisse faire vos tests si le coeur vous en dit.

D'autre part, même si la librairie AmfPHP semble un peu passée au niveau architecture, elle reste néanmoins très efficace pour publier des services PHP dans Flash au travers du protocole AMF. J'ai eu vent d'autres librairies comme WebORB ou SabreAMF, mais je ne sais pas vraiment ce qu'elles valent... Des avis dans l'assistance ?

Notes

[1] Du coup, on expose certains scripts AmfPHP, mais la librairie n'est malheureusement que prévue pour fonctionner en ce sens...

[2] Oui, c'est terriblement crade, je ne comprend d'ailleurs pas qu'AmfPHP n'aie pas prévu ce cas de figure...


Ce billet intitulé Partager la session utilisateur entre Flash/Flex et symfony avec AmfPHP a été rédigé par Nicolas Perriault et publié sur le blog Prendre un Café sous licence Creative Commons BY-NC-SA.

Juillet 2008 – PHPortail: Intégrez votre application PHP avec Google Calendar (25/07/08)

Google Calendar permet aux développeurs d'application Web d'accéder aux contenus utilisateurs et aux événements via une interface REST. PHP, avec son extension SimpleXML et la bibliothèque de...

Juillet 2008 – PHPortail: Conception de formulaire Web : résultat de sondage (25/07/08)

Smashingmagazine a lancé un sondage sur les points de conceptions des formulaires Web, et ils en ont tiré un dossier très complet, en deux volets. Tous les aspects de la présentation d'un...

Juillet 2008 – PHPortail: XAMPP pour Linux, Windows et OS-X (25/07/08)

Cette version contient :

* Apache : 2.2.9
* MySQL : 5.0.51b
* PHP : 5.2.6
* phpMyAdmin : 2.11.7
* mod_perl : 2.0.4
* OpenSSL : 0.9.8h
* eAccelerator : 0.9.5.3

Juillet 2008 – PHPortail: Expérience en TDD (25/07/08)

Stefan Priebsch relate son expérience en TDD (Test Driven Developement). En fait, la progression dans l'utilisation de TDD est la partie la plus intéressante de l'article. Il commence par ajouter...

Juillet 2008 – PHPortail: HTML Purifier 3.1.1 (25/07/08)

Cette version est une version de corrections de bogues et de sécurité. Cette version adresses deux vulnérabilités de sécurité, tous deux liés à CSS, et dont l'un s'applique seulement aux...

Juillet 2008 – PHPortail: Sécurité : Scrawlr (25/07/08)

Scrawlr, développé par le groupe de recherche en sécurité "HP Web Security Research Group", est l'abréviation de "SQL Injector and Crawler". Scrawlr va parcourir un site web tout en analysant...

Juillet 2008 – PHPortail: Sécurité : addslashes est encore trop utilisés! (25/07/08)

Mark Kimsal a fait une étude complète sur les différences de protections que proposent les fonctions addslashes, addcslashes et mysql_real_escape_string. C'est toujours la première qui est la...

Juillet 2008 – Glagla.org: Blogmarks pour le 27/07/2008

Microsoft warns Web site owners to prep for IE 8

Although Beta 2 of Internet Explorer (IE) 8 isn’t due out until some time in August, Microsoft is cautioning Web site owners now that they need to be prepping now for possible problems the new, more standards-compliant browser may cause.

As part of this week’s IE June Security Update for IE8 Beta 1, Microsoft introduced a new tag, “IE EmulateIE7″ — which it is counting on to head off some of the incompatibilities the company is anticipating could occur, based on feedback it received from IE 8 Beta 1 testers.

Bon courage à tous les développeurs web !

(categories: )

Liens inter-applications avec Symfony 1.1

Un important travail réalisé pour la sortie de Symfony 1.1 a été le retrait du pattern singleton du framework. On peut maintenant instancier plusieurs objet sfContext par exemple. Cela permet notamment de faire des liens inter-application a peu près proprement. Voici l’avancée de mon travail sur la question :

(categories: )

Google Maps guide aussi les piétons

Google a ouvert à tous les internautes une fonctionnalité qu’il testait en bêta privée depuis plusieurs mois. Lorsqu’un utilisateur de Google Maps fait une recherche d’itinéraire inférieure à 10 kilomètres, le service de cartographie propose désormais un itinéraire pour les piétons, en plus du trajet pour les voitures.

(categories: )

Conventions de programmation : la nécessaire maturité - La Case de l’Oncle Tom

Tout développeur, que ce soit à l’école ou en apprenant sur le tas, écrit du code. J’espère n’avoir perdu personne à ce stade de l’explication ;-)

Inconsciemment on cherchera à utiliser un style d’écriture avec lequel on se sent à l’aise, qu’on pourra et saura relire facilement et dans le meilleur des cas, qui pourra être relu par une autre personne sans avoir à engager d’interprète.

Tout développeur tend donc à utiliser des conventions de programmation (coding standards), que ce soit en HTML, PHP, CSS, JavaScript ou même en Cobol. Et utiliser des conventions, c’est bien !

(categories: )

La réalité augmentée sur iPhone

Ce petit iPhone m’a pas fini de nous impressionner et de donner des idées aux développeurs. La prochaine révolution de son utilisation pourrait bien concerner la réalité augmentée

(categories: )

Royal Pingdom » Data center stories that will make you laugh or cry

The admin robot – reboot via CD-ROM eject

When an important server used for credit card transactions started crashing on a regular basis, and there was no budget in place to replace it, one tech jokingly suggested that they build a robot that could reboot the machine day and night. They ended up doing exactly that. A perfectly aligned piece of machinery ejected a CD-ROM sled exactly on the reset button of the problematic server as soon as it stopped responding to ping. (You have to wonder if MacGyver was involved…)

(categories: )

Commerce en ligne: eBay contraint de réviser son modèle | Rue89

eBay traverse une crise d’identité. La société qui a aidé à façonner le commerce en ligne 1.0 est confrontée actuellement à une dure réalité: le commerce sur le web ne ressemble plus à ce qu’il était il y a une décennie. Les enchères -le cœur de la société- ont perdu l’essentiel de leur pouvoir d’attraction. Et eBay doit se recomposer une image de marque pour préserver ses revenus et ses bénéfices.

(categories: )

blogmarks.net

Article original publié sur Glagla Dot Org. Tous droits réservés.

Blogmarks pour le 27/07/2008

Juillet 2008 – Apprendre-PHP.com: Sortie de WAMP MSS

Tous les développeurs PHP tournant sous windows doivent (ou devraient !) connaître WAMP, une application développée par Romain Bourdon permettant d'installer en quelques clics un espace de développement : PHP 5, MySQL 5, Apache et bien entendu quelques outils indispensables tels que...

Juillet 2008 – Glagla.org: Ce blog est en vacances

et moi également !

Déjà qu’il n’était pas d’une folle activité ! Reprise des hostilités en août après du bateau, des bbq, des la plage et un petit tour à l’hôpital (pour la plomberie trimestrielle).

wé \o/

Article original publié sur Glagla Dot Org. Tous droits réservés.

Ce blog est en vacances

Juillet 2008 – PHPortail: Nombre de visages dans une image (28/07/08)

Robert Eisele s'est intéressé à la bibliothèque OpenCV d'Intel. Cette bibliothèque permet de détecter les visages dans les images.

L'article qu'il présente permet de trouver des visages...

Juillet 2008 – PHPortail: Géolocalisation en PHP (28/07/08)

À l'aide de Net_GeoIP, un paquet PEAR, et des dernières basses de localisations de MaxMind, asvin vous permet de géolocaliser vos visiteurs en 5 lignes de Code. Et il promet aussi de revenir avec...

Juillet 2008 – PHPortail: PHPTV (28/07/08)

La première télévision web en français entièrement consacré à PHP a été officiellement lancée. Elle est une initiative de l'association française des utilisateurs de PHP produite par la...

Juillet 2008 – PHPortail: WordPress 2.6 (28/07/08)

La version 2.6 de WordPress est disponible, presque un mois avant la date prévue.

Cette version introduit un raccourci de publication Tumblr, l’historique des révisions des articles, la...

Juillet 2008 – PHPortail: PHP Melody (28/07/08)

PHP Sugar nous propose une application qui permet à un site internet d'avoir des sons et des vidéos.

La nouvelle version gère beaucoup de choses et propose un large choix dont vous pouvez vous...

Juillet 2008 – Kamelot Blog: Après 7 ans, une page se tourne sur #phpFrance. Je remet mon statut de 500 à Dinesh.

Hello,

If you would like to confirm the "Manager Change" request for channel '#phpfrance',
thus giving it PERMANENTLY to user 'dinesh' who is a level 499 on #phpfrance,

then click on the following link to confirm (say YES) within SIX HOURS, after that it will be too late : 

http://cservice.undernet.org/live/forms/confirm_mgrchange.php?ID=xxxxx

if you dont want this request to be processed, just IGNORE this mail and DO NOT click on the above URL.

The Undernet Channel Service.

Successfull Confirmation! 

You have confirmed your 'Manager Change Request' for channel

Your request will be reviewed by CService Admins, Please allow 3-5 days for your request to be processed.

Je n'étais plus réellement présent depuis plus d'un an,dans un premier temps, fatigué des disputes prépubères des membres, puis d'avoir décroché et consacré mon temps à d'autres choses, je ne suis jamais réellement revenu.

10 d'irc sur ce channel qui m'aura accompagné dans mes débuts en PHP. Du temps où il existait une communauté php. Du temps où phpFrance était avant tout un site (Aujourd'hui c'est surtout un excellent et gros forum). Je retriendrais surtout mes discussion avec Damien, Ganf, Didou, Cyruss, flyingcow, ... et d'autres encores

Juillet 2008 – PHPortail: Sensio Labs supporte le projet Doctrine (29/07/08)

« Jonathan Wage, le développeur principal de Doctrine, rejoint les équipes de Sensio Labs aux Etats-Unis.

Doctrine est un projet Open-Source écrit en PHP permettant de manipuler une base de...

Juillet 2008 – PHPortail: PHPIDS 0.5.2 (29/07/08)

Tandis que la version 0.5.1 ajoutait plusieurs filtres pour des attaques pratiquement ésotériques ainsi que des identifiants pour les filtres, la version 0.5.2 se consacre à l'augmentation de...

Juillet 2008 – PHPortail: PHP 5.3 alpha1 (29/07/08)

La version de PHP 5.3 en alpha 1 vient de sortir.

Cette nouvelle version permet de découvrir les nouvelles possibilités et pour ceux qui voudront tester cette nouvelle version, de pouvoir...

Juillet 2008 – PHP Québec: 8/1 18:30 PHPBeer - Montreal

L’équipe de PHP Québec vous invite à célébrez le 5ième anniversaires des légendaires PHP Beer.

Ce vendredi 1 Août, joignez vous à nous pour une autre légendaire édition de PHP Beer. Les PHP Beers sont un excellent moyen d'élargir votre réseaux et échanger sur divers sujet et peut être parler de PHP. Invitez vos amis collègues de travail à venir prendre un verre!

Venez nous y rejoindre vers 18:30 au Bar le St-Sulpice. Si vous ne nous trouvez pas vous pouvez contacter Yann Larrivée au 514-581-8497


Confirmer votre présence sur :
Upcoming : http://upcoming.yahoo.com/event/945161
FaceBook : http://www.facebook.com/editevent.php?guests&eid=19229919916


Ou : St-Sulpice
1680 Rue Saint-Denis, Quartier Latin
Montreal, Québec
Quand : 1 Août à 17:30


Événement avenir :
1 Août : PHP Beer Montreal
2 Août : BBQ PHP Québec
8 Août : Début de l'appel aux Conférenciers pour la conférence PHP Québec 2009
4 Septembre : Première rencontre mensuel de la saison 2009
12-14 Septembre : CodeFest 2.2

======================

The PHP Quebec team invites you to celebrate the 5th aniversary of the legendary PHP Beers!

This friday join us for a pint or two at the St-Sulpice. PHP Beers are a great way to do networking, meet with peers talk about random topics and maybe about PHP. Invite your friends, co-workers to have a pint with us.

We will be meeting a 6:30pm at the St-Sulpice. If you don't find us you can contact Yann Larriveé by calling 514-581-8497

Please confirm your presence on:
Upcoming : http://upcoming.yahoo.com/event/945161
FaceBook : http://www.facebook.com/editevent.php?guests&eid=19229919916

Where : St-Sulpice
1680 Rue Saint-Denis, Quartier Latin
Montreal, Québec
When : 1 Août à 17:30

Events to come:
August 1st : PHP Beer Montreal
August 2sc : BBQ PHP Québec
August 8th : Début de l'appel aux Conférenciers pour la conférence PHP Québec 2009
September 4th : Première rencontre mensuel de la saison 2009
Septembre 12-14th : CodeFest 2.2
Categories