Pat's blog

To content | To menu | To search

Thursday 27 May 2010

Inserting a flash animation below your html

Recently, with my colleague François, we had to insert a Flash animation in a website. The issue was that it had to be inserted below some menus, which had to remain clickable.

François found an useful trick to make it work very simply. Instead of just using the <object> tag or the <embed> tag, use them both :

<object width="1000" height="500">
          <param name="movie" value="anim.swf"></param>
          <param name="allowFullScreen" value="true"></param>
          <param name="allowscriptaccess" value="always"></param>
          <param name="wmode" value="opaque"></param>
          <embed src="anim.swf" type="application/x-shockwave-flash"
                 allowscriptaccess="always" allowfullscreen="true"
                 width="1000" height="500" wmode="transparent"
                 pluginspage="http://www.macromedia.com/go/getflashplayer">
          </embed>
</object>

Do not forget to specify the opaque wmode for the <object> tag, and the transparent one for the <embed> tag though, or it won't work.

Adding a slash at the end of an URL with Apache2

For some reasons, mostly to resolve path issues, you might want to automatically add a "/" at the end of an url.

It's possible with Apache2, using the rewrite engine.

Let's say that you want to add a "/" when the url finishes with "index.php". Just add this lines to your .htaccess file :

<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteBase /
  # if the url finishes with index.php
  RewriteCond %{REQUEST_URI} index\.php$
  # rewrite the url with a slash
  RewriteRule ^(.*)$ /$1/ [L,R=301]
</IfModule>

Wednesday 12 May 2010

Big bang theory

En regardant mon épisode de Big Bang Theory ce soir, je me suis rendu compte que la production "Chuck Lorre Production" insérait des "messages cachés" à chaque fin de leur série :

Message Big Bang Theory

J'adore ce genre de choses que l'on découvre par hasard :D

Friday 30 April 2010

Installer le JDK Sun sous Ubuntu Lucid Lynx

Depuis la version 10.04 d'Ubuntu, la JDK de Sun n'est plus par défaut dans les paquets. Voici les commandes permettant de l'installer de manière simple:

sudo add-apt-repository "deb http://archive.canonical.com/ lucid partner"

sudo apt-get update

sudo apt-get install sun-java6-jdk

Thursday 29 April 2010

Affichage élégant du copyright des Google Map

Par défaut, à l'affichage des cartes de Google, le copyright au bas de la carte dépasse de son conteneur :

Dépassement du copyright

Le problème vient de la propriété css white-space: nowrap, qui force le texte à se positionner sur une seule ligne.

Pour le contourner, il suffit de changer cette propriété dans les span du conteneur de la carte :

div#map span{white-space: normal;}

Et voilà, le tour est joué ;)

Pas de dépassement du copyright

Friday 23 April 2010

Couleurs de l'internet

Un client à l'instant :

"Avant j'utilisais tout le temps l'internet bleu, maintenant j'utilise le rouge". Comprenez qu'il utilisait jadis ie et qu'il est passé à Firefox récemment.

Je suis fan.

Tuesday 23 February 2010

User et tests unitaires symfony

Il peut être utile dans certains cas d'avoir accès aux méthodes de l'utilisateur lors des tests unitaires. Le problème c'est que les tests unitaires, comme leur nom l'indique, testent le code unitairement, c'est à dire en dehors de tout contexte.

Pour contourner ce problème, il suffit de créer sa propre classe d'utilisateur, et de surcharger les méthodes de la classe sfUser :

//myClassToTest.class.php
class myClassToTest()
{
  public myFunctionToTest(sfUser $user) //$user doit être une instance de la classe sfUser
  {
    return $user->isAuthenticated();
  }
}

Dans le fichier de test :

//myClassToTestTest.php

class myUserTest extends sfUser
{
  private authenticated = false;
 
  // la fonction doit être surchargé car la fonction
  // de la classe mère prend des paramètres
  // contextuels
  public function __construct()
  {
  }

  public function isAuthenticated()
  {
    return $this->authenticated;
  }

  public function setAuthenticated($authenticated)
  {
    $this->authenticated = $authenticated;
  }
}

$t = new lime_test(1);

$myClassToTest = new myClassToTest();
$user = new myUserTest();

$t->is($myClassToTest->myFunctionToTest($user), false, '->myFunctionToTest() returns false when the user is not authenticated');

Tuesday 19 January 2010

Tests fonctionnels Symfony 1.3 et CSRF

Petite "astuce" pour éviter d'être ennuyé par la vérification du token contre le cross−site scripting, lors de la soumission d'un formulaire en environnement de test :

Dans le fichier settings.yml de votre application, ajouter :

test:
  .settings:
    csrf_secret:  false

Monday 18 January 2010

Symfony, Firefox et erreur de session

Aujourd'hui, après avoir écrit un bloc try/catch dans un des contrôleurs d'un module symfony, je me suis retrouvé face à l'erreur suivante : Fatal error: Exception thrown without a stack frame in Unknown on line 0.

Après, une rapide recherche, j'en ai vite déduit que ça venez d'une exception lancé dans mon bloc catch.

Jusque là, rien d'exceptionnel ;) ...

Mais, après suppression de tout code fâcheux dans ma fonction, une reconstruction du modèle, et un vidage du cache, impossible de supprimer l'erreur ! Et plus encore, impossible d'afficher la moindre page sans erreur, quelque soit l'application ou le module.

L'erreur venant en fait du cache de Firefox, il suffisait de supprimer celui-ci (le cache, pas firefox ;) ). Une fois la session supprimée, c'était reparti.

Monday 30 November 2009

Apache2 et cryptage du home dans Ubuntu

Si vous avez installé Apache2 sur une Ubuntu dont vous avez crypté le home, vous risquez de vous retrouver face à une erreur classique en accédant à votre répertoire web via un navigateur : "403 - You don't have access to / on this server". En effet, lorsque votre dossier /home/votre_user est crypté, Ubuntu met les permissions à 700 sur dossier, et vous êtes alors le seul à pouvoir y accéder.

Pour résoudre ce problème malheureusement, je n'ai pas trouvé d'autre solution que :

  • Mettre les permissions du répertoire /home/votre_user à 755, en contournant alors la sécurité établie par le système de cryptage.
  • Mettre le répertoire web en dehors de votre home, en contournant alors la logique de la structure de fichier d'Ubuntu.

Pour ma part, j'ai préféré la première solution, étant le seul utilisateur de mon ordi ;) .

Monday 19 October 2009

Problème d'encodage dans les tests fonctionnels de symfony

Après avoir lancé plusieurs fois une série de tests fonctionnels qui passaient très bien, je me retrouve face à face avec une erreur de type : doesn't match '/ Bègue/' et l'affichage suivant dans la console

      Results of your request
      Contact name
    Email
  
          Bègue 

Au bout d'une demi heure à chercher d'où pouvait venir le problème, à l'aide de joli var_dump(), j'en ai conclu que les problèmes... venaient d'un var_dump()... Un var_dump() sur la variable concernée par mes tests empêchait le navigateur de symfony de reconnaitre l'encodage de la page.

Conclusion, utilisez le debugger et les logs ;) (c'est pas faute de le savoir pourtant...)

Monday 14 September 2009

Affichage des erreurs d'un formulaire symfony dans sa page d'origine

Voilà un moment que j'ai un problème avec la validation des forms avec symfony 1.2. Tout marche très bien lorsqu'il s'agit d'afficher une page contenant uniquement un formulaire. Cependant, les choses se compliquent un peu quand la page dans laquelle est affichée le formulaire contient d'autres données que le-dit formulaire.

En effet, une redirection vers cette page, afin d'appeler l'action permettant de la charger, remet les champs du formulaire à zéro... La plupart des solutions que j'ai pu trouver sur le net consiste alors à mettre en session les erreurs via le système de flash, afin de les ré afficher dans la page. Bien qu'opérationnelle, cette solution s'avère fastidieuse dès lors que le formulaire contient un grand nombre de champs.

La solution que j'ai employée consiste à appeler la même action afin d'afficher la page et de valider le formulaire. L'astuce consiste à traiter le chargement de la page en fonction du type de requête : post ou get.

Dans le fichier actions.class.php :

public function executeShow(sfWebRequest $request) 
{
  $this->anObject = $this->getRoute()->getObject();
  $this->form = new myForm();
  // si un formulaire a été soumis
  if ($request->isMethod('post')) 
  {
     // on récupère le formulaire soumis
     $this->contact_form->bind($request->getParameter($this->form->getName()), $request->getFiles($this->form->getName()));
     if($this->form->isValid())
     {
        //traitement du formulaire
     }
  }
}

Il suffit alors d'afficher le formulaire normalement dans le template :

<div id="form">
  <form name="form" action="<?php echo url_for('@module_show') ?>" method="post">
    <table>
      <tfoot>
        <tr><td><input type="submit" value="Send"/></td></tr>
      </tfoot>
      <tbody>
        <?php echo $form ?>
      </tbody>
    </table>
  </form>
  <?php endif; ?>
</div>

Cette solution pose cependant 2 problèmes :

Le premier étant qu'il n'est plus alors possible d'actualiser la page sans renvoyer les données du formulaire, à moins d'entrer à nouveau l'url dans la barre de navigation.

Le deuxième intervient lorsqu'il y a plusieurs formulaires sur la même page, car un seul formulaire peut être validé.

Monday 24 August 2009

Mac User

"Si j'ai besoin de fonctionnalités, je vais sous Linux"

Bastien, mac-user

Tuesday 28 July 2009

Regarder la télévision sur son ordi avec la neufbox et VLC

Bien motivé pour bosser ce soir, je suis malheureusement tombé sur le concert de Queen à Wembley.

Du coup, j'ai trouvé une charmante astuce pour regarder la télé sans avoir à bouger ;).

Si vous possédez une neufbox, il suffit de de lancer VLC, d'aller dans le menu média et de cliquer sur 'Ouvrir un fichier...'. Cliquez ensuite sur 'Plus d'options' au bas de la fenêtre et copiez le texte suivant dans le champ qui s'affiche : http://televisionsurpc.neuf.fr/televisionsurpc.m3u.

Pour changer de chaîne, vous pouvez soit utiliser les boutons 'suivant' et 'précédent', ou mieux encore ouvrir la liste de lecture.

Enjoy !

Thursday 23 July 2009

Bienvenue !

Bienvenue sur mon blog !

Mais pourquoi un blog me direz-vous ? (ou pas, mais vous aurez quand même la réponse...) Pourquoi avoir attendu tant de temps avant de faire ce blog ?

Et bien tout simplement, parce que je viens de changer de job.

Anciennement dans une "usine de code", à savoir une grosse multinationale d'outsourcing, je viens de passer dans une petite boîte bien sympa . J'y ai d'ailleurs rejoint mon ami de longue date bast.

Je vais enfin pouvoir consacrer mon temps à un boulot intéressant, et surtout au monde du libre, pour lequel je viens d'ailleurs de publier un module jelix. Du coup, je vais pouvoir publier mes découvertes et créations merveilleuses sur ce blog.

A bientôt !