To content | To menu | To search

Friday 2 February 2007

Joie

Mouahaha.

DETAIL DE VOTRE COMMANDE
Date de la commande 02 février 2007
Référence *****
Spectacles commandes 3 places
au tarif Normal Prix unique
pour DAFT PUNK (PALAIS OMNISPORTS DE PARIS BERCY (PARIS)) le 14 juin 2007 à 20:00

Wednesday 31 January 2007

Un peu de sport: le vélo

Ce soir j'ai fait une petite heure de vélo dans la défense, à la fraiche. C'est assez exceptionnel pour le noter, d'autant plus que je compte bien remettre ça dimanche dans la forêt (oui on a des forêts à Paris, enfin pas loin quoi).

Interfaces et Classes Abstraites

Les concepts de classes abstraites et d'interfaces sont souvents assez flous quand on débute dans la programmation objet, et on se fourvoie assez souvent sur leur utilisation et leur but. Voila une petite explication qui j'espère sera 1) juste et 2) assez claire pour tout le monde. Si vous pensez que je me fourvoie sur ces 2 concepts de base de la POO, n'hésitez pas à me le faire savoir !

Continue reading...

Tuesday 23 January 2007

Humeur

La haine, c'est l'amour qui tourne le dos.

Friday 5 January 2007

By the way...

Did I ever talk you about Creating Passionate Users ? It's my number one favorite (almost) daily reading: I'm always sure to read something interesting when it pops to life into my google reader :-) Written by the creators of the Headrush books series (published by o'reilly in France under the name La tête la première, I know you know it), the content of this blog is highly valuable for those of us who wants to become smarter and learn how to do (or not to do !) things.

Well, I'm not really used to literate english, so I don't really find my words, sorry for that. Actually, I'm writing this blog entry in english just in case Kathy or Dan show up there :-)

Pour résumer, Creating Passionate Users, c'est vraiment LE blog à avoir dans vos RSS.

Wednesday 3 January 2007

Remplacer un caractère par un "Carriage Return" dans vim

Par exemple, imaginons qu'on récupère une query string, et qu'on veuille l'exploser sur plusieurs lignes, on peut faire:

:s/&/\="\<CR>"/g

le \="" annonce à VIM que la chaine de substitution sera une chaine a interpréter avant utilisation, et le \<CR> représente tout simplement le Carriage Return.

Tuesday 2 January 2007

Roulade

Je suis vivant, j'ai repris le travail aujourd'hui après une semaine et demie de repos bien mérité. Et je n'ai pas pris de bonnes résolutions.

Sunday 17 December 2006

Annuler un changeset SVN

Méthode bourrin, je ne sais pas si il en existe une meilleure. Disons qu'on veut annuler la révision 329 (et que c'est la dernière en date):

$ svn update
$ svn merge -r 329:328 .
$ svn commit -m "cancel 329"

En tout cas chez moi ça a marché.

Tuesday 12 December 2006

Mon code aMii

Pour ceux qui ne suivent pas forcément les commentaires des anciens posts, qui ont une wii, et un AP wiifi, voici mon code aMii:

4765 2326 7406 6369

Faites vous connaitre en commentaire (ainsi que votre code aMii) si vous m'ajoutez !

Tuesday 5 December 2006

Je me réjwii.

Score Game La Défense vient de me prévenir que ma wii m'attendrai vendredi wii décembre à wiit heure du matin. J'irai y faire un tour avant de passer au Starbuck :p

Le firebug nouveau est arrivé

Firebug 1.0b1 est sorti. Et il est bien (tm).

Wednesday 29 November 2006

Collections, Object Chaining, et la vérité sur le Père Noël

Aujourd'hui je vais vous parler de deux concepts que j'aime beaucoup et que j'ai (re)découverts en travaillant sur mon projet personnel de conquête de l'univers: les Collections d'objets et l'Object Chaining.

Les collections, qui sont peut-être finalement un design pattern connu sous un autre nom, permettent d'executer aisément des méthodes sur plusieurs objets (une collection d'objets quoi). Concrétement, disons qu'on à une classe My_Collection, qui implémente les interfaces Iterator (et Countable tant qu'a faire) de la SPL, ainsi que la fonction magique __call suivante (je vous fait grace du docblock):

class My_Collection implements Iterator, Countable {
	public function __call($method, $args) {
		$calls = 0;
		foreach($this as $item) {
			if (method_exists($item, $method)) {
				call_user_func_array(array($item, $method), $args);
				$calls++;
			}
		}
		if ($calls > 0) {
			return $this;
		} else {
			throw new My_Collection_Exception('Method catched but could not be called: '.$method);
		}
	}
}

Ce dispositif permet d'utiliser le genre de code suivant (si les objets de la collection le permettent, bien évidemment, et disons qu'ici ce sont des objets représentant des images, supportant les méthodes move et createThumbnail):

# $array contient les objets My_Image
$collection = new My_Collection($array);
$collection->move('/new/path/')->createThumbnail();

Ce qui, comme vous l'aurez deviné, déplacera les fichiers de la collection vers /new/path, puis en créera des miniatures.

Deuxième chose, l'Object Chaining. On vient de le voir en fait, ça consiste à chainer les appels de méthodes grâce à un subtil return $this;, qui retourne donc une référence à l'objet courant. Exemple pratique, dans le Zend Framework, en étendant Zend_View:

class My_View extends Zend_View {
	public function assign($spec) {
		$args = func_get_args();
		call_user_func_array(array('parent', 'assign'), $args);
		return $this;
	}
}

Ce qui autorise le genre de code suivant (en admettant que vous ayiez une instance de My_View dans le registre):

Zend::registry('view')
	->assign('foo', $foo)
	->assign('foo', $bar)
	->render('template.php');

Et là c'est fort, parceque ça rejoint fortement quelque chose dont je parlais en janvier dernier (le truc qui parle de with), et donc j'en déduis une chose formidable: Le père noël existe, et il m'a entendu. Merci Santa Copain.

Tuesday 28 November 2006

Linux + gVim + Rox-filer = Mon IDE.

Une des questions cruciales qui se pose à tout développeur à au moins un moment de sa vie (souvent plusieurs en fait) est le choix d'un environnement de développement. J'en ai testé pas mal, plus ou moins longtemps, et bien que je ne sois jamais complètement satisfait, l'idée de perdre du temps à développer le mien m'indispose. J'ai donc opté pour l'environnement qui me va le mieux: Linux + gVim + Rox-filer.

Note: je ne couvre pas ici les fonctionnalités de débuging avancé, que je n'utilise pas encore, mais pour lesquelles j'ai déjà en tête des solutions qui me conviendront bien mieux que les outils intégrés à un quelconque IDE (je pense fortement à Xdebug).

Continue reading...

dotdeb et PDO_Mysql

Pour ceux:

  1. qui utilisent le repository dotdeb
  2. qui se demandent pourquoi php5-pdo-mysql a disparu
  3. qui ne lisent pas les news de dotdeb

Sachez que php5-pdo-mysql a été renommé/fusionné en php5-mysql.

C'était l'info utile (ou pas) du jour.

Friday 24 November 2006

ViewHelper de génération d'urls

Pré-requis: Zend_Controller_RewriteRouter.

Nous allons voir aujourd'hui comment générer automagiquement des URLs à partir des routes définies dans le RewriteRouter, ainsi que les avantages que cela présente. Le Helper que nous allons utiliser nécessite le stockage du routeur dans le registre:

Zend::register('router', $router);

Avant de voir le Helper lui même, un petit Use Case. Admettons que vous développiez une application de gestion de petites annonces, vous aurez à un moment ou un autre à créer un lien quelconque pour, par exemple, créer une annonce, et en voir les détails. Disons que vous ayez des routes route du genre (je zappe les defaults):

announceCreate.route = /announce/create
announceDetails.route = /announce/:id/details

L'objectif est de pouvoir créer les liens grâce au code suivant (à partir de la view):

<a href="<?php echo $this->href('announceCreate'); ?>">Créer une annonce</a>
<a href="<?php echo $this->href('announceDetails', array('id' => $announce->id)); ?>">Voir l'annonce</a>

Et comme le Zend Framework est bien fait, c'est très simple à réaliser sous forme de ViewHelper:

class Zend_View_Helper_Href {
	
	/**
	 * Returns the href to a given route
	 *
	 * @param string $routeName
	 * @param array $args
	 * @return string
	 */
	
	public function href($routeName, $args = array()) {
		try {
			return Zend::registry('router')->getRoute($routeName)->assemble($args);
		} catch (Zend_Controller_Router_Exception $e) {
			return '#404';
		}
	}
}

Tellement simple que pour combler un peu je vous offre le docblock qui va avec ;-)

Là où ça devient très pratique, c'est quand on souhaite localiser les URLs. Par exemple, imaginons que vous souhaitiez françiser les URLs pour, par exemple, améliorer votre référencement. Vous n'avez qu'a définir un jeu de routes fr_FR, par exemple ainsi:

announceCreate.route = /annonce/creer
announceDetails.route = /annonce/:id/details

[routes_en_UK]
announceCreate.route = /announce/create
announceDetails.route = /announce/:id/details

[routes:route_fr_FR]
announceCreate.defaults.controller = announce
announceCreate.defaults.action = create

announceDetails.defaults.controller = announce
announceDetails.defaults.action = details

L'utilisation de l'héritage géré par Zend_Config nous permet ici d'éviter la redondance des defaults.

Elle est pas belle la vie ?

Note: cette fonctionnalitée est prévue pour être builtin plus tard.

Addictif.

Lasse Gjertsen.

Thursday 23 November 2006

Discussion sur l'optimisation en PHP chez NiKo

Une petite discussion sur l'optimisation en PHP à lieu en ce moment chez NiKo ! Ce n'est pas souvent que je link directement comme ça, donc dites vous que quand je le fais, c'est que ça en vaut la peine ;-)

Ma e-lettre au père noël

En espérant que le père noël ait un bon aggrégateur RSS et qu'il lise mon blog.

http://www.wishlistr.com/ubermuda

Wednesday 22 November 2006

Thème missunderstood

Pour ceux qui ne suivent que le RSS, le thème nouveau est arrivé ! Il est inspiré du design missunderstood trouvé sur oswd et il pique un peu les yeux. Ayant la flemme de trouver un endroit où caser la sidebar, je l'ai mise en display none.

Des objections ?

Sunday 19 November 2006

Zend Framework: Un plugin simple pour le Front Controller

L'implémentation du Front Controller du Zend Framework inclue un système bien pratique de plugins, qui va nous permettre de réaliser plus simplement et proprement l'automatisation des vues, initialement embarquée dans une extension de Zend_Controller_Action (ce qui pose quelques problèmes, nottament au lors de l'utilisation de __forward() et _redirect()).

Continue reading...

- page 6 of 37 -