To content | To menu | To search

Sunday 2 November 2008

Passing arbitrary parameters to a route in symfony

Parameters are an important parts of routes in symfony, and in any other routing framework for that matter, and everyone knows how to add mandatory or optional parameters to a route. But did you know you can also silently pass arbitrary parameters to a route from the routing definitions ? This may not be a very clear description, so let's take an example. Say you have a tabbed navigation system, and you want to know in your template which tab is the current one. In a perfect world, you could assume one tab corresponds to a module and check this module, but let's say that one tab can contain multiples modules. How are you doing now ? Quite simply actually, by passing a tab parameter to your route.

foo_route:
  url:       /foo
  param: { tab: foobar }

bar_route:
  url:       /bar
  param: { tab: foobar }

Now you can access the tab parameter in your layout:

<?php $currentTab = $sf_params->get('tab'); ?>

Easy heh ? Of course this kind of parameters is not limited to tell which tab we're currently in, you can, for example, bypass the limitation of a system that requires a particular file to be in a particular location (not that using mod_rewrite would not be more efficient, I just wanted one more example):

foobar_xml:
  url:       /a/stupid/url/that/you/cant/change/foobar.xml
  param: { module: default, action: static, file: "/assets/foobar.xml", mimetype: "text/xml" }

Here we simply pass the file and mimetype parameters to an action that'll take care to serve the right file.

Handy ! But please note that you can't pass such parameters in sfPropelRouteCollection for now (yup, this a bug, and there's a ticket already).

Wednesday 29 October 2008

[Pub] Monitoria: track your websites downtime

Monitoria is a web service developped by some friends of mine and designed to help you track and minimize downtime on your sites. Excerpt from the homepage:

Monitoria is a website uptime monitoring service designed to help you detect website downtime which can mean lost revenue and profits.
The worst thing is customers who may never return to your website again if they experience difficulties opening your website.
Register now and take control over downtime today!
Let Monitoria monitor your website 24/7/365 and alert you immediately upon your website accessibility, availability or performance problems.

And because you're smart enough to read my blog, here is a 20% discount coupon code: phpmafia20-87361.

Sunday 26 October 2008

PHP's april's fool

http://wiki.php.net/rfc/namespacese...

wait, we're not April 1st ?

Tuesday 21 October 2008

[Pub] Atomeet: organisez vos soirées entre amis !

Atomeet est un service (gratuit) de gestion d'événements récemment lancé par Plumbr (oui oui c'est des potes à moi), et je m'en vais vous en faire la réclame.

Atomeet, c'est vachement bien. Sérieusement. Déjà c'est joli (dotclear me fait des misères sur les images donc pas de screenshot, allez voir par vous même), on ne pourra pas dire le contraire. Ensuite, c'est bien foutu: créer un événement s'avère d'une rapidité et d'une simplicité déconcertantes, un titre, une date, un lieu, et c'est parti. Pas d'inscription préalable, pas de blabla inutile, que du bon. Une fois votre événement créé, il vous suffit d'inviter vos amis (avec gestion d'import des contacts gmail, live, etc), qui a leur tour n'ont pas besoin de créer de compte, juste de cliquer sur un lien pour confirmer (ou infirmer) leur présence. Facile non ?

Bien sur atomeet ne se résume pas a ça, et des tas d'autres fonctionnalitées seront lancées à la fin de la beta (oui, atomeet est un service web 2.0).

En plus le nom est rigolo.

Pas encore convaincu ? Essayez le ! Atomeet c'est rapide, facile et gratuit :-)

Thursday 16 October 2008

Mass vim file opening reloaded

Thinking about it, the snippet I posted earlier was a bit silly as vim can open by itself multiple files way more efficiently. The only benefit from my script is that I don't have to type the --servername and --remote-silent-tab.

So let's add some usefulness ! First, when I need this script, it's often that I first grepped the files, and then decide that I want to edit them all. From this point of view, having to pass them as arguments is not that handy, so we'll add a way to pass them via STDIN.

Also, what if I want to send them to another vim server ? We'll add this ability too.

Here is the resulting script:

#!/usr/bin/env bash

# set a default SERVERNAME
SERVERNAME="ash0"

# look for files on stdin
if ! [ -t 0 ]; then
  FILES=`cat /dev/stdin`
else
  exit;
fi;

# now let's check if we want a specific vim server
if ! [ -z $1 ]; then
  SERVERNAME=$1
fi;

# we can now open the files
/usr/bin/gvim --servername $SERVERNAME --remote-silent-tab $FILES

Tada !

You can now do the followings:

grep foo | sendtovim
grep foo | sendtovim grep0

Wednesday 15 October 2008

Now working at Sensio Labs

A quick post to tell (for those not knowing already) that I now work at Sensio Labs, creators of the symfony framework. Expect some symfony stuff to be posted regularly \o/

For those wondering, yes that means I'm actually dropping any previously started ZF related development for good, I'll post something soon on why I don't like ZF anymore :-)

A specific stylesheet for each module

So this is the first post of the newly opened symfony category of this blog, and I want to make things clear right now: you (most likely) won't find (yet) any protip or high level symfony tutorials here, as I'm still in the process of learning symfony. The good news though is that I'm currently assigned an 1.2-DEV project, so you may get some insight at what's up in the dev branch of the framework (especially regarding sfForm) :-)

If your are looking for more complete material on the subject, please redirect yourself to the official website (where you can find the documentation and a very interesting blog) or Fabien's blog.

That said, I think it could be interesting to post all the little things I learn everyday that make development with symfony easier for the everyday php developper that you might be if you made it this far into this post ;-)

Soooo, let's begin the show, with some yaml magic. Yaml I said ? Yaml I said. For those not knowing yet, yaml is the format of choice for symfony's configurations file. So what's the point between configuration files and stylesheets ? Let's say you've got a symfony application (say, frontend), and you'd like a particular module (say, news) in this application to have its own stylesheet in addition of the defaults stylesheets you defined already. Very simple, you start by creating the adequate configuration file:

cd apps/frontend/modules/news/
mkdir config
vi config/view.yml

All you have to do know is declare the stylesheet:

all:
  stylesheets: [news]

And that's all, no helper call in the layout, your news.css will automagically be appended to the <head> of your generated html. You can also declare multiples css, or control which actions get a particular css, and even specify to which media they apply:

all:
  stylesheets: [news, news_print: { media: print }]
list:
  stylesheets: [list]

Handy, heh.

But that's not all ! If you're not that much into yaml, you can use a view helper, directly into your template:

<?php use_stylesheet('news'); ?>

Or even add it from the controller:

<?php $this->getResponse()->addStylesheet('news'); ?>

Tuesday 14 October 2008

Mass vim file opening

Remember my old post about vim and rox-filer ? Well I've got one tiny and silly addition to it now, I can mass open files from any shell command line, with this little script placed in my ~/bin/ (don't forget to chmod +x):

for i in $*; do
  /usr/bin/gvim --servername ash0 --remote-silent-tab $i
  sleep 1
done;

The sleep 1 is necessary as vim does not seem to like being flooded with files.

Example usage:

sendtovim `grep foo *`

Opens in vim all files containing "foo" in the current directory. Who said handy ?

Note: I know have an updated and useful version of this script

Il est bon ton café gringo

Un petit post rapide pour dire (pour ceux qui ne savaient pas déjà) que je bosse désormais chez Sensio Labs, les créateurs de symfony, depuis une bonne grosse semaine maintenant. J'aurai donc bientot plein de tips de noob à vous raconter sur symfony \o/

Tuesday 30 September 2008

Gné fini le japon :(

Bon voilà je suis à ma maison après un vol long, très long, et franchement, je suis super claqué, donc je vais aller dormir longtemps, ensuite je bloguerais quelques trucs.

Friday 19 September 2008

Copain de japon \o/

Juste histoire de, Le blog de Fabien un des joyeux lurons de notre bande de touristes :-)

Le japon, un pays formidable, jours 2 et 3

Donc hier, on a fait quoi ? On est allés a Nara, en passant par Horyuji. A Horyuji, on a vu le plus vieux batiment en bois du japon, et franchement il est pas mal. Ce qu'on a vu aussi, c'est une invasion d'écolières, et ça c'est franchement pas mal aussi. Ensuite direction Nara donc, pour voir le plus grand batiment en bois du monde (je crois, du japon au moins c'est sur), avec un grand Bouddha a l'intérieur. Vraiment impressionant.

Fin de journée dans le centre de Nara, où on a mangé... du boeuf de Kobe. Alors là, revoyez tous vos standards sur la viande, c'est un peu comme les sushis, ça n'a RIEN A VOIR, c'est juste la meilleure viande que j'ai jamais mangé de ma vie. Là dessus, on a enchainé sur les meilleurs sushis au thon du monde, d'un coup là je crois que je vais arretter les sushis en France...

Ce matin, debout super tôt pour aller a Hiroshima en Shinkansen, voir le mémorial de la paix d'Hiroshima. Mais avant ça, pause petit déjeuner dans une espèce de boutique avec des trucs bizarres qui ressemblaient à des hotdogs avec des sauces bizarres, pas mal du tout ma foi. Puis le musée, après une première partie assez facile, le détail des effets et conséquences de la bombe sont assez difficiles à gérer, c'est assez émouvant, et on en ressort forcément touché.

Après le musée, nous sommes allés sur une île du nom de Miyajima pour faire la grimpette sur le Mont Misen, a coup de téléphérique et de marche a pied dans les escaliers. Après une bonne heure de montée, nous jouissons d'un panorama exceptionnel sur Hiroshima. S'ensuit une loooooooooooooongue descente d'une grosse heure et demie dans un parcours montagneux forestier assez difficile, et hop retour à Hiroshima par le ferry, un diner a base de Udon rapidement expédié, retour a l'hotel a Osaka et douche bien méritée avant de bloguer.

Bientot des belles photos, ça vient !

Thursday 18 September 2008

Le japon, un pays formidable, jour 1

Ohaio du japon les copains ! Je suis en ce moment même dans un charmant (ahah) ryokan post-moderne en périphérie d'Osaka, au Japon donc. Arrivés hier vers midi (heure locale, comptez +7h de décallage depuis la France), un peu fourbus après un vol de 10h et 4h d'escale à Helsinki, mais franchement heureux d'être là... Première impression du japon après une journée à errer dans Osaka: wow. Ce pays semble incroyable. Tous les clichés qu'on peut en avoir ou presque se confirment à un moment ou un autre. L'amabilité des gens, qui semblent tenus pour acquis que tu vas les aider a descendre leur valise de 50kg, la politesse, l'excentricité, la fashionitude, tout ! Après avoir déposé nos affaires a l'hotel, on a un peu marché dans notre quartier d'osaka, qui nous a paru un peu terne, et puis on est allés rejoindre un pote dans le quartier de Namba, et là, le japon s'est ouvert à nous. La profusion de bannières lumineuses, les foules fraiches et bigarrées, les échopes de sushis à même la rue, les salary men complètement défaits...

En parlant de sushis, première étape dans un restaurant située dans un complexe commercial type Lafayette, après un bref passage dans un bar pour une petite asahi accompagnée d'un morceau de bouffe ressemblant a s'y méprendre à du pedigree pal, nous arrivons dans un restaurant a l'entrée duquel il faut se déchausser. Je me retrouve donc pied nu sous une pluie de ohaio gosaimas et autres exclamations de bienvenues de la part de tout le staff, avec leurs voix de manga, l'impression est assez irréelle, et franchement plaisante. Après quelques difficultés pour commander, nous sommes rejoints par quelques japonais qui étaient non loins de nous dans le bar précédement cité, ce qui semble être suffisant ici pour se faire des gros checks en rigolant fort, et après tout pourquoi pas ? Et voilà qu'arrivent les sushis, et là, c'est toute une vision du monde qui change. Plus jamais je ne verrais les sushis de la même papille. Moi qui pensais avoir gouté les meilleurs sushis du monde à Paris, quel pauvre fol je fais. Aucune, mais alors AUCUNE comparaison n'est possible, il faut le gouter pour le croire. Seul petit bémol, tous les poissons ne sont pas forcément adaptés à nos papilles occidentales... Cela s'est surtout révélés dans le deuxièume restaurant où nous sommes allés, à Namba, et franchement, l'espèce de truc jaune granuleux me reste encore en travers de l'estomac.... Pour la peine, on s'est arrettés au mcdo le plus proche, et une fois qu'on a testé un mcdo du japon, je pense qu'on arrette de raler sur les steacks des mcdo en France, parceque bon... ici c'est comment dire. Aucune comparaison possible :s

Bon voilà, c'est fini pour aujourd'hui, demain je vous parlerai peut-être des charmantes japonaises (donc quelques charmants spécimen font de l'internet aussi pas loin de moi) qui peuplent les rues de ce pays absolument incroyable, et vous pouvez toujours regarder les photos pourries que j'ai pris avec mon iphone en attendant les photos un peu moins pire que Michal (qui n'a pas fait la starac) prend avec son APN.

Thursday 11 September 2008

Un petit pas pour l'homme...

Les plus perspicaces (ou présents sur IRC) l'auront déjà remarqué, Digital Fashion change de nom. Vous lisez désormais Mirmo Dynamics \o/ Bien entendu, ce changement de nom s'accompagne d'un changement de domaine, et des redirections qui vont bien depuis les anciennes URL.

Qu'est-ce que ça change pour vous ? Rien ma foi, pour l'instant. A terme, ce blog est appelé à évoluer un peu. En effet, cela fait un bout de temps qu'il n'évolue pas, les mises à jours sont rares et laborieuses, et ça me peine un peu de voir mon blog dans cet état, donc je profite du nouveau chapitre de ma vie (demain est mon dernier jour à mon job actuel pour info) pour aller de l'avant sur plusieurs fronts, dont mon blog donc. J'ai quelques idées déjà, et je vais y réfléchir un peu avant de mettre tout ça en oeuvre :-)

Au passage, je vais essayer de tenir mon engagement, ce week end devrait voir pleuvoir les posts sur la Suède :-)

PS: thanks to naneau for having found the second law of mirmo dynamics, and this domain.

Sunday 7 September 2008

Traîner pour sécher

Vendredi, on m'a offert une magnifique peluche champignon.

Sur l'étiquette on peut lire ceci:

All new materials. Polyester fiber. Wash separately without bleach. Hand wash in cold water. Hang out to dry.

Et c'est traduit comme suit:

Tous nouveaux matériels. Fibre en polyester. Se laver séparément sans le décolorant. La main se lave dans l'eau froide. Traîner pour sécher.

Ça se passe de commentaire.

Wednesday 13 August 2008

Démission

Alors voilà, j'ai remis ma démission hier à mon DT, qui l'a accepté. Je quitterais donc mon emploi le 12 septembre prochain, 4 jours avant de partir pour le japon pendant 2 semaines.

C'est une grosse page de ma vie professionnelle qui se tourne, et un nouveau chapitre qui s'ouvre, avec de nouvelles possibilités à l'horizon. Après deux ans et demi (world record wouhou !) chez Newsweb, j'ai ressenti (a nouveau) le besoin de progresser techniquement, ce qui n'est plus possible pour moi ici. Donc voilà, je commence un nouvel emploi le 6 octobre, qui devrait m'apporter beaucoup sur le plan technique, ainsi que sur d'autres aspects de ma vie professionelle sur lesquels je m'étendrais plus tard. Oh, et je serais aussi ammené à travailler avec des gens sympas (enfin au moins un, il me reste encore à découvrir les autres mais ça s'annonce plutot pas mal).

Voilà vous savez tout !

Monday 28 July 2008

The Eight Irrestitible Principles of Fun

http://www.eightprinciples.com/

(via pmog)

Wednesday 23 July 2008

La Défense / Puteaux a pied

J'aime beaucoup google maps, et pour fêter ça, et à cause des travaux sur le tram qui coupent la circulation entre la défense et puteaux, j'ai fait une map avec le trajet optimal (je pense) entre le parvis de la défense et la station de tram de puteaux.

Voilà c'était la minute je kiff gmaps.

Monday 14 July 2008

About the self keyword in static methods

While setting up a test server for some software I wrote at the office, I eventually noticed the following notice:

Notice: Use of undefined constant self - assumed 'self'

That surprised me, because 1) I though self were some kind of "superglobal" constant or a special token of the parser, always automatically available in a static method and 2) the code works. So what's up in there ? Let's make a simple test:

<?php

class foo {
	static public function bar() {
		var_dump(is_callable(array('self', 'foobar')));
		var_dump(is_callable(array(self, 'foobar')));

		var_dump(class_exists('self'));
		var_dump(class_exists(self));

		self::foobar();
	}

	static public function foobar() {
	}
}

foo::bar();

Executing the above code will yeld the following result:

bool(true)

Notice: Use of undefined constant self - assumed 'self' in /home/geoffreyb/test.php on line 6
bool(true)
bool(false)

Notice: Use of undefined constant self - assumed 'self' in /home/geoffreyb/test.php on line 9
bool(false)

What do we learn here ? Not much actually. It seems like self as a constant is only available when used with the scope resolution operator, aka double-colon or paamayim nekudotayim. When you want to use it in, for example, a callback definition, use a string representation of self:

<?php

is_callable(array('self', 'bar'));
call_user_func(array('self', 'bar'));

Which, while making absolutely no sense at all, works. Another way to get around this is to use the get_class() function that, without any argument, will return the name of the class you're currently in (foo in my example).

After a bit more investiging, I found out that there is nothing special about the self token, which is actually a string token. You can check this very easily with the following code:

<?php

class foo {
	static public function bar() {
		self::foobar();
	}
}

var_dump(token_get_all(file_get_contents(__FILE__)));

Somewhere inside the output, you'll find the following piece of text:

  array(2) {
    [0]=>
    int(307)
    [1]=>
    string(4) "self"
  }

And the token id 307 is resolved by token_name to string.

Thursday 10 July 2008

Rename directories to lowercase

Using a single (and somewhat simple) shell line, you can rename any directory to its lowercase version.

for i in *; do lcase=`echo $i | tr A-Z a-z`; if [ ! -d $lcase ]; then mv $i $lcase; fi; done;

Viva el chell !

- page 1 of 37