Dans un de mes développements actuel, je me suis trouvé confronter dans le développement à utiliser du code d'une autre société sous la forme d'un fichier binaire.
Dans le projet, je dois utiliser impérativement une redirection automatique.
La pensée première concerne d'utiliser la fonction header de PHP. Mais dans la réalisation d'une suite logique, si vous ne possédez pas le contrôle complet de la chaine, cette fonction peut ne pas fonctionner, et il faut trouver d'autres solutions.
L'autre fonction possible, concerne la fonction include ou require en PHP, mais un risque de voir des traces dans la barre de navigation, est fortement déconseillé.
Heureusement il existe certaines fonctions PHP, qui possèdent l'équivalence en javascript et se traduisant comme ceci :
<SCRIPT LANGUAGE="JavaScript">
document.location.href="http://www.nouveau_lien.com"
</SCRIPT>
En résumé, en informatique il existe toujours une solution, d'ailleurs, je me rappele d'un projet qui a encore grossi... "PHP.Js" parlé voici il y a quelques mois sur Nexen.net
Dans un de mes développements actuel, je me suis trouvé confronter dans le développement à utiliser du code d'une autre société sous la forme d'un fichier binaire.
Dans le projet, je dois utiliser impérativement une redirection automatique.
La pensée première concerne d'utiliser la fonction header de PHP. Mais dans la réalisation d'une suite logique, si vous ne possédez pas le contrôle complet de la chaine, cette fonction peut ne pas fonctionner, et il faut trouver d'autres solutions.
L'autre fonction possible, concerne la fonction include ou require en PHP, mais un risque de voir des traces dans la barre de navigation, est fortement déconseillé.
Heureusement il existe certaines fonctions PHP, qui possèdent l'équivalence en javascript et se traduisant comme ceci :
<SCRIPT LANGUAGE="JavaScript">
document.location.href="http://www.nouveau_lien.com"
</SCRIPT>
En résumé, en informatique il existe toujours une solution, d'ailleurs, je me rappele d'un projet qui a encore grossi... "PHP.Js" parlé voici il y a quelques mois sur Nexen.net
Eclipse PHP Development Tools 2.0 est désormais disponible au téléchargement.
Totalement compatible avec les standards d'Eclipse, cette nouvelle version d'Eclipse PDT permet aux développeurs PHP de profiter d'un grand choix de projets proposés par Eclipse, tels que Web Tools Project, Dynamic Language Toolkit, etc. pour une développement plus rapide et facile. PDT 2.0 propose également un support de Programmation Orientée Objet (POO) en PHP. PDT est un outil de développement open source qui fournit toutes les possibilités de rédaction de code nécessaires pour débuter avec les applications PHP.
PDT 2.0 est conçu sur des principes de base différents de ceux du PDT 1.0. Par exemple, des techniques différentes ont été utilisées pour modéliser les projets de l'espace de travail. PDT 2.0 utilise un mécanisme d'indexation et de cache pour une meilleure performance et expérience avec l'aide technique et la navigation. De plus, depuis que PHP fournit des aspects Orientés Objet tels que héritage et polymorphisme, PDT 2.0 fournit à son tour des caractéristiques comme hiérarchie entre différents types, indicateurs d'override et navigation entre types pour les programmeurs qui utilisent ces propriétés du langage.
Un webinar d'introduction à Eclipse PHP Development Tools 2.0 sera organisé par Zend Technologies le Mercredi 21 Janvier à 9h00 de San Francisco. Plus d'informations sur le site officiel de l'événement.
Vous pouvez télécharger Eclipse PDT 2.0 à partir du site officiel d'Eclipse ou du site officiel de Zend (inclue Eclipse PDT et Zend Debugger qui permet aux utilisateurs d'exécuter un debugage local et distant).
Pour cette nouvelle année, Jelix nous propose deux nouvelles versions : la version stable 1.0.7 et la seconde RC de Jelix 1.1.
Pour ceux se demandant ce que vaut Jelix, il est bon de savoir que ce framework se veut performant, simple, flexible, robuste et pragmatique.
Un court résumé d'un point de vue utilisateur, présentant les points forts, est disponible ici, tandis qu'une présentation plus complète des caractéristiques est disponible sur le site officiel.
Pour en revenir aux deux nouvelles versions :
La 1.0.7 se contente simplement de corriger des bugs sans gravité et peut être mis à jour sans problème depuis la 1.0.6 en remplaçant le répertoire lib de jelix par celui contenu dans le paquet jelix 1.0.7 et en supprimant tous les fichiers dans le répertoire temp.
Quant à la 1.1RC2, nous pouvons retenir deux points intéressants en plus de la corrections de bugs mineurs :
- la compatibilité avec les bibliothèques externes a été améliorée, notamment avec celles définissant une fonction __autoload() ainsi que les bibliothèques javascript utilisant jQuery,
- deux nouvelles fonctionnalités permettant de réaliser une interface d’administration très rapidement ont été conçues.
eZ Systems vient d'annoncer la sortie de la version 2008.2 du package eZ Components.
eZ Components est un package de libraires prêtes à l'emploi qui apportent aux développeurs des outils de mise en cache, d'authentification, d'interaction avec la base de données, de templates, etc.
Les principales nouveautés de la version sont :
Cette version corrige également 55 bugs.
L'articleComme ils l'avaient fait il y a peu pour WordPress et Drupal, Smashing Magazine à fait le tri dans l'énorme volume d'informations et de ressources disponibles pour Joomla afin d'établir une collection organisée des meilleurs ressources le concernant.
On retrouvera dans l'article :
Le nouveau numéro de PHP solution vient de sortir,de nombreux sujets sont traités :
Le nouveau numéro de PHP solutions vient de sortir,de nombreux sujets sont traités :
Cherchant des méthodes pour optimiser une boutique en ligne utilisant Magento, je suis tombé sur le billet Performance is Key! - Notes on Magento’s Performance sur le blog officiel de Magento. Sur le fond, rien d'extraordinaire mais de bons conseils valables pour la plupart des applications LAMP :
En revanche, sur la forme je suis un grand fan des captures d'écran pour montrer les configurations optimales avec en prime le correcteur orthographique activé :-)
La nouvelle version de Symfony est disponible.
Cette nouvelle version corrige plus d'une quarantaine de bugs répertoriés, un nombre assez important pour une nouvelle version.
Les principales corrections portent sur :Pour rappel, Doctrine est une couche ORM rapide et performante, basée sur le pattern ActiveRecord bien connu des adeptes de Ruby on Rails, pouvant être utilisée en lieu et place de Propel, l'ORM natif embarqué avec Symfony par défaut. Si vous souhaitez apprendre à l'utiliser, vous pourrez en savoir plus ici ou là.
Pour la mise à jour de votre projet Symfony, suivez l'une des procédures décrites dans l'article source (par svn ou pear).
N'oubliez pas de vider votre cache après avoir effectué cette mise à jour.
Voici un probablement inutile mais génial Moteur de stockage MySQL ... en PHP par Johannes Schlüter
Je ne me casse pas la tête à le traduire. c'est très facile à comprendre.
Johannes Schlüter sur les Connecteurs MySQL et est étudiant à l'Université des Sciences Appliquées de Munich . Il est release manager de PHP 5.3.
Beaucoup trop de tuto ou articles que je lis dans la presse (Programmez, PHPSolution, ...) ou sur le net, présentent le "comment bien faire" en partant de zéro.
Trop peux parlent de "comment transformer". Il y a énormément d'existant qui est là et qui ne peut être simplement mis à la poubelle parce que on a trouvé une meilleures méthode.
Je voulais commencer à écrire dans ce sens des réflexions sur ce qui porte à la pratique de la transition et voilà que Sébastien Piraux, partage un article sur son compte fb.
C'est sur kitpages et ca explique Comment basculer un code PHP en UTF-8
Voici son intro
Si vous souhaitez coder un outil ou un site qui fonctionne avec des caractères ésotériques (Chinois, Arabe, Indien,...), vous devez changer la façon de coder vos caractères et de les transmettre sur le réseau. Cette façon de coder les caractères s'appelle le Charset. Le plus courant par nos latitudes est le charset ISO-8859-1. Il contient les caractères européens.
Pour écrire des textes en chinois, arabe, hébreux, indien, japonais... vous devez utiliser un charset qui permettent de coder tous les caractères de ces langues. Le charset le plus standard pour coder tout ça est UTF-8.
En attendant que je commence à m'y mettre, si vous avez d'autre ressources du style n'hésitez pas à me les faire connaitre.
Pendant trois jours, les experts mondiaux du PHP et des bases de données
seront réunis pour partager leur expérience, proposer des solutions à
des problèmes récurrents dans l'industrie et présenter de nouvelles
techniques qui vous permettront de rester à l'avant-garde. C'est
l'occasion rêvée de rencontrer ces experts, de parfaire vos
connaissances et d'élargir votre réseau de contact.
Quand : Du 4 au 6 mars 2009
Où : Au centre-ville de Montréal, à l'hôtel Hilton Bonaventure, au 900 de la Gauchetière Ouest
Quoi : Pendant trois jours, les experts mondiaux du PHP et des bases de données
seront réunis pour partager leur expérience, proposer des solutions à
des problèmes récurrents dans l'industrie et présenter de nouvelles
techniques qui vous permettront de rester à l'avant-garde. C'est
l'occasion rêvée de rencontrer ces experts, de parfaire vos
connaissances et d'élargir votre réseau de contact.
Cette année l'organisation propose une formule améliorée :
- 3 jours, plus de 50 conférences
- Des Ateliers
- Spécial CMS et Frameworks
- Un salon de l'emploi
- Un cocktail
- Des activités de clôture
Pour plus d'informations ou pour vous inscrire, visitez le site Web de
la Conférence PHP Québec 2009 au :
http://conf.phpquebec.com/
Faites vite, les places sont limitées!
Proposé par Francis Begin
La version 2.0.3 de SPIP est disponible depuis ce week-end. Celle-ci n'apporte que des corrections mineures.
Voici l'ensemble des corrections :
c'est fou, en 1 gros mois, la communauté Joomla par l'intermédiaire de son CMS développé en PHP, a beaucoup évolué
La création d'une association sous le nom AFUJ (Association francophone des utilisateurs de Joomla!)
La nouvelle verison du livre blanc Joomla 1.5 pour les Nuls
Info@Hand 6.0 va s'intégré aussi bien Google Agenda et Joomla... La nouvelle version qui sera disponible dans les prochains jours est un logiciel open source qui s’enrichit d’un agenda 2.0, de nouvelles possibilités de gestion des droits d’accès et d’utilisation, d’un portail self-service compatible avec Joomla 1.5 et de fonctionnalités avancées de gestion de projets
c'est fou, en 1 gros mois, la communauté Joomla par l'intermédiaire de son CMS développé en PHP, a beaucoup évolué
La création d'une association sous le nom AFUJ (Association francophone des utilisateurs de Joomla!)
La nouvelle verison du livre blanc Joomla 1.5 pour les Nuls
Info@Hand 6.0 va s'intégré aussi bien Google Agenda et Joomla... La nouvelle version qui sera disponible dans les prochains jours est un logiciel open source qui s’enrichit d’un agenda 2.0, de nouvelles possibilités de gestion des droits d’accès et d’utilisation, d’un portail self-service compatible avec Joomla 1.5 et de fonctionnalités avancées de gestion de projets
Comme je le disait ici, j'avais envie d'écrire à propos d'astuces sur des pratiques qui permettent la transition.
Une transition de longue durée est une amélioration qui ne peut être faite en un coup. Partout où j'ai travaillé, que ce soit chez delcampe, sur claroline, sur arena51 sur kidcity, the World Scout Shop ... c'est toujours la même raison. Il y a des résidus d'erreurs du passé, pour lesquelles, un jour, il a été prouvé/trouvé une meilleurs façon de faire mais il est inconcevable de s'y atteler en exclusivité et d'arrêter tout le reste le temps d'appliquer cette nouvelle façon de faire.
Généralement ça concerne les performances, la sécurité, les normes d'écriture du code ... Bref au niveau fonctionnel. Des éléments qui changent peu de manière "visible", du coup on diffère. Ou pire, on s'en fait deuil en disant "On ne peut pas se permettre de consacrer tant de temps à cela, ça fonctionne sans".
Dans ce cas, la transition permet de créer les conditions pour faire selon la nouvelle méthode. On se fixe alors une règle du style : dès qu'on touche à un script, on applique la nouvelle façon de faire. Le vieux code lui reste comme il est, on ne va pas risquer de casser quelque chose qui fonctionne et auquel on a pas besoin de toucher.
J'utilise cela parfois pour pouvoir faire des mises à jour sans interruption de service. C'est à dire ordonnancer les remplacements de fichiers pour que à chaque instant le code soit cohérent.
Par exemple, je met à jour une classe et un code qui l'utilise.
Note pour des applications distribuées c'est moins évident. On doit plutôt voir ça en "upgrade" automatique. On a une transition de courte durée ... "qui reste longtemps" sur le serveur. On fait une mise à jour (release) préparatrice et puis une seconde finalisant la transition.
On va plutôt dire qu'il y a des inconvénients dans les transition à longue durée qu'il faut éviter et que ca implique donc que la durée ne soit pas trop longue:
Il y a surement aussi des erreurs ou de mauvais choix dans ma façon de faire. C'est aussi pour cela que j'en parle sur ce blog, pour en discuter et les améliorer.
Je parle pas des remarques d'éventuels intégristes ou de jeunes sortis de l'école qui pense que dans l'informatique on passe son temp à créer du neuf.
- iPhone
- Opera Mini
- Android
- Blackberry
A l'heure où la sécurité prend une place de plus en plus importante dans notre société, un article bienvenu, publié sur www.internetnews.com, annonce l'apparition d'un top 25 d'erreurs de programmation les plus courantes.
Cette liste a été réalisée par plus d'une trentaine de sociétés, agences, entreprises ou universités expertes dans le domaine de la sécurité Internet parmi lesquelles on pourra remarquer la "Information Assurance Division" de la NSA ou encore Microsoft.
De ces erreurs découlent des problèmes de sécurité affectant le site ou application en elle-même, mais affectant aussi la sécurité de l'ordinateur du visiteur. Un chiffre intéressant à retenir est que parmi toutes ces erreurs, deux d'entre elles seulement conduisent à plus de 1.5 millions de sites ayant une faille de sécurité durant l'année 2008.
Ces 25 erreurs sont décomposées en 3 catégories : Interaction non sécurisée entre les composants, Administration de Ressources Risquées et Défenses Poreuses. La liste détaille ces erreurs et propose une solution pour chacune d'elles.
Dans chacune de ces catégories, les programmeurs aguerris retrouveront certaines erreurs bien connues, telles que l'absence de contrôles après envoi d'un formulaire, l'injection SQL ou les failles XSS, mais pourront en découvrir d'autres moins connues mais tout aussi dangereuses.
Bon courage pour la sécurisation de votre site !
Article original publié sur Glagla Dot Org. Tous droits réservés.
L'équipe de Drupal vient de sortir une importante mise à jour de sécurité. Il est très fortement recommandé de faire la mise à jour.
Cette mise à jour corrige des failles de sécurité critiques mais n'ajoute aucune fonctionnalité.
Aucune fonctionnalité ne sera ajoutée avant la sortie prochaine de Drupal 7.0.
Zend_Tool est un système de construction en ligne de commande appliquant des actions (tel que créer, supprimer) à des ressources (projet, fichier, dossier).
Vous devrez dans un premier temps, récupérer Zend_Tool, puis configurer votre serveur afin d'utiliser Zend_Tool en ligne de commande.
Il devient alors très simple de créer une application de type "hello world" utilisant l'arborescence conseillée par le Zend Framework ou un nouveau controller.
Première astuce à propos des Refactoring en "transistion".
Le renommage des fonctions et variables est une tâche courante de refactoring.
Voici une technique douce quand on ne peut être sur de renommer partout d'un coup. (Il arrive qu'un search and replace puisse causer des "dégâts", qu'il faille vérifier au cas par cas.
Je l'ai fortement utilisée pour la transformation qui effectuaient un affichage et que je voulais transformer en return.
Typiquement
[php]
<?php
/**
*
* affiche la chaine à propos de foo
*
* @return true;
*/
function print_foo()
{
echo 'foo';
return true; //<- souvent manquant ceci dit
}
// devient
/**
* construit la chaîne à propos de foo
*
* @return string chaîne à propos de foo
*
*/
function getHtml_foo()
{
$html = 'foo';
return $html;
}
?>
Le problème rencontré c'est tout ces print_foo() qui trainent dans le code.
Généralement je laisse les deux fonctions, très proches dans le fichier.
La nouvelle fonction fait le boulot, l'ancienne demande à la nouvelle de sous-traiter et logue avec un trigger_error le fait qu'on l'utilise encore.
J'ai ai mis un peu trop dans le trigger, je vous conseille les 4 premiers morceaux
[php]
<?php
/**
*
* Affiche la chaine construite à propos de foo
*
* Cette fonction n'est plus à utiliser.
* utilisez un echo print_foo();
* L'utilisation de cette fonction est reprise dans les logs .
*
* @deprecated
* @see print_foo()
*
* @return true;
*/
function print_foo()
{
$db = debug_backtrace();
trigger_error(
'print_foo()! is use '
. ' funct : ' . $db[1]['function'] . '()'
. ' file : ' . $db[1]['file']
. ' line : ' . $db[1]['line']
# . 'PHP_SELF : '.$_SERVER['PHP_SELF']
# . date('Y-m-d H:i:s') . "\n"
# . $_SERVER['SERVER_ADDR'] . "\n"
# . $_SERVER['REQUEST_URI'] . "\n"
, E_USER_WARNING);
echo getHtml_foo();
return true;
}
?>
Ensuite tous les matins un petit grep sur le log
grep print_foo | cut pour retirer les dates | sort -u
retourne la liste du boulot pour la journée :) vous en attaquez 3 par jour et ça va avancer tout seul.
Si vous travaillez avec une communauté open source, il n'est pas bête de publier cette liste, et de récolter les patches.
Un autre cas d'utilisation : un fichier qui ne devrait plus être utilisé.
Vous pouvez le retirer simplement de votre serveur et subir les foudres s'il est encore appelé quelque part et que son absence provoque un fatal error ou alors lui mettre un espion.
[php]
<?php
mail( 'christophe@gesche.org'
, 'ce foutu fichier reste appelé ici !!!!!'
, 'PHP_SELF : '.$_SERVER['PHP_SELF']
. "\n"
. date('Y-m-d H:i:s') . "\n"
. $_SERVER['SERVER_ADDR'] . "\n"
. $_SERVER['REQUEST_URI'] . "\n"
. var_export(debug_backtrace(),1)
. "\n"
);
trigger_error( 'ce foutu fichier reste appelé ici !!!!!'.$_SERVER['SERVER_ADDR'] .' ' .date('Y-m-d H:i:s'),E_USER_WARNING);
?>
Le site d'IBM a publié la 3eme partie de sa présentation concernant la version 5.3 de PHP. Celle-ci concerne la nouvelle fonctionnalité très attendue : les espaces de noms.
Cet article rappelle en premier lieu la bonne façon de définir un espace de nom. Nous retiendrons :
- Ne pas afficher de sortie avant la définition de l'espace de nom,
- Ne pas ajouter d'espace devant la balise ouvrante de php lors de la définition de l'espace de nom.
Suite à cela, il nous présente les différentes façons d'utiliser les espaces de noms, que ce soit l'utilisation d'alias ou l'appel de fonctions identiques provenant d'espaces de noms différents. De plus, l'article détaille la manière de parcourir les espaces de noms ayant un préfixe identique en utilisant le séparateur "\".
L'article finit avec un exemple de réécriture de fonctions dans un espace de nom, fonctionnalité qui pourra être intéressante afin de modifier certaines fonctions globales uniquement dans l'espace courant tout en gardant des noms de fonctions identiques aux originales.
Pour les lecteurs ayant raté les deux premières parties, sachez que la première partie concerne les changements effectués sur la programmation orientée objet et la seconde détaille le fonctionnement des closures et fonctions lambdas (souvent appelées fonctions anonymes).
Partie 1 : Changements POO
Partie 2 : Closures et fonctions lambdas
Partie 3 : Espaces de noms
Article original publié sur Glagla Dot Org. Tous droits réservés.
CMS Made Simple 1.5.2 "Caguas" est maintenant disponible pour téléchargement
Il s'agit d'une version corrective.
Un grand nombre de dysfonctionnements ont été corrigés. Certaines corrections etaient planifiées dans le centre de développement (Forge),et d'autres ont été ajoutées grâce aux signalements des membres de la communauté.
Ce paquet est certainement la version la plus stable et la plus riche en fonctionnalités meme si la seule véritable nouveauté de la 1.5.2 est la balise {page_image}.
Prévisions CMS Made Simple version 2:
CMS Made Simple bien plus qu'un CMS, c'est un framework complet nommé "SILK".
ADODB, ORM, Smarty, MVC et autres Design Patterns, jQuery, OpenID etc...
A propos de CMS Made Simple
CMS Made Simple est un système de gestion de contenu Open Source, distribué sous license GNU/GPL, extensible (programmation orienté objet), PHP / MySQL, simple, efficace et facile à utiliser.
Il permet la conception et à la mise à jour dynamique de site web de toutes tailles, personnels ou communautaires, des portails d'entreprise, associatifs ou corporatifs, ou encore de relation citoyenne pour les administrations et collectivités. Vous pourrez ainsi mettre à disposition de vos visiteurs des services comme des forums, une boutique en ligne, des formulaires, des galerie photos et vidéo, etc....
Ce logiciel libre a été plusieurs fois récompensé aux CMS Award comme l'un des meilleurs et des plus prometteurs CMS Open Source.
http://www.cmsmadesimple.fr
Proposé par Eric
Aux oubliettes depuis quelque temps, c'est une version 3.0 qui vient de sortir
La version 3.0 d'EasyPHP est disponible depuis le 7 janvier. C'est une surprise que je viens de découvrir dans la section téléchargements du site www.easyphp.org. Le forum de cette nouvelle version a été ouvert aujourd'hui.
http://www.easyphp.org/index.php
Proposé par Hervé
La nouvelle version de phpMyAdmin est disponible.
Cette version ne fait que corriger quelques bugs au niveau de la structure ou de la mise à jour des tables.
Elle améliore également l'export YAML et le SQL généré.
Enfin deux langues (tchèque et hollandais) sont mises à jour.
Zend Technologies a prévu plusieurs webinars pour la fin du mois de janvier et pour le mois de février.
Parmi eux vous trouverez :
Vous pouvez consulter la liste complète des événements prévus en français ici, ou ceux en anglais ici.
Popsy Team avec la participation de Moi meme (Hello du groupe Sector One) organisent le 6 février une soirée à la cantine sur le theme "Demo in Paris".
Cet évènement vous permettra de découvrir l'univers de la démoscène...
La demoscene est une communauté, principalement européenne, créée au début des années 80.
En France cette communauté de passionnés d'informatique se retrouvait sur le minitel sur le 3615 RTEL.
A cette époque les machines étaient limitées en mémoire, en nombre de couleurs affichées à l'écran et des possibilités sonores plus que réduites.
Ces passionnés de création numérique tentaient de surpasser ces restrictions purement techniques grâce à leur imagination.
ils arrivaient par exemple à afficher des images de 256 couleurs alors que techniquement seulement 16 couleurs était accessible simultanement.
De nos jours avec la puissance des nouvelles technologies, que sont-ils devenus?
Actifs et retraités de la demoscene retrouvons-nous dans une ambiance conviviale ou venez découvrir notre univers durant la soirée "Demo In Paris".
Pour plus d'information... cliquez ici
Voila, à force d'y penser, j'ai fini par développer un Planet eZ Publish francophone, surtout que ce n'était pas grand chose en temps de développement, tout au plus l'équivalent de quelques jours, "graphisme" compris ! Toute ressemblance avec le backoffice d'un célèbre outil de gestion de contenu d'origine norvégienne est une pure coïncidence ;-)
À ma connaissance, il s'agit du troisième Planet utilisant eZ Publish après Planet eZ Publish (l'orginal :)) et le planet Fedora-fr. Si vous avez un blog francophone parlant d'eZ Publish, n'hésitez pas à inscrire votre flux (RSS ou Atom) !
Pour les curieux, le dépôt SVN avec l'ensemble du code est accessible en lecture. Je ferai certainement un article plus technique dans les jours qui viennent.
Popsy Team avec la participation de Moi meme (Hello du groupe Sector One) organisent le 6 février une soirée à la cantine sur le theme "Demo in Paris".
Cet évènement vous permettra de découvrir l'univers de la démoscène...
La demoscene est une communauté, principalement européenne, créée au début des années 80.
En France cette communauté de passionnés d'informatique se retrouvait sur le minitel sur le 3615 RTEL.
A cette époque les machines étaient limitées en mémoire, en nombre de couleurs affichées à l'écran et des possibilités sonores plus que réduites.
Ces passionnés de création numérique tentaient de surpasser ces restrictions purement techniques grâce à leur imagination.
ils arrivaient par exemple à afficher des images de 256 couleurs alors que techniquement seulement 16 couleurs était accessible simultanement.
De nos jours avec la puissance des nouvelles technologies, que sont-ils devenus?
Actifs et retraités de la demoscene retrouvons-nous dans une ambiance conviviale ou venez découvrir notre univers durant la soirée "Demo In Paris".
Pour plus d'information... cliquez ici
Smashing Magazine publie une liste de 50 tools utiles pour le développement PHP.
On y trouve des grands classiques, mais avec 50 il y en a peut-être que vous ne connaissez pas encore.
C'est "50 Extremely Useful PHP Tools"
J'utilise
Première étape de mon passage en revue des classes de PEAR.
Les Package PEAR pour l'Authentification
Un peu plus sur le sujet
Le site www.smashingmagazine.com publie un article proposant une liste de 50 outils permettant de faciliter le développement avec PHP.
On y retrouve des outils classiques tels que phpMyAdmin, des outils de debugage très pratiques comme PHP_debug ou encore des outils aussi indispensables que firebug pour Firefox.
Ces outils sont regroupés en thème :
Déboguer son code PHP n'est pas toujours évident.
En phase de développement il est souvent utile d'afficher le contenu de variables PHP ($_POST, $_COOKIE, $_REQUEST, ...) ou certaines erreurs ( en cas d'utilisation de "error_reporting(E_ALL)" ).
Une technique consiste à afficher ces variables dans la page elle même. Mais on peut aussi utiliser la barre de débogage de PHP_Debug.
Elle s'insère par dessus votre page, elle ne modifie par l'affichage de la page, elle peut être réduite ou fermée à tout moment et elle contient une multitude d'informations utiles (logs des alertes, temps d'exécution du script, contenu des variables super globales, liste des requêtes SQL exécutées, ...). Cet outil qui devient très vite indispensable est directement inspiré de la barre de débogage de symfony framework.
Article original publié sur Glagla Dot Org. Tous droits réservés.
La prochaine version du framework symfony est annoncée pour Novembre 2009 au plus tôt. Patience donc !
Pas de grosses nouveautés au programme mais un système de billets pour émettre des suggestions a été mis en place sur le site officiel. Vous trouverez des informations sur cette nouvelle version ici.
Rendez-vous à cette adresse pour déposer des suggestions à l'équipe de développement. Quand au plus curieux d'entre vous, ils pourront suivre l'avancement du développement ici.
Cette série de 3 billets présente les principaux points de la conception et de la réalisation du Planet eZ Publish.fr avec eZ Publish.Il s'agit d'un site simple à tous les niveaux, mais il concentre tout de même quelques astuces que j'espère intéressantes !
I. Organisation et Import des articles
II. Modules/vues sur mesure et templates
III. Performances : caches et compagnie
Pour tout site réalisé avec le CMS eZ Publish, la détermination de l'arborescence ainsi que la définition des classes de contenus est l'étape préliminaire nécessaire. Dans le cas du Planet, le cahier des charges est assez simple, il s'agit d'importer des billets (classe Post) de divers blogs (classe Site) francophones consacrés à eZ Publish. Je souhaitais aussi pouvoir gérer une liste de Planets, le Planétarium, (classe Site également) avec pourquoi pas l'affichage des derniers billets de chaque Planet.
J'ai aussi créé une classe Planete qui sert de page d'accueil au Planet actuel. Le but de la création de cette classe est multiple :
À cela, il faut ajouter les inévitables pages À propos (classe Page) et formulaire de contact (classe Formulaire de contact) ainsi que la classe Folder existante pour des questions d'organisation du contenu et de gestion de cache.
À partir de cette liste de classes, l'arborescence est assez « évidente ». Le découpage se fait naturellement et en plus il permet de gérer facilement les caches template (cache-block) en évitant que tous les blocks n'expirent avec la racine. Elle est aussi prévue pour faciliter la construction du menu horizontal.
Contrairement à un site classique, le contenu sur un Planet provient d'autres sites via leur flux RSS. Ma première idée était d'utiliser le mécanisme d'import RSS d'eZ Publish. J'avais commencé par écrire un Content Edit Handler qui, pour chaque objet Site, créait un import RSS utilisé ensuite par le script de cronjob rssimport.php. Mais la fonctionnalité d'import RSS souffre de plusieurs limitations / bugs gênants :
Le script rssimport.php me semble par ailleurs assez mal écrit, du coup, j'ai choisi d'en écrire un autre quasiment from scratch basé sur le composant Feed des eZ Components et le mapping entre champs du flux et champs des objets Post est fait dans un simple fichier de configuration.
Parallèlement au script d'import RSS, j'ai aussi écrit un script de nettoyage des articles issus des Planets puisque seuls les 5 derniers de chaque source sont liés sur la page Planétarium, autant ne pas encombrer la base pour rien.
Suite de la série de billets sur la réalisation du Planet eZ Publish.fr avec dans celui ci quelques notes sur les modules/vues spécifiques ainsi que sur la réalisation des templates.
I. Organisation et Import des articles
II. Modules/vues sur mesure et templates
III. Performances : caches et compagnie
Pour le moment, seuls deux vues spécifiques sont utilisées sur le site.
Cette vue sert à générer le flux RSS du Planet. Comme pour l'import RSS, le composant Feed des eZ Components est utilisé. L'intérêt principal par rapport à l'export RSS de base est la possibilité d'ajouter la balise dc:author avec le nom du site (l'objet parent dans le cas du Planet). Cette vue implémente également un système de cache sur le même principe que le cache de vue. Ce cache est vidé et est re-généré par le script d'import RSS alors que le cache de l'export RSS par défaut expire au bout d'un temps fixe.
Cette vue reproduit la vue de recherche par défaut en forçant la recherche dans une sous-arborescence sans avoir besoin de passer le paramètre SubTreeArray. Contrairement à content/search, elle permet également l'utilisation des persistent variables comme sur content/view.
Les templates pour ce site sont assez classiques et plutôt simples compte tenu de la charte graphique basique. Seule « astuce », chaque vue full fixe deux entrées dans les persistent variables ce qui permet de générer un titre et une description pertinents sans aucun fetch supplémentaire dans le pagelayout qui serait synonyme de requêtes SQL et/ou de cache supplémentaire à gérer (voir les dernières lignes du template planet.tpl et les premières du pagelayout.tpl par exemple).
Le seul opérateur spécifique est l'opérateur clean_rewrite_xhtml utilisé à la place de l'opérateur wash pour afficher les attributs Text block contenant le texte issu des flux RSS. Cet opérateur a plusieurs fonctions :
Suite et fin de la série d'articles sur la réalisation du Planet eZ Publish.fr avec les questions de performances et de caches.
I. Organisation et Import des articles
II. Modules/vues sur mesure et templates
III. Performances : caches et compagnie
La gestion des caches « standards » est un point important pour les performances. La vue full (zone entourée de jaune dans la capture d'écran ci-dessus) est assez logiquement l'affichage de la liste des articles, elle est automatiquement mise en cache (cache de vue ou cache de contenu). Pour que la page d'accueil et les pages Blogs et Planétarium soient à jour sans opération manuelle, il m'a fallu ajouter deux règles dans une surcharge du fichier viewcache.ini pour que le cache de vue soit vidé lors de l'ajout d'un objet de la classe Post ou de la classe Site.
Les menus (menu horizontal, liste des blogs, liste des planets) sont chacun entourés d'une instruction cache-block (cadres rouge) expirant avec la partie de l'arborescence qu'ils affichent. Et pour aller encore un peu plus loin, chaque article est lui-même individuellement mis en cache par un cache-block. Cela permet de limiter le nombre de requêtes SQL nécessaires à la re-génération de la vue full lors de l'ajout ou de la mise à jour d'un article ainsi que sur l'affichage des résultats de recherche.
Compte tenu du faible nombre de pages, j'ai choisi d'ajouter du cache statique en plus des caches classiques sur l'ensemble du site. 0,05 seconde pour sortir une page les mauvais jours, difficile de faire mieux ! Une des limitations du cache statique est l'impossibilité de pré-générer les pages avec paramètres (par exemple /page/(offset)/10), pour éviter ce problème, j'ai ajouté les pages principales (avec ou sans paramètres) dans les URLs à générer systématiquement. Ainsi à la moindre modification de contenu, le script de cronjob staticcache_cleanup.php génère la quinzaine de pages du site. Ce qui a aussi l'avantage de pré-générer les zones en cache détaillées précédemment pour les résultats de recherche par exemple.
Le temps de génération (ou de distribution) des pages n'est qu'une petite partie du temps total d'affichage de la page. Les Yahoo! Performances Rules ou le livre High Performances Web Sites listent les principales recommandations pour améliorer ce point.
Planet eZ Publish.fr est hébergé sur ma Dédibox, la configuration des entêtes d'expiration et de la compression GZip des éléments textuels sont effectifs. La charte graphique simple a également simplifiée la mise en place de la technique CSS Sprites pour limiter le nombre de requêtes HTTP nécessaire à l'affichage d'une page. Tout ceci donne un beau Performance Grade A(97) dans YSlow.
Après avoir couvert le forum PHP 2008 organisé par l'AFUP (Association Française des Utilisateurs PHP).
L'équipe de PHP TV, met à disposition l'ensemble des conférences plénières.
Voici la liste :
* The Age of Literate Machines (Zak Greant)
* 20minutes.fr : plus vite, plus lourd, plus alerte (Nicolas Silberman et Sébastien Lucas)
* Drupal : Rue89 ou la communauté de l'info (Damien Cirotteau)
* Industrialisation PHP : Retour d'expérience BNP Paribas (Jean-Philippe Glomot)
* Nouvelles fonctionalites Oracle database 11g pour PHP (Kuassi Mensah)
* Scaling Mozilla's websites with PHP (Laura Thomson)
* Performance, en allant plus loin que PHP (Eric Daspet)
* Static and Dynamic Analysis at Ning (David Sklar)
* PHP 5.3 : les nouveautés du futur si proche (Pascal Martin)
* Place des Tendances et les interfaces riches Ajax (Olivier Vanhaecke et François Lasselin)
* L'importance de PHP dans l'entreprise (Gauthier Delamarre)
* PHP, a mystery success story! (Lukas Smith)
http://www.phptv.fr/forum-php-2008
Proposé par hello
Ces nouvelles versions corrigent une régression apparue lors de la dernière mise à jour.
Téléchargez les versions :
TYPO3 4.2.5
TYPO3 4.1.9
TYPO3 4.0.11
Bulletin officiel
This is a little script I made to get rid of those damned short tags.
<?php
while ($file = trim(fgets(STDIN)))
{
$content = file_get_contents($file);
$search = array('/<\?=/', '/<\?(?!php|xml)/');
$replace = array('<?php echo ', '<?php ');
if ($content != ($new_content = preg_replace($search, $replace, $content)))
{
file_put_contents($file, $new_content);
}
}
Just put this in a file, short_tags.php for example, and run something like:
$ find . -name "*.php" | php ./short_tags.php
I would have done it with sed, but it doesn't seem to support PCRE, and I don't know how to do negative lookahead (the (?!php|xml) thingy) with POSIX based regexp (if it's even supported) :/
UPDATE: Actually, POSIX Regexps DO support negative lookahead (as well as positive lookahead and lookbehind) with the same syntax as PCRE regexps. But grep doesn't use POSIX regexps, it uses things called BRE and ERE that I've never heard of before. Too bad.
Le site www.smashingmagazine.com nous offre un article qui explique comment améliorer la sécurité de la partie administration d'un site sous WordPress
Les probabilités de subir une attaque augmentent avec la popularité du site. De nombreux sites fonctionnent sous WordPress et l'aspect sécurité est souvent mis de coté jusqu'à ce qu'il soit trop tard.
Réagissez avant ! Il peut être salutaire pour votre site d'appliquer les dix conseils de smashingmagazine, cela ne le rendra évidemment pas invulnérable mais en augmentera grandement la sécurité et compliquera le travail des hackers.
La plupart de ces conseils sont applicables par tous ; certains ne sont que du bon sens (mots de passe compliqués, mettre à jour WordPress, ...). D'autres ne sont pas toujours applicables (droits d'accès au serveur nécessaires) ou encore astucieux (suppression du premier compte administrateur).
Dans un article sur son blog, Lukas Kahwe Smith, l'un des développeurs de PHP, répond à une question qui lui est fréquemment posée dernièrement : Pourquoi ne pas réécrire complètement PHP ?
Suite à l'annonce à propos du backslash choisi comme séparateur d'espaces de noms, cette question semble être plus fréquente et l'auteur, bien que n'étant pas un expert dans le domaine comme il le signale, nous donne son avis.
Voici un bref résumé des points soulevés dans l'article :
- Un nombre important de personnes ont basé tout leur travail sur PHP et si leur outil venait a été remanié de fond en comble, cela ne ferait que leur apporter plus de problèmes qu'en résoudre que ce soit pour leurs projets passés ou en cours.
- Si un groupe de personne souhaitait reprendre le meilleur de PHP, corriger les bugs, renommer le nouvel outil et remplacer éventuellement PHP dans le monde du développement, ils y sont autorisés et même encouragés. Et si ce groupe pouvait travailler main dans la main avec l'équipe de PHP, cela n'en serait que mieux.
Certains commentaires de l'article apportent de plus quelques bonnes idées pour les futurs développements de PHP.
Un billet-mémo pour un triple boot XP/Leopard/Slackware en utilisant NTLDR
Installer Slackware avec son DVD. Sélectionner les options et packages voulus.
Ne pas installer Lilo sur la MBR sinon il faudra le désinstaller par la suite (lilo -u /dev/<boot device>). Le mieux est de ne pas sélectionner le paquet Lilo ou alors de refuser le prompt d’installation de Lilo sur la MBR.
Une fois l’installation terminée et un reboot, Slackware est bien installée mais le boot menu NTLDR n’en fait logiquement pas mention. Pour ceux qui ont rebooté après l’installation, il faut rebooter sur le cd d’installation. Une fois dans le Shell pre-installation, on monte sa partition Linux :
# mount /dev/sda3 /mnt/ # chroot /mnt
Si on n’a pas installé les packages kernel-huge/generic-smp-<VERSION>, kernel-modules-<VERSION> et lilo, ils sont requis (ils fournissent les noyaux de boot et les modules associés dans /lib/modules). Ils sont temporaires pour démarrer la distribution et commencer à la personnaliser (recompilation noyau). Le but est de pouvoir démarrer la distribution en ayant un menu de boot la proposant et d’éviter les kernel panic du à un FS non supporté.
# mount /dev/cdrom /mnt/cdrom # cd /mnt/cdrom/slackware/a/ # installpkg kernel-generic-<VERSION>_smp-i686-1.tgz # installpkg kernel-modules-<VERSION>_smp-i686-1.tgz # installpkg mkinitrd-<VERSION>.tgz # installpkg lilo-<VERSION>.tgz
Configuration d’un initrd pour que le noyau support le ext3 du rootdev (étape facultative car je vous conseil de compiler le support du système de fichier en dur dans le noyau, ainsi que le support de tout ce qui est liée au contrôleur SATA, IDE, ou SCSI etc. afin que le disque puisse être accédé par le noyau et la partition root montée sans générer de kernel panic)
# cd /boot # mkinitrd -c -k vmlinuz -m mbcache:jbd:ext3 -r /dev/sda3 -f ext3 (A noter quelques erreurs concernant /proc/partitions introuvable, mais c'est normal on est chrooté)
Modification de Lilo
# cp /usr/doc/lilo-<VERSION>/sample/lilo.sample.conf /etc/lilo.conf (ou directement créer un nouveau fichier) # nano /etc/lilo.conf
boot=/dev/sda3 map=/boot/System.map install=/boot/boot.b #prompt #timeout=50 image=/boot/vmlinuz label=Slackware initrd=/boot/initrd.gz root=/dev/sda3 read-only
On oublie surtout pas (peut faire perdre de précieuses minutes ;o ) :
#/sbin/lilo (génère quelques erreurs attendues)
Préparation du boot.ini NTLDR :
# exit (on quitte le chroot) # mount /dev/sda8 /tmp (une partition RW en fat32) # dd if=/dev/sda3 count=1 bs=512 of=/tmp/boot_linux # reboot (on quitte le shell préinstallation et on retourne sosu windows)
Sous windows :
# Copier boot_linux dans c:\ # Modifier boot.ini
[boot loader] timeout=30 default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS [operating systems] multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professionnel" /noexecute=optin /fastdetect C:\boot_macos="Leopard" C:\boot_linux="Slackware"
Lecture intéressante :
http://jaeger.morpheus.net/linux/ntldr.php
et le README disponible dans /boot après l’installation de Slackware :
Slackware initrd mini HOWTO
by Patrick Volkerding, volkerdi@slackware.com
Sun Oct 26 00:38:49 CDT 2008This document describes how to create and install an initrd, which may be
required to use the 2.6 kernel. Also see “man mkinitrd”.1. What is an initrd?
2. Why to I need an initrd?
3. How do I build the initrd?
4. Now that I’ve built an initrd, how do I use it?1. What is an initrd?
Initrd stands for “initial ramdisk”. An initial ramdisk is a very small
Linux filesystem that is loaded into RAM and mounted as the kernel boots,
and before the main root filesystem is mounted.2. Why do I need an initrd?
The usual reason to use an initrd is because you need to load kernel
modules before mounting the root partition. Usually these modules are
required to support the filesystem used by the root partition (ext3,
reiserfs, xfs), or perhaps the controller that the hard drive is attached
to (SCSI, RAID, etc). Essentially, there are so many different options
available in modern Linux kernels that it isn’t practical to try to ship
many different kernels to try to cover everyone’s needs. It’s a lot more
flexible to ship a generic kernel and a set of kernel modules for it.3. How do I build the initrd?
The easiest way to make the initrd is to use the mkinitrd script included
in Slackware’s mkinitrd package. We’ll walk through the process of
upgrading to the generic 2.6.27.4-smp Linux kernel using the packages
found in Slackware’s slackware/a/ directory.First, make sure the kernel, kernel modules, and mkinitrd package are
installed (the current version numbers might be a little different, so
this is just an example):installpkg kernel-generic-2.6.27.4_smp-i686-1.tgz
installpkg kernel-modules-2.6.27.4_smp-i686-1.tgz
installpkg mkinitrd-1.3.2-i486-3.tgzChange into the /boot directory:
cd /boot
Now you’ll want to run “mkinitrd”. I’m using reiserfs for my root
filesystem, and since it’s an IDE system the reiserfs module will be
the only one I need to load:mkinitrd -c -k 2.6.27.4-smp -m reiserfs
This should do two things. First, it will create a directory
/boot/initrd-tree containing the initrd’s filesystem. Then it will
create an initrd (/boot/initrd.gz) from this tree. If you wanted to,
you could make some additional changes in /boot/initrd-tree/ and
then run mkinitrd again without options to rebuild the image. That’s
optional, though, and only advanced users will need to think about that.Here’s another example: Build an initrd image using Linux 2.6.27.4-smp
kernel modules for a system with an ext3 root partition on /dev/hdb3.
Note that you need the mbcache, jbd, and ext3 modules to use ext3:mkinitrd -c -k 2.6.27.4-smp -m mbcache:jbd:ext3 -f ext3 -r /dev/hdb3
4. Now that I’ve built an initrd, how do I use it?
Now that you’ve got an initrd (/boot/initrd.gz), you’ll want to load
it along with the kernel at boot time. If you use LILO for your boot
loader you’ll need to edit /etc/lilo.conf and add a line to load the
initrd. Here’s an example section of lilo.conf showing how this is
done:# Linux bootable partition config begins
image = /boot/vmlinuz-generic-2.6.27.4-smp
initrd = /boot/initrd.gz
root = /dev/hda6
label = Lnx26274smp
read-only
# Linux bootable partition config endsThe initrd is loaded by the “initrd = /boot/initrd.gz” line.
Just add the line right below the line for the kernel image you use.
Save the file, and then run LILO again (’lilo’ at the command line).
You’ll need to run lilo every time you edit lilo.conf or rebuild the
initrd.Other bootloaders such as syslinux also support the use of an initrd.
See the documentation for those programs for details on using an
initrd with them.———
Have fun!