HipHop pour PHP, qu’est-ce que c’est ?

février 3rd, 2010 1 comment »

Le nouveau projet Open Source pour PHP du moment, c’est bien HipHop, développé pour PHP, qui consiste à transformer le code PHP en C++ puis de le compiler en utilisant g++. Présenté dans l’article précédent Facebook & PHP II: HipHop et HPHPi, voici de nouvelles informations, issues de la conférence de cette nuit.

Facebook qui utilise déjà HipHop sur 90% de ses serveurs a constaté:

  • Sur les serveurs Web: 50% de consommation CPU en moins pour un même trafic, par rapport à PHP 5.2 avec APC
  • Sur les serveurs API: 30% de consommation CPU en moins pour deux fois plus de trafic

HipHop transforme le code en C++ et le compile avec g++ mais l’utilisateur n’a pas besoin de compiler à la main son code PHP avec un outils, tout reste comme avant, avec l’édition de fichiers PHP à la volée.

Néanmoins, les fonctionnalités qui ne seront pas disponibles:

  • La fonction eval
  • La fonction create_function, qui est du même acabit que eval
  • La fonction preg_replace, avec le paramètre e, qui permet l’application de eval sur le résultat
  • De manière plus générale, l’ordre des objets ne peu pas être respecté, du fait d’une exécution non-linéaire du code. Ainsi, la fonction function_exists retourne la valeur vraie dans ce code:

En plus de HipHop, l'équipe de Facebook a développé HPHPi, c'est un interpréteur PHP, il semblerait que ça soit grâce à lui qu'il ne sera pas nécessaire de compiler le code PHP. Il fait aussi des analyses du code pour y détecter des éventuelles erreurs dues à l'utilisation de HipHop et non de PHP.

HipHop embarque son propre serveur Web et n'est pas le moment pas compatible/prêt à fonctionner avec Apache ou un autre serveur. C'est pourquoi HipHop c'est un seul processus, contrairement à PHP mais qui utilise le principe de multi-thread, plus rapide que le multi-processus car créer un processus, c'est assez long par rapport aux threads. Comme HipHop utilise sont propre Web serveur allégé, il est plus rapide et permet de mieux gérer les ressources partagées entre les threads, il permet aussi de ne pas avoir de downtime, c'est-à-dire de temps d'inaccessibilité lors d'un redémarrage de HipHop.

HipHop est pour le moment basé sur PHP 5.2, et l'équipe de chez Facebook compte bien avancer encore plus sur ce projet et voici leur Roadmap, ou liste de choses à faire:

  • Apport des fonctionnalités de PHP 5.3
  • Utilisation possible avec Apache
  • ...et plus généralement la réduction de l'écart entre HipHop et PHP

Le code source qui était sensé être mis en ligne cette nuit sera maintenant mis en ligne "soon" !

Facebook & PHP II: HipHop et HPHPi

février 2nd, 2010 4 comments »

Apprenez en plus dans le nouvel article, HipHop pour PHP, qu’est-ce que c’est ?

Comme prévu et annoncé dans l’article précédent « Facebook + PHP = Hyper-PHP », l’équipe de développement de Facebook a bien annoncer son projet de faire une sorte de compilateur pour PHP cet après-midi, vous pouvez la retrouver en anglais à cette adresse.

Ce n’est en fait pas sous le nom de Hyper-PHP que les développeurs de Facebook ont décider de sortir leur moteur, mais sous le nom de HipHop, accompagné de HPHPi.

Facebook n’a en réalité pas tout à fait réécrit PHP depuis le début, mais a décidé de créer une extension PHP qui transforme un code PHP en un code C++, puis qui le compile. HipHop, c’est le nom du module/programme/de l’extention PHP qui va transformer votre code PHP en code C++, puis le compiler en utilisant le traditionnel g++. HPHPi, lui, permet de ne pas avoir à mettre en place un système de compilation en plus, et d’avoir simplement a utiliser PHP comme avant, mais en beaucoup plus rapide.

Les chiffres ont néanmoins changer car on ne parle ici que d’une diminution de 50%contre 80% d’après les rumeurs précédentesde la consommation du CPU, sans même avancer de chiffres d’augmentation de performances, même si il est tout de même le sujet de tout l’article de Facebook, c’est donc sans douter que ça a très certainement un gros bénéfice, puisque Facebook.com l’utilise déjà sur près de 90% de ses serveurs!

À noter tout de même que dans l’article, il est précisé que des fonctions sont perdues, comme la fonction eval par exemple (ce n’est pas plus mal pour celle-ci) et que l’équipe de développement a réécrit de nombreuses extensions pour les adapter à leur HipHop PHP, ce qui fera sans aucun doute que cette innovation pour PHP ne sera pas ajoutée à PHP, contrairement aux caches OPCodes qui le seront pour PHP 6, et restera un projet distant externe à PHP pour un petit moment.

C’est donc à tester sans attendre, lorsque que les sources seront disponibles dans la nuit (fin d’après-midi chez nos amis américains) à cette adresse, qui ne marchera que lorsque les sources seront disponibles:

Dès possible je ferais des tests et des benchmarks, que je ne manquerait pas de diffuser ici.

Facebook + PHP = Hyper-PHP

février 2nd, 2010 1 comment »

Lisez l’article plus récent: PHP & Facebook II: HipHop et HPHPi »

Voilà quelques temps que les rumeurs circulent, je vais donc faire un petit résumé de ce que l’on appelle Hyper-PHP, ou HPHP. Le site web de l’entreprise Facebook est composé à 90% de PHP, un langage de programmation tourné vers le Web, qui est ré-analysé depuis de début à chaque fois, c’est-à-dire qu’a chaque installation, le runtime PHP doit analyser toute la source pour faire tourner le script PHP, c’est ce qui lui confère une lenteur par rapport aux applications compilées.

Et bien Facebook aurait décidé, il y a 2 ans, de mettre un développeur à part entière sur ce projet, qui aurait pour but de créer une sorte de compilateur pour PHP. C’est en effet ce que ressort d’une interview anonyme recueilli par TheRumpus.net.

He is creating HPHP, Hyper-PHP, which means he’s literally rewriting the entire language. […] So this engineer is converting the site from one that runs on a scripted language to one that runs on a compiled language.

Alors que l’annonce doit avoir lieu aujourd’hui, le 2 février 2010, cette nouvelle mouture de PHP, si l’on peux l’appeler comme ça, va très certainement changer beaucoup de choses car d’après l’ingénieur Facebook chargé de ce projet, Hyper-PHP consommerait 80% de CPU en moins tout en ayant des performances augmentées de 80% ! Il sera de plus partagé en Open Source, comme un grand nombre de projets de Facebook.

A bientôt pour la suite! :-)

Plusieurs fancybox simultanément

janvier 29th, 2010 No comments »

Si vous ne connaissez pas, FancyBox est une petite librairie jQuery permettant de mettre en place de manière très simple de petites nouvelles petites sur-fenêtres, ou popup au sein de votre page Web. Le problème de FancyBox, en tous les cas pour la version actuelle, la 1.2.6, c’est qu’il est impossible de créer deux popups en même temps, par exemple on ouvre une popup « inline », puis dans celle-ci on a par exemple une nouvelle popup, qui affiche des photos, hé bien c’est impossible…

Pour ça, j’ai donc développé une version « multiple » de FancyBox 1.2.6, dont le fichier JavaScript (et CSS) se nomment jquery.fancybox-1.2.6.multiple.js et .css. Vous pouvez les télécharger à ces adresses:

L’utilisation est quasi identique, sauf qu’un nouvel argument est possible lors de l’appel de la méthode fancybox sur un élément. Le deuxième argument attendu est le parent de la fancybox, ce qui permet ainsi de les différencier (un parent par fancybox), qui est par défaut $('body').

$('a#i2').fancybox(
	{
		hideOnContentClick: false
	}, 
	$('div#inline')
);

N’hésitez pas à me faire des retours. :)

MyOnlineSSH: Version anglaise

janvier 12th, 2010 1 comment »

La version anglaise de MyOnlineSSH est mise en ligne permettant à tous les anglophones de se connecter en SSH depuis leur navigateur Internet, éditée avec PHP-Gettext-Edit, un outils permettant la gestion extrêmement facile des fichiers de traduction d’une application Internet (dont la version 2, avec gestion de comptes utilisateurs ne devrait pas tarder).

SVN: Créer des liens entre les dépôts avec svn:externals

janvier 10th, 2010 No comments »

Il est possible que dans certains projets, vous ayez besoin d’une librairie, d’une autre projet ou d’un dossier précis d’un autre projet, que vous l’ayez développer ou pas. Seulement, vous ce dont vous avez besoin est voué à être mis à jour régulièrement et que vous voulez profiter de manière automatique de ces mises à jour, il y a une solution avec SVN: svn:externals.

Comme nous le montre le « livre de SVN », svn:externals est une propriété associée à un dossier parent, qui permet de déclarer un dossier fils comme un contenu externe. Ainsi, vous pouvez configurer la propriété sur votre dossier /project1/trunk/includes/ pour que le dossier fils lib1 contienne /project-lib1/trunk par exemple.

Ainsi, à chaque mise à jour (svn update) de votre project1, votre client SVN ira voir à l’adresse associée pour le dossier trunk/includes/lib1 pour vérifier qu’aucune nouvelle révision n’éxiste.

Note: Vous pouvez très bien lors de la création de la propriété svn:externals spécifier une révision précise du dépôt externe, mais je ne voit pas vraiment l’intérêt dans le sens où, dans ce cas là, un svn copy ou un simple copier/coller suffit.
» Read more: SVN: Créer des liens entre les dépôts avec svn:externals

PHP-Gettext-Edit: Gérez vos traductions Gettext simplement!

janvier 9th, 2010 No comments »

PHP-Gettext-Edit est une application PHP qui permet de gérer très simplement les différentes traduction d’un site Internet par exemple, plus généralement d’une application (qu’elle soit écrite en PHP, C, Java, JavaScript…) utilisant des fichiers de traduction Gettext.

En utilisant PHP-Gettext-Edit, vous pouvez en quelques clics analyser votre code, faire les traductions et compiler les fichiers de traductions! PHP-Gettext-Edit vous permet de:

  • Analyser un code source pour en générer un modèle de traduction, contenant toutes les chaines de caractère à traduire
  • Créer des fichiers de traduction à partir de modèles
  • Éditer directement depuis votre navigateur un fichier de traduction
  • Compiler en .mo ou en JSON un fichier de traduction
  • Contrôler la validité
    • Des modèles par rapport au code source
    • Des fichiers de traductions par rapport à leurs modèles
    • Des fichiers compilés par rapport à leurs fichiers de traduction
    • Des langues entre-elles par rapports aux fichiers qu’elles contiennent
  • Éffectuer les opérations précédentes de manière collective

Rendez-vous sur le site du projet, www.php-gettext-edit.net »

MyOnlineSSH: Connectez-vous en SSH depuis un simple navigateur Internet

janvier 3rd, 2010 No comments »

Vous pouvez aussi voir la page du projet MyOnlineSSH.

MyOnlineSSH est un service permettant de se connecter à un serveur en SSH directement depuis votre navigateur. La configuration necessaire est très petite:

  • Un navigateur avec le JavaScript activé
  • Flash Player installé
  • Le port 80 ouvert

En effet, seul le port 80 suffit pour se connecter au SSH à l’aide de MyOnlineSSH comme vous pouvez le voir dans la page Aide de MyOnlineSSH.

Je vous invite donc à tester dès à présent MyOnlineSSH:

http://www.myonlinessh.com

D’ici peu, une traduction anglaise de MyOnlineSSH verra le jour pour nos amis anglophones.

Optimiser Wordpress avec WP-Super-Cache

décembre 27th, 2009 No comments »

Pour ce 100ème article, nous allons rapidement nous intéresser à la vitesse d’éxécution de Wordpress. En effet, la grosse machinerie Wordpress peut mettre plusieurs secondes à générer une simple page d’article lorsqu’elle est installée sans plus de configuration. En effet, les différents plug-ins, thèmes et compagnies ne font pas de Wordpress quelque chose de rapide, dans la mesure où le nombre de fichiers chargés pour une simple page peut aller jusqu’à 1000 et le nombre de requêtes SQL est colossal!

Wordpress sans cache

Je vais prendre les chiffres de D-Sites: sans cache avec quelques plug-ins (captcha/statistiques/coloration syntaxique) et sur un hébergement mutualisé OVH, la page d’accueil par exemple, met en moyenne 2 secondes pour être générée, comme l’atteste le site IsMyBlogWorking.

blog-before-supercache

Deux secondes pour afficher une page, c’est beaucoup beaucoup trop, nous allons donc mettre en place le cache. Pour le mettre en place sur un blog Wordpress, rien de plus simple: dans l’administration, dans le menu Extensions, cliquez sur Ajouter. Ensuite, il vous suffit de rechercher un plug-in au nom de « WP Super Cache ». Installez-le de manière automatique, tout marche très bien, créez les règles dans le fichier HTACCESS puis ça roule !

» Read more: Optimiser Wordpress avec WP-Super-Cache

jCryption2: Une utilisation plus personnalisée de jCryption

décembre 27th, 2009 No comments »

jCryption est une petite application JavaScript utilisant jQuery à ajouter à votre site qui permet de crypter un formulaire de données à l’aide d’un système de clé publique/clé privée. Ainsi, tout ce qui circule sur le réseau est protégé! Cela peut être utile lorsque qu’il vous est impossible de mettre en place un accès HTTPS ou lorsque le client (le visiteur) ne supporte pas le HTTPS mais a le JavaScript.

Le problème, c’est que à vouloir tout faire, jCryption fait trop. En effet, en deux lignes de code, jCryption récupère les champs du formulaire, récupère les clés de cryptage, crypte les données, les compacte puis les envoi à l’attention du script décrit dans l’attribut action de la balise <form>.

C’est pourquoi j’ai décidé de créer un jCryption2, qui ne vise en aucun cas à remplacer jCryption, ou à se prétendre supérieur mais plutôt à être tout aussi accessible, ce qui permet de choisir entre la simplicité (jCryption) ou la personnalisation (jCryption2). Ainsi, jCryption permet de récupérer les clés de cryptage de n’importe quelle façon et d’envoyer les données cryptées de n’importe quelle façon: vous devez créer une instance de jCryption2Key qui décrit la clé publique et vous devez définir un callback (une fonction de retour) lorsque l’encryptage sera terminée, avec comme seul paramètre la chaine cryptée.

En tout aussi peu de lignes, nous avons un système permettant de crypter les données envoyées de manière beaucoup plus personnalisée car vous pouvez récupérer les clés d’un fichier FTP par exemple, puis envoyer la chaine cryptée vers un socket, à l’aide de jSocket par exemple !

» Read more: jCryption2: Une utilisation plus personnalisée de jCryption