décembre 2012

Archives

Entries list

vendredi 7 décembre 2012

Parser des fichiers properties en PHP, ma lib pour composer

En début de semaine, mes copains de Mozilla Hispano ont lancé un projet qu'ils préparaient depuis quelques temps déjà, une petite application d'assitance aux utilisateurs pour leur page Facebook. Cette application interroge l'API du site d'assistance officiel de Mozilla (alias SUMO, pour SUpport.MOzilla.org) pour afficher les articles les plus consultés et elle dispose d'un champ de recherche qui propose des articles dans sa langue. Simple, efficace.

Ils m'ont contacté pour que je leur file un coup de main pour la localisation, comme ça l'application est disponible pour les non-hispanophones (et si vous avez un navigateur en français, le lien dans le paragraphe ci-dessus a dû s'afficher en français), j'ai donc ajouté de la détection de langue, de la détection de direction rtl pour le template et un petit système de traducion basé sur des fichier .properties, les fichiers properties viennent de Java mais sont omniprésent aussi en Javascript et sont la base de la traduction des logiciels de Mozilla (Firefox, ou FirfoxOS /ex).

L'application étant en php, l'idée initiale de mes copains étaient d'utiliser parse_ini_file() car la syntaxe des fichiers ini est presque la même que celle des .properties, mais si on veut des properties sans guillemets, avec du support des chaînes multilignes et éventuellement des commentaires, il faudrait mieux que ça, donc je leur ai rapidement créé une librairie pour parser les properties.

Ce n'est pas la première fois que j'écris une fonction ou une classe pour parser des .properties et en fait, je crois que c'est la troisième ou quatrième fois et à chaque fois j'ai fait du code jetable parce que je ne trouvais pas de librairie fiable sur le net (il y en a sûrement, j'ai juste pas trouvé), donc cette fois-ci j'ai décidé que j'allais faire une librairie une bonne fois pour toute et que la prochaine fois que j'aurai à réutiliser des properties, je m'en resservirai, voire même, je l'améliorerai :)

J'ai donc créé ma librairie sur github, elle s'appelle très originalement PhpProperties, elle parse correctement un fichier .properties et peut même extraire et associer les commentaires dans le fichier source (l'idée à long terme c'est de fournir un convertisseur vers d'autres format type .lang, .po, dtd... et de ne pas perdre les commentaires dans le code), son usage est simple:

<?php
$source = new \xformat\Properties();
var_dump($source->getproperties('toto.properties'));
Mais ce n'est pas tout, j'ai ajouté cette librairie à Packagist.org, vous pouvez donc l'installer comme une dépendance dans vos projets en utilisant un fichier composer.json:

{
    "require": {
        "pascalc/php-properties": "1.0"
    }
}


Un simple composer install vous installera tout ça :)

Voilà, je ne prétends pas que c'est du beau code, mais il marche plutôt bien et je suis assez content d'avoir pu créer mon premier paquet installable via Composer, le nouveau gestionnaire de dépendances de PHP :)

mardi 4 décembre 2012

Compiler Firefox OS en version desktop sur une Ubuntu

J'ai installé hier Firefox OS en version Desktop sur mon Ubuntu (12.04) afin de jouer avec.

Voici les étapes qui marchent chez moi :

Tout d'abord, il vous faut installer les paquets nécessaire à la compilation et bien sûr les outils de gestionnaire de version nécessaires :

sudo apt-get install mercurial g++ make autoconf2.13 yasm libgtk2.0-dev libglib2.0-dev libdbus-1-dev libdbus-glib-1-dev libasound2-dev libcurl4-openssl-dev libiw-dev libxt-dev mesa-common-dev ccache git

Ensuite, on va créer un dossier FirefoxOS dans son /home :
mkdir ~/FirefoxOS/

Puis on va ce dossier :
cd ~/FirefoxOS/

Ensuite on récupère le code source de Firefox OS Bêta :
hg clone http://hg.mozilla.org/releases/mozilla-beta

(ça créera un dossier ~/FirefoxOS/mozilla-beta)

Puis on récupère le code source de Gaia, l'interface graphique en HTML5 de FirefoxOS :
git clone https://github.com/mozilla-b2g/gaia/

(ça créera un dossier ~/FirefoxOS/gaia)

Les deux étapes ci-dessus prennent du temps, surtout si vous avez une petite connexion.

Une fois ceci fait, il vous faut créer un fichier .mozconfig (notez bien le point avant mozconfig) que l'on mettra ici:
~/FirefoxOS/mozilla-beta/.mozconfig

Voici le contenu de mon .mozconfig :

CONCURRENCY=$(( `grep processor /proc/cpuinfo | wc -l` + 2 ))
mk_add_options MOZ_MAKE_FLAGS="-j$CONCURRENCY"
mk_add_options MOZ_OBJDIR=../build
# Use ccache
ac_add_options --with-ccache=/usr/bin/ccache
ac_add_options --enable-application=b2g
ac_add_options --disable-libjpeg-turbo
# This option is required if you want to be able to run Gaia's tests
# ac_add_options --enable-tests
# turn on mozTelephony/mozSms interfaces
# Only turn this line on if you actually have a dev phone
# you want to forward to. If you get crashes at startup,
# make sure this line is commented.
# ac_add_options --enable-b2g-ril

Une fois ceci fait, on va compiler Firefox OS, attention, ça prend du temps ! Plus de deux heures sur mon petit portable.
cd ~/FirefoxOS/mozilla-beta
make -f client.mk


La compilation créera un dossier ~/FirefoxOS/build/ et votre binaire se trouve là :
~/FirefoxOS/build/dist/bin/b2g

Une fois ceci fait, on va créer un profil Gaia :
cd ~/FirefoxOS/gaia
make

Une fois le profil créé, vous pouvez lancer Firefox OS avec cette commande :
~/FirefoxOS/build/dist/bin/b2g -profile ~/FirefoxOS/gaia/profile


et voilà le résultat :
Firefox OS sur Ubuntu

Si vous voulez plus d'informations, il y en a plein ici en anglais :
https://developer.mozilla.org/en-US/docs/Mozilla/Firefox_OS

N'oubliez pas non plus que Geckozone (la section forums de MozFr) a ouvert récemment un forum pour FirefoxOS :
Forum Firefox OS en français

Et vous pouvez discuter avec des développeurs et bénévoles Mozilla francophones dans le salon IRC #devfr sur irc.mozilla.org

MODIFICATION : 10h40, j'ai modifié l'url du dépôt mozilla-beta, je l'avais tapée de mémoire et évidemment ma mémoire était défaillante, désolé :)
MODIFICATION: 12h11,décidemment c'est la série, la création de profil gaia se fait évidemment après un cd dans le dossier gaia et pas dans le dossier mozilla-beta, corrigé aussi :)
MODIFICATION: 05/12/2012,ajout de ccache et git dans les dépendences nécessaires