Voici un premier post où je fais la promo des technos qui donnent vie à ce blog.

Twig et Silex sont tous deux des outils développés par Sensio Labs.

Silex

Silex est un framework web et c'est la base de ce blog. C'est lui qui rend le site dynamique et qui aiguille telle ou telle URL vers telle ou telle action. Par "action", comprenez "un bout de code qui peut faire plein de choses, comme récupérer des données à l'endroit ou aux endroits que vous voulez, pour finalement générer du contenu, que ce soit du HTML ou ce que vous voulez comme autre espèce de ressource". Il est d'usage de dire que c'est un micro-framework, car c'est vrai qu'il est très léger. Mais sa légèreté lui donne l'avantage d'être extrêmement simple à utiliser. En effet, son utilisation est similaire à celle de Sinatra en Ruby ou encore de Express dans le monde de NodeJS (d'ailleurs Express est lui-même inspiré de Sinatra). Silex a également l'avantage de reposer sur des composants qui forment aussi la base de Symfony 2. De ce fait, Silex est donc soutenu par une vaste communauté de développeurs enthousiastes.

Il n'a cependant pas la vocation d'évoluer au point d'être une alternative à Symfony 2 (et d'ailleurs ce serait idiot puisque Symfony est aussi un produit de Sensio Labs). C'est un micro-framework qui restera "micro", et pour qu'il arrive à vous offrir toutes les possibilités mises à disposition par Symfony 2 (ou un autre gros framework web PHP), vous avez donc 2 solutions : soit vous faites évoluer Silex à votre sauce, soit vous utilisez carrément Symfony 2 :p .

Twig

Twig est un moteur de template. Silex ne l'intègre pas proprement dit, contrairement à Symfony 2. Comme je l'ai déjà dit, Silex est léger et si vous voulez utiliser un autre moteur de template que Twig à travers Silex (Smarty par exemple), libre à vous de le faire puisque c'est tout à fait faisable. Cependant Silex dispose nativement d'un adaptateur pour intégrer simplement Twig. En général, c'est donc le moteur de template qui s'associe naturellement à Silex.

Twig s'inspire de la syntaxe des templates de Django (célèbre framework web Python ressemblant étrangement dans l'esprit à Symfony 1... le monde est petit, mais là je m'égare). Il intègre nativement quelques fonctions de base, des filtres, appelables directement dans les templates bien sûr.

Il devient également très aisé de définir des layouts, d'étendre des layouts, de surcharger des blocks... bref je vous laisse lire la documentation là dessus. C'est très très complet.

Sachez également qu'il est facilement extensible si jamais vous vouliez vous créer vos propres fonctions ou filtres.

Il offre également la possibilité d'activer un cache. Malheureusement ce cache semble peu paramétrable (dites-moi si je me trompe !).


En définitive, Silex est un projet moyennement structurant, à mi-chemin entre la négligence absolue du respect des règles de codage et des principe de séparation code/présentation d'un côté et un vrai gros framework style Zend Framework ou Symfony 2 d'un autre côté : Silex est un micro-framework dans le sens ou il est structurant uniquement dans l'écriture du contrôleur du modèle MVC , alors que Symfony 2 permet une structuration du code dans les 3 parties du modèle MVC.

Pour finir, je dirais qu'à mon sens le couple Silex/Twig est probablement le meilleur choix en PHP si l'on ne veut pas s'embarquer dans la conquête d'un monument comme Symfony 2. C'est également un excellent choix si auparavant, on codait n'importe comment, et que maintenant, on a envie de structurer un minimum son code. Ca peut aussi être un bon choix en PHP si notre projet est modeste et ne nécessite pas une grande finesse, une excellence dans la structuration du code (ce qui ne veut pas dire qu'il n'est possible de structurer précisément un projet basé sur Silex ^^).


Un nouveau blog marque le début d'une nouvelle ère. J'y crois dur comme fer !

"Avant, j'utilisais DotClear. Mais ça, c'était avant."

Avec DotClear, j'en ai eu marre de rédiger mes posts, je trouvais ça lassant, pas fun du tout. Il est vrai que j'utilisais une vieille version, la dernière mouture est peut-être beaucoup mieux mais je n'ai jamais eu le courage de mettre mon nez dans une mise-à-jour, puisque je n'avait pas la possibilité de le faire automatiquement... doublement pas fun.

Il n'en fallait pas moins pour que je code mon propre blog. Lui au moins ne me fera pas de caprices pour les mises à jour. Et puis c'est tellement agréable de coder comme on veut et avec ce qu'on veut !

Je vous ferai progressivement le tour du propriétaire à travers plusieurs articles. Pour le moment, juste un avant goût de leur contenu :

  • HTML 5 (of course)
  • jQuery
  • Silex
  • Twig
  • Doctrine-DBAL
  • Markdown
  • Twitter-Bootstrap

Je vous garanti qu'avec tout ça on ne risque pas de s'ennuyer !

En attendant, tous aux urnes !


Google a récemment fait des grosses modifications sur le design de ses applications lors l'harmonisation de leur charte graphique.

Parmi ces modifications, on trouve un superbe --sans-efforceur-- ascenceur transparent.

Voici comment il est réalisé en CSS (CSS3, un des fleurons du HTML5) :

body::-webkit-scrollbar {
    width: 16px;
    height: 16px;
}

body::-webkit-scrollbar-thumb {
    background-color: rgba(0, 0, 0, 0.2);
    -webkit-box-shadow: inset 1px 1px 0 rgba(0,0,0,0.10),inset 0 -1px 0 rgba(0,0,0,0.07);
}

body::-webkit-scrollbar-button {
    width: 0;
    height: 0;
    display: none;
}

body::-webkit-scrollbar-corner {
    background-color: transparent;
}

node-nolife est une application extrêmement pratique lorsqu'on développe avec NodeJS.

C'est quoi ?

Son but est d'automatiser le redémarrage d'une application en fonction d'une modification sur des fichiers.

J'y vois immédiatement 2 utilisations !

La première consiste à redémarrer une application lorsque l'on modifie un fichier de configuration. Attention, ce n'est pas forcément applicable dans tous les cas ! Par exemple, des problèmes de session peuvent se poser lorsque l'on redémarre une application web alors que des utilisateurs sont connectés. C'est donc un use case que je déconseille.

La deuxième consiste à redémarrer une application lorsque l'on modifie ses sources. Et là nous parlons donc d'une fonctionnalité typique d'un IDE !

Installation

J'ai choisi d'installer node-nolife globalement, puisque cela peut servir pour n'importe quel type de développement.

# npm install -g nolife

A partir de ce moment, nolife est accessible de n'importe quel endroit de la machine.

Utilisation

Enfin, pour l'utiliser :

$ cd my_project
$ node . . node app.js

Ceci permet de scruter tous les fichiers placés dans le dossier @@my_project@@ (de manière récursive) puis, dès qu'un d'entre eux est modifié, de lancer la commande @@node app.js@@ (permettant de démarrer mon application).

$ nolife
usage: nolife    [param] [...]

Dans mon projet, j'ai créé ce fichier de démarrage :

#!/bin/bash

which nolife
if [ $? == 0 ]
then
   nolife . . node app.js
else
   echo "Auto restart mode is unavailable because node-nolife isn't installed"
   echo "Please install node-nolife by typing 'sudo npm install -g nolife' and retry"
fi

J'ai utilisé pour la première fois NodeJS, et plus particulièrement SocketIO il y a quelques jours.

En gros, NodeJS est un framework Web javascript fonctionnant côté serveur. Il dispose nativement de toutes les fonctionnalités de bases : voir ici. Il utilise le moteur javascript de Google : V8 JavaScript Engine.

Et SocketIO est une extension de NodeJS permettant de profiter facilement des avantages des WebSockets : vous savez, un nouveau truc apparu avec HTML5 et qui permet de mettre en oeuvre une communication full-duplex entre un navigateur et un serveur Web...


Comme à mon habitude, je viens tout juste de remettre la main sur une page que j'avais faite et qui est bien pratique pour un certain nombre de personnes : le wake on lan.

C'est ici : WolTool

C'est quoi ?

Le wake on lan fonctionne est un des mécanismes qui permet le démarrage de machine (PC ou serveur) à distance.

Et ça fonctionne comment ?

La plupart des cartes réseau filaires sont en mesure d'écouter un certain nombre de choses même lorsque la machine est éteinte (il faut tout de même qu'elle soit alimentée). Cette capacité a été exploitée pour le Wake On Lan.

Le principe est simple. Pour démarrer une machine compatible wake on lan, il suffit de lui envoyer un paquet dit "magique". Ce paquet doit être envoyé sur le port 9 de la machine à allumer (les ports 0 et 7 sont aussi possibles). Dans mon exemple, le service est fourni par un petit utilitaire Linux du nom original "wakeonlan".

Sans m'étendre sur le sujet, à la réception de ce paquet, un PC éteint est capable de s'allumer... pratique !

Attention toutefois, il faut procéder à quelque vérifications et si besoin configurations : activer le wol (le réveil) de la carte réseau et, si présence d'un routeur, l'association adresse IP / adresse MAC doit être permanente dans la table ARP. Ces informations sont facilement trouvables sur internet... tout comme d'autres pages qui font exactement la même chose que la mienne (quoi, j'ai copié ?).


Voici un script que j'ai réalisé il y a quelques temps pour personnaliser mon terminal. Il permet d'afficher l'utilisation des disques directement dans la ligne de commande. Certain diront que c'est useless, mais moi qui suis toujours uniquement dans un terminal sur mon serveur, il m'a aidé plusieurs fois, par exemple à voir que si mes requêtes SQL plantent, ce n'est pas que mon serveur est pourri, mais c'est juste qu'il n'a plus d'espace disque ;)

Voici le résultat :


Je m'intéresse en ce moment à la gestion des exceptions en PHP pour un framework "maison".

Le framework en lui-même n'est pas vraiment intéressant puisque je réinvente la roue... mais c'est très formateur (la preuve ^^). J'en aurais bien parlé dans un ou plusieurs prochains posts mais évoquer PHP 5.1.6 (et équivalents) à l'heure de PHP 5.3 n'est pas très tendance.

Mon objectif était de créer une personnalisation des exceptions et des traces. J'ai découvert qu'il était possible de personnaliser le message d'une exception à l'intérieur même d'une classe d'exception et de tirer de ce fait l'avantage d'une simplification de codage à l'intérieur de mon framework...


Ah c'est malin, vraiment !

Souvent, quand j'ai besoin de tester une astuce dans un script bash ou Perl ou autre, je créé un fichier de test dans un endroit pas trop planqué, histoire de l'avoir sous les yeux et de me rendre compte qu'il faut que je le supprime lorsque j'en n'ai plus besoin.

Je viens donc de tomber sur un script bash test.sh à la racine de mon dossier utilisateur. En général mes fichiers de ce genre ne font rien de bien méchant et je décide donc de l'exécuter pour voir, parce que je ne m'en souviens plus...


Aujourd'hui, j'ai cherché à savoir quelle solution serait la plus rapide pour parser du YAML dans un environnement PHP.

  • Spyc : librairie PHP (utilisée par Symfony 1.0)
  • Symfony Yaml Parser : librairie développée pour Symfony, utilisée actuellement (récupérée dans Doctrine 2)
  • Yaml 0.6.3 : extension PHP (doc)
  • Syck 0.9.3 : extension PHP

Mais qui va donc gagner ?