Facebook + PHP = Hyper-PHP

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! :-)

MyOnlineSSH: Version anglaise

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

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.
Continue reading

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

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

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

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 !

Continue reading

jCryption2: Une utilisation plus personnalisée de jCryption

Suite à la sortie de jCryption 2.0 qui ajoutes les mêmes fonctionnalités, je ne met plus à jour cette librairie.

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 !

Continue reading

Gettext: Utiliser plusieurs fichiers de traduction en même temps

Dans certains projets modulaires, certains modules utilisent l’internationalisation (avec gettext notamment). Le problème, c’est quand il y en a plusieurs, quel fichier gettext va-t-il être utilisé ? C’est assez difficile à répondre car gettext est très…très pauvre en fonctions de débugguage. En réalité c’est impossible de débugguer gettext sans procéder par tests.

Du coup, ça serait très pratique d’utiliser plusieurs fichiers compilés de langue. Pour ça, il y a la fonction ngettext qui permet de spécifier le nom du domaine à utiliser. Le nom du domaine c’est le premier paramètre de bindtextdomain qui vous avez dû appeler pour initialiser le fichier de texte à trouver dedans.

C’est très pratique, surtout, lisez la documentation de ngettext pour pouvoir utiliser plusieurs fichiers de traduction dans un même programme PHP !

Sockets avec Flash: Un serveur pour les “master socket policy file”

Depuis la version 9,0,125 de Flash Player, toutes les connexions à l’aide de Sockets font objet de mesures de sécurité supplémentaires. Dorénavant n’importe quelle connexion utilisant les Sockets devront être explicitement autorisées par le serveur vers lequel la connexion Socket s’effectuera pour le serveur hôte du ficher SWF. C’est-à-dire que, par exemple, si vous hébergez votre fichier Flash (.swf) sur le domaine static.example.com et que la connexion se fait sur le port XX du serveur socks.examples.com, alors il faudra créer un socket sur le port 843 qui retournera le fichier de sécurité (de la même forme de les crossdomain.xml que l’on connait pour les URLs), appelé le “master socket policy file”.

Cette contrainte est apparue depuis la version 9 de Flash Player, et est néanmoins moins restrictives sur ces versions car l’on peut utiliser les Security.loadPolicyFile() pour charger des fichiers de sécurité pour les sockets, alors que dans les versions 10, il faudra un “master policy file”.

C’est pourquoi, il faut dès à présent mieux d’implanter cette fonctionnalité sur votre serveur en créant simplement un petit deamon sur le port 843 qui retournera le fichier de sécurité lors de la requête <policy-file-request/> suivie d’un caractère NULL. Si vous souhaitez créer votre propre “master socket policy file”, faites-le, vous pouvez le faire dans presque n’importe quel langage. Seulement, un développeur de Adobe (société éditrice de Flash) propose un script en Python et en PERL. Nous allons voir comment installer le script PERL, langage qui est installé sur quasiment tous les serveurs, sans même que l’on ne l’ai forcément installer.
Continue reading

I2C (IP-to-Country): Gestion des comptes utilisateurs

La récupération des données depuis I2C vient de changer. En effet, dorénavant il vous faudra vous authentifier à l’aide d’un compte client D-Sites avant la récupération du pays d’une adresse IP.

La page du projet i2c à été mise à jour.

Pourquoi ?

Ce système à été mis en place pour lutter contre les utilisations abusives (plusieurs centaines de milliers de requêtes par mois) de I2C.

Qu’est-ce que ça change ?

Pas grand chose, le code de récupération change un peu, rien de bien méchant. Seulement, maintenant, le nombre maximal de requêtes est de 50 000 requêtes par mois. Si vous souhaitez en faire plus, c’est tout à fait possible en payant un peu (quelques euros): 100 000 requêtes (1€), 500 000 requêtes (4€) et 1 000 000 requêtes (7€). Pour plus de requêtes contactez-moi.

Comment ?

Pour créer un compte client D-Sites vous devez vous inscrire sur le site puis aller dans l’administration, où vous trouverez un menu “Compte D-Sites”. Ce menu concerne le compte client D-Sites qui vous permettra de vous identifier au près de tous les services de D-Sites. Une fois créé, activez-le pour i2c dans le sous-menu correspondant. C’est bon, vous pouvez vous connecter avec les identifiants choisis.

Concrètement, le code à mettre en place change pour HTTP et SOAP:

Pour HTTP

Vous devez ajouter les paramètres URL u et p décrivant respectivement le nom d’utilisateur et le mot de passe.

Pour SOAP

Si vous utilisez SOAP, vous avez deux options: soit vous utilisez la fonction login qui prend comme paramètres le nom d’utilisateur et le mot de passe avant getCountry, soit vous utilisez la fonction getCountryLogin qui prend dans l’ordre l’adresse IP, le nom d’utilisateur et le mot de passe.

En espérant améliorer la qualité du service.
Cordialement, Samuel ROZE.