Thu Feb 25 2010

HipHop, 32-bit et github

Quelques conseils (rapidos)

Filed under PHP. 4 comments

HipHop sur github, ca se présente plutôt pas mal. Une petite communauté de forkers travaille à rendre la chose compilable et surtout utilisable par le plus grand nombre (pour le bien de l'humanité?). Scott MacVicar, un des responsables du projet et commiter en chef sur github, semble bien disposé à appliquer les patches et suggestions qui gravitent autour du truc. Ca le fait.

A propos de fork, je viens de mettre le mien à jour. Sans vouloir jouer les caïds (loin de moi cette idée saugrenue ;) je pense que c'est celui qu'il faut puller si vous souhaitez installer le matos sur une machine 32-bit. Car, je le répète, HipHop est 64-bit only, au moins pour un certain temps. De plus, je n'ai rien ajouté ou modifié à l'artillerie de CMake par rapport au code de facebook pour que le wiki officiel concernant la partie installation reste pertinent.

Un conseil: Installer les dépendances à la main, c'est à dire en récupérant les tarballs sur leurs sites respectifs. Ensuite, procédez aux installations avec un --prefix=$HOME/hiphopdep (ou un truc du genre). Le principe est de placer ces dépendances dans un répertoire isolé et ne rentrant pas en conflit avec quelque système de packages que ce soit. De toute manière il vous faut patcher libcurl et libevent, on n'y coupera pas. Une fois que tout est soigneusement installé, bien penser à mettre $HOME/hiphopdep/bin dans votre PATH (si vous avez installé des programmes tels que re2c ou flex) et faire un export CMAKE_PREFIX_PATH=$HOME/hiphopdep avant de lancer CMake. Normalement, ça devrait bien se passer.

Maintenant, à part compiler le bordel, compiler du php et lancer des servers ou des daemons, je n'ai pas encore eu le temps de vraiment me pencher sur ce que fait HipHop et comment ça marche, autre que les généralités librement disponibles.

Avec un peu de chance, je devrai avoir du temps dans les prochains jours pour m'adonner à l'un de mes hobbies, à savoir glandouiller devant des lignes de codes et attendre qu'une idée ou une illumination surgisse comme par enchantement. Elle est pas belle la vie ? ;)

Tags hiphop, php
Sun Feb 21 2010

Compiler HipHop sur du 32-bit

hello world, b..

Filed under PHP. 0 comment

Je rentre du taff (oui je bossais ce samedi), et que vois-je, les sources de HipHop sont dispo sur github! C'est cool. J'ai donc entrepris de tester la bête mais ce ne fut pas sans embuches...

A la base ma machine de jeux est un Macbook Pro 13" avec OSX 10.6. Ayant parcouru le wiki ces jours précédents, je savais que je n'allais pas tenter d'installer le bordel sur OSX à cause de libcap. En effet, imposible d'installer cette lib qui est trop linux-centric. Par contre, sous le coude j'ai un server qui tourne sous Slackware en 32-bit. Un des avantages de Slackware est que si ça merde, alors c'est de notre faute. Cette distrib est très archaïque et c'est la raison pour laquelle je l'ai choisi: j'aime bien quand ça merde ;)

Et ça a merdé quand même pas mal.

Pour les dépendances, pas de problèmes. Bien penser à patcher libcurl et libevent avec les diffs fournis dans le source tree de HipHop. Le plus gros problème a consisté à trouver le lien pour choper les sources de Intel® Threading Building Blocks (Intel® TBB). Un sacré paquet de ®, désolé. Et bien le lien le voila. Prendre le .src.tgz.

Ensuite, il suffit de suivre le wiki, puis on arrive au moment où on lance cmake. Si ça commence à déconner chez vous à partir de là, ne pas hésiter à modifier les fichiers concernés dans le répertoire CMake pour que le système puisse correctement trouver vos librairies. Au préalable, bien penser à définir CMAKE_PREFIX_PATH comme stipulé dans le wiki.

Ensuite, make. Là bison 2.4 générait des erreurs pour cause de grammaires mal formées. Il y a plusieurs oublis de ";" dans divers fichiers y. Les lignes concernées sont indiquées dans les messages.

Le gros du travail ensuite a été de fixer de manière incrémentale (make, erreur, fix, make, ok, erreur, fix, make...) toutes les parties du code qui concerne le 64-bit parce que, en fait, HipHop est 64-bit only à l'heure actuelle. Franchement j'ai passé 3 heures à faire ça. Relancer make à chaque fois. Ca m'a tellement gonflé que de une, mes corrections sont plus qu'hasardeuses, et de deux, je n'ai pas pris soin de glisser des #ifdef/#endif pour conserver le code original et pouvoir jouer avec des defines. Au début, trop optimiste probablement, j'ai pensé que seul util/hash.h était concerné. Une grossière erreur ;) Pour info, une bonne partie des fixes consiste à ajouter le suffix ll aux literals, ainsi que de transformer des ssize_t en long int [1].

Finalement, et là je peux vous dire que je balisais, le linker a paqueté tout ça sans encombre. J'en avais plein le cul. J'ai pushé sur github mes modifs temporaires et d'ailleurs au moment où je rédige ce billet, d'autres forks pour 32-bit sont en cours d'élaborations.

Un echo "hello world, bastard\n" vaut mieux qu'un long discours:

Hello world from HipHop

[1]: J'ai repris mes modifs et wrappé les parties concernées entre #ifdef/#endif. C'est censé compiler indifféremment sur 32 ou 64-bit. Mon fork a été mis à jour.

Wed Feb 17 2010

Trucs en vrac #1

XHP, HipHop, design, tweets

Filed under Vrac. 0 comment

En vrac:

XHP

J'en parlais dans mon billet précédent, et bien c'est chose faite, mes patches ont été mergés dans la branche master du projet sur github. Maintenant quant à réellement utiliser l'extension, là franchement je n'ai rien fait mis à part lancer la tests suite.

HipHop

Toujours dans un autre billet, j'avais émis l'hypothèse que le code source de HipHop ne serait pas releasé de si tôt. J'ai l'impression que ça se confirme. D'une part parce que leur build system et les dépendances sont trop spécifiques à l'environnement de facebook et d'autre part parce que la team semble vouloir releaser un produit en mesure de fonctionner out of the box avec des projets aussi populaires que WordPress ou PHPUnit. C'est pas mal quand même. Si le bordel est capable de faire tourner PHPUnit alors y a de bonnes chances que beaucoup d'autres projets le soient également. Plus d'info dans le wiki ainsi que dans un post de Scott MacVicar sur le google group. Au passage on y apprend que la dernière version de boost est finalement supportée. C'est une bonne nouvelle.

Design du blog

Ce blog arbore un tout nouveau design à la con, je suis d'accord. Je ne pense pas qu'il va rester en place bien longtemps. C'était juste pour tester quelques trucs CSS3 de base. De plus, je n'ai à moitié aucune idée de comment toute cette daube se comporte dans IE et Opera (en fait, si, j'en ai une vague idée).

Parser de tweets

Je me suis enfin remué le cul pour implémenter un parser de tweets pour ce site qui prenne en charge les at, hash tags etc. Bon, c'est du rapidos, OK. En fait je me suis aperçu qu'il n'existe pas vraiment de lib de parsing de tweets en C++. Un de ces 4 je détaillerais le fonctionnement de ce site, notamment comment ça se fait que le backend est en C++.

Tags blog, hiphop, xhp
Wed Feb 10 2010

Compiler l'extension XHP de facebook

Je ne suis pas inscrit sur facebook, cherchez pas

Filed under PHP. 0 comment

Jamais autant parlé de facebook que depuis une semaine. Commence à devenir relou!

XHP est une extension développée par facebook qui augmente la syntaxe de php en permettant d'écrire des fragments html au sein même des scripts. Ca a la couleur de E4X mais le but premier de XHP est de garantir un document correctement formé et respectant un schema défini. On a donc une sorte de mix entre E4X et RELAX NG. Le but est louable.

Ce court billet n'a pas vocation à présenter l'extension. Je vous invite à lire la présentation faite par son auteur ainsi que les pages wiki sur github (là où réside le code source, nous y reviendrons). A voir aussi, un billet de Rasmus Lerdorf qui a effectué des benchmarks. Je vous laisse matter les conclusions.

Pour compiler l'extension, il faut l'artillerie usuelle nécessaire à la modification de la grammaire php: flex, Bison et re2c. RAS pour ça. Le problème c'est que ça ne compilait pas chez moi. Mon php de test est un CLI 5.3.1 en mode debug ainsi qu'en thread safety forcée (--enable-maintainer-zts). Il y a un oubli de TSRMLS_CC dans ext.cpp mais également un problème d'initialisation de globals dans le MINIT. Un fork patché est disponible sur github ici en attendant que le repo officiel prenne en compte les patches.

Est-ce que ça vaut le coup d'utiliser cette extension? C'est une bonne question simon! Avec HipHop peut être bien? En tout cas Marcel Laverdet, l'auteur de l'extension, précise que facebook lite tourne sous HipHop et XHP. Pour facebook lite, cherchez pas, suis pas inscrit.