François's blog

Lors du dernier atelier du lundi, j'ai présenté le framework javascript sammy.

Voici les slides: http://francois.heroku.com/

Ce framework est basé sur jQuery et est fortement inspiré de Sinatra.

Il permet de créer des applications web avec une gestion de l'historique, des évènements personnalisé, des plugins, etc.

Voici une mini application :

  1.  $.sammy(function() {
  2.    this.get('#/hi', function(ev) {
  3.        $('#main').text('Hello World!');
  4.    });
  5.    this.post('#/hi', function(ev) {
  6.        $('#main').text(ev.params['myinput']);
  7.        return false; // l'évènement submit est annulé
  8.    });
  9. }).run();

Décortiquons le code de cette application.

On commence par définir une route:

  1.    this.get('#/hi', function(ev) {
  2.        $('#main').text('Hello World!');
  3.    });
  4.  
  5.    <a href="#/hi">Hi !</a>

Le click sur le lien va déclencher le callback sur la route get('#/hi') et afficher un message.

Plus intéressant est la gestion des verbes POST (mais aussi PUT et DELETE). La simplicité est de mise. On crée un formulaire HTML et la route correspondante. L'évènement submit est automatiquement capturé par sammy.

  1.    this.post('#/hi', function(ev) {
  2.        $('#main').text(ev.params['myinput']);
  3.        return false; // l'évènement submit est annulé
  4.    });
  5.  
  6.    <form action="#/hi" method="post">
  7.        <input type="text" name="myinput" />
  8.        <input type="submit" value="Submit" />
  9.    </form>

Vous n'aurez pas ainsi a chercher l'ensemble des champs de formulaire, Sammy le fait pour vous. Je conseille l'utilisation du plugin NestedParams pour les champs de formulaire avec des tableaux.

Sammy intègre un systèmes de plugins qui permettent de réutiliser du code. Plusieurs plugins sont intégré comme des systèmes de template, de stockage des données (avec localStorage ou sessionStorage d'HTML 5, ou un fallback avec les cookies ou un simple stockage mémoire), JSON ou encore ... le vôtre.

Sammy est un bon framework pour écrire une application web. Essayez-le !

Cookies

Et voilà sur le même thème un petit billet en français pour les non anglophones.

Nous avons libéré sur github une petite classe qui installe un gestionnaire de session personnalisé. Sa particularité est de stocker les données de session dans un cookie chiffré.

L'intérêt est que nous n'avons plus besoin de partager les sessions entre serveurs si nous avons plusieurs frontaux.

Le chiffrement permet d'éviter toute modification par l'utilisateur du contenu du cookie. Le chiffrement par défaut utilise la paquet pear Crypt_Blowfish.

Son utilisation est très simple, on utilise toujours les fonctions habituelles de gestion de session (session_start(), session_destroy(), etc.). La seule exigence est de fermer la session en écriture juste avant la sortie HTML/whatever.

<?php
// just include session class
require_once 'session.php';
require_once 
'Crypt/Blowfish.php'// pear package, only needed when using SessionInCookie_DefaultCipher

SessionInCookie::setCipher(new SessionInCookie_DefaultCipher('mysecretkey'));

// start session normally
start_session();

// Read and write in session
$_SESSION['foo'] = 'bar';

// juste before output, call session_write_close
session_write_close();

// WARNING: now session data have been send to the client via encrypted cookie. You *CANNOT* write on $_SESSION.

echo 'Hello Word';
?>

Vous pouvez retrouver le code sur le dépot session-cookie. L'utilisation est décrite dans le README.

Paris Web 2009

Nous étions à Paris web, les 8 et 9 octobre 2009. Petit compte rendu.

Jeudi 8 octobre 2009

Intégrateurs, montez au front! de Stéphane Deschamps

Le terme intégrateur est péjoratif, on préfère le terme de développeur Web Front. L'intégrateur fait principalement du HTML et du javascript.

L'intégrateur évolue dans 4 types de milieu :

  • La grosse agence où ils ne sont que de petites mains
  • La startup où ils sont frustrés par trop de travail