Mots-clé : internet

jQuery : animate(), queue() et dequeue() solution

Voilà le problème que je viens de rencontrer et que vous avez sûrement rencontré si vous faites un petit peu de jQuery : j’ai fait un <div></div> qui était un petit rectangle, et je voulais, que lorsque la souris entre dedans, il s’agrandisse, et lorsqu’elle en sort, il diminue.

Le problème (qui est la plupart du temps un avantage) avec jQuery, c’est que lorsqu’une animation commence, s’il y en a une autre pour le même élément, il la met dans une queue() (toute plaisanterie grivoise mise à part).
Donc, si, comme moi, vous voulez faire une animation assez lente, et que vous entrez et sortez rapidement avant la fin de l’animation, il va y avoir plein d’éléments qui vont aller à l’intérieur, et… même si vous éloignez la souris, les animations d’entrée-sortie vont continuer à jusqu’à ce que la queue soit vide ! …là aussi toute plaisanterie grivoise mise à part.

La solution est simple : il faut non seulement dire à l’élément concerné d’arrêter l’animation via stop(), mais aussi :

  1. dire de supprimer tout ce qu’il y a dans la queue (premier paramètre = true)
  2. dire de jouer immédiatement l’animation qui suit (premier paramètre = true)

Exemple de code qui fonctionne :

  $('tr')
    .mouseenter(function() {
      var id=$(this).attr('id').substring(3);
      var c=$(this).children('.principal').children('.texte');
      c.stop(true, true).animate({ height: '400px'}, 'slow');
    })  
    .mouseleave(function() {
      var c=$(this).children('.principal').children('.texte');
      c.stop(true, true).animate({ height: '89px'}, 'slow');
    }); 

Php : comment dériver la classe Exception et lui passer un tableau de chaines

Dans la plupart de mes pages, j’ai besoin, lorsqu’il y a une erreur, de mettre un message explicite qui est souvent long. Qui dit long dit plusieurs lignes. Ou bien j’ai envie de stopper l’exécution en cours et d’afficher plusieurs messages. L’idée de base est de lever une exception, mais une exception qui reçoit plusieurs chaînes de caractères comme message d’erreur. Alors j’ai fait ma propre classe en m’inspirant de l’aide sur les exceptions de php.net.

On peut lever une exception de cette façon :

throw new ExceptionErr(
  array(
    "Nous vous avons envoyé la liste récemment.",
    "Afin de garantir une qualité de service ".
    "pour tout le monde, ",
    "nous ne pouvons ré-envoyer la liste que dans ".
    $delai
  ) 
);

Vous pouvez la récupérer ou simplement lire le code. En espérant que cela serve à d’autres personnes :

<?
/**
 * fichier exception_err.php
 *
 * Historique :
 * 21/09/2011 : Olivier Pons
 *              Création
 * @author Olivier Pons
 * @version 1.0
 * @since 1.0
 * @copyright Olivier Pons
 * @package Classes_Base
 */

/**
 * Includes
 */

/**
 * Classe Exception qu'on peut
 * lever en lui passant un tableau
 * en paramètre.
 *
 * @author Olivier Pons
 * @version 1.0
 * @since 1.0
 * @copyright Olivier Pons
 * @package Classes_Base
 *
 */
class ExceptionErr extends Exception
{
  /** 
   * @var array le tableau contenant les lignes d'erreur
   */
  private $TabErr;
  
  /** 
   * Lit le tableau contenant les lignes d'erreur
   * @return array le tableau contenant les lignes d'erreur
   */
  public function getTabErr()
  {
    if (!isset($this->TabErr)) {
      throw new Exception('TabErr : pas initialise');
    }   
    return $this->TabErr;
  }

  /** 
   * Surcharge de la représentation de l'objet sous forme de
   * chaine
   *
   * @return string Représentation de l'objet sous forme de
   *   chaine.
   */
  public function __toString() {
      return __CLASS__ .
        ": [{".$this->code."}]: {".$this->message."} ".
        "- {".var_export($this->TabErr,true)."}\n";
  }

  /** 
   * Constructeur surchargé de la classe "Exception" de base.
   *
   * @param array $tab_err
   *   Tableau contenant les chaines à mettre à la suite dans
   *   un tableau d'erreur (voir les classes qui utilisent
   *   cette classe pour comprendre)
   * @param integer $code
   *   Numéro de code d'erreur
   * @param Exception $previous
   *   Exception précédente
   *
   * @return void
   */
  public function __construct(
    $messages, $code = 0,
    Exception $previous = null) 
  {
      if (!is_array($messages)) {
        throw new Exception("Messages : array attendu");
      }   
      if (count($messages)==0) {
        throw new Exception("Messages : tableau vide");
      }   
      list($message)=each($messages);
      parent::__construct($message, $code, $previous);
      $this->TabErr = $messages;
  }
}

?>

JavaScript : comment tester, et faire partager très rapidement son code

Supposons que vous vouliez montrer quelques exemples de code JavaScript, mais surtout, le partager rapidement.
C’est très simple : avec http://jsfiddle.net/, vous tapez votre exemple de code, et à la fin vous cliquez sur « sauver » et hop, une URL automatique est créée. Il vous suffit de copier colle le lien pour partager votre code exemple (ou votre code qui démontre qu’une librairie a un problème, par exemple).

WordPress, Php et XML rpc – how-to. Explication

WordPress est un outil formidable. Il offre la possibilité d’envoyer des articles à distance.
Pour ce faire, entre autres, les développeurs ont crée une page qu’il faut appeler en lui passant les paramètres adéquats.
Cette page est située à la racine de l’installation de votre site WordPress. Par exemple si vous avez installé WordPress sur http://monsite.com/wordpress/, il faudra appeler la page http://monsite.com/wordpress/xmlrpc.php

Passons maintenant aux choses sérieuses : comment automatiser un envoi d’articles en php ?
C’est extrêmement simple. Je vous donne les indices, et à partir de là, à vous de finir de développer afin d’atteindre votre objectif.

Première chose : il faut que le PC qui doit envoyer les articles ait Php d’installé, avec le support XML rpc. Dit autrement, il faut qu’il soit compilé avec l’option --with-xmlrpc, ce qui n’est pas le cas par défaut. A vous de vous débrouiller tout seul pour arriver à activer l’option. Si vous êtes sous Linux, et que vous avez tout compilé à la main, comme un bon guerrier que vous êtes, il vous suffit d’afficher une page qui éxecute "phpinfo();" et Php vous affichera la ligne de compilation, il vous suffira de recompiler avec l’option --with-xmlrpc.

Une fois cette tâche terminée, il vous faudra activer sur le site WordPress concerné, l’option XML rpc. Il faut se connecter en tant qu’administrateur, aller dans le menu Réglagles » Ecriture » Publication à distance et cocher l’option XML-RPC.

Enfin on y arrive, le code qui se connecte et envoie quelque chose !

  1 <?php
  2 /* Exemple WordPress, Php et XML rpc  */
  3
  4 $request =
  5   xmlrpc_encode_request(
  6     "wp.getUsersBlogs",
  7     array("nom_d_utilisateur", "mot_de_passe")
  8   );
  9 $context =
 10   stream_context_create(array('http' => array(
 11     'method' => "POST",
 12     'header' => "Content-Type: text/xml",
 13     'content' => $request
 14   )));
 15 $file = file_get_contents(
 16   "http://monsite.com/wordpress/xmlrpc.php", false,
 17   $context);
 18
 19 $response = xmlrpc_decode($file);
 20
 21 if ($response && xmlrpc_is_fault($response)) {
 22     print(utf8_encode(
 23       "xmlrpc: $response[faultString] ($response[faultCode])"
 24     ));
 25 } else {
 26     print_r($response);
 27 }
 28 ?>

Donc là vous avez le code.
Pour terminer, toutes les fonctions disponibles sont ici : http://codex.wordpress.org/XML-RPC_wp.
Elles ne semblent pas trop à jour, alors si vous voulez la liste réelle, regardez votre dans le blog, le fichier ./wp-includes/class-wp-xmlrpc-server.php, la fonction wp_xmlrpc_server().
Vous y verrez toutes les fonctions que vous pourrez appeler en XML RPC.

C’est tout de même bien mieux de se faire son outil qui fait les envois d’articles à distance, plutôt que d’en acheter un, non 🙂 ?

Mathieu Robin et jQuery : un site à voir

J’ai laissé quelques commentaires sur un site que j’ai trouvé sympa, et depuis j’ai parlé plusieurs fois avec le créateur du site. Il a de très bonnes idées et fait plein de choses, et surtout en ce qui me concerne car j’aime les nouveautés, il suit de très près tout ce qui concerne jQuery.
Si, vous aussi, vous voulez suivre ça de très près, allez jeter un coup d’oeil, c’est lisible et sympa. Il m’a en plus mis dans les sites à visiter alors, hein, bon. Cliquez sur l’image pour y aller :

Olivier Pons en marque page chez Mathieu Robin

Php : T_PAAMAYIM_NEKUDOTAYIM !

Si jamais un jour vous vous trouvez en face de cette erreur surprenante :
Parse error: syntax error, unexpected T_PAAMAYIM_NEKUDOTAYIM in {fichier source} on line 35
l’explication (et la solution) sont sûrement ici :

  • il vous manque un point virgule à la ligne concernée ;
  • il y a une variable utilisée qui n’est pas définie ;
  • il y a une erreur incompréhensible, par exemple dans mon cas c’était un define mal écrit :
    if (!defined(SESSION_NAME)) {...}
    alors que le bon code était avec les côtes :
    if (!defined('SESSION_NAME')) {...}

En espérant, comme d’habitude, aider quelqu’un, un jour, quelque part…

AdBlock : petit guide sur le don

Avec le temps, je commence à acquérir une mentalité un peu moins latine, c’est à dire que, par définition, dans les pays latins, si on peut avoir quelque chose gratuitement, ça ne sert à rien de payer. Le volontariat n’existe pas dans les pays latin. Vous connaissez peut-être le proverbe « je ne fais pas ça pour la gloire », un proverbe typiquement de nos contrées. Bien évidemment, c’est une généralité, et j’espère vivement que vous ne vous sentez pas concerné.

Pourquoi ce billet ? Tout simplement parce que j’ai donné 10 dollars, soit 10 euros à un type qui a fait le plugin le plus géniallissime de tous les temps, j’ai nommé : AdBlock. Oui, il bloque toutes les pubs qui nous pourrissent la vie. Il les cache. Il a développé le plugin sur Chrome, puis sur Safari, après s’être inspiré d’Adblock Plus sur Firefox. Ce type a changé ma vie d’internaute acharné. 10 euros c’est rien comparé à ce qu’il a fait pour moi. J’arrive enfin à lire ZDnet sans avoir envie de casser mon écran ! Bon ok j’éxagère un peu (à peine).

Je traduis pour les impatients (et après suit le mail original) :

Salut Olivier !

J’ai écrit AdBlock dans l’espoir que je pourrais rendre la vie des gens un peu plus agréable. Ton don m’incite à penser que j’ai réussi 🙂
Merci, merci merci beaucoup tu es si sympa !

Ces derniers mois je suis particulièrement inquiet parce que j’ai quitté mon travail en espérant que tous les utilisateurs donneraient assez pour m’aider moi et ma famille à vivre, et m’aider à continuer le développement. Peu de gens ont donné, actuellement, ce qui rend ton don encore plus appréciable — ton don est largement au dessus ce que la plupart des utilisateurs donnent (zéro).

Dans mon cas, Katie et moi avons décidé que le travail fait est tellement important qu’il faut que je continue, que je puisse vivre uniquement des dons ou pas, jusqu’à ce que je n’aie plus aucune réserve. Ton don m’éloigne un petit peu plus d’une situation de fauché… au fait je t’ai dit merci ? Merci ! 😀

Bon blocage de pub,
– Michael

PS : Si c’est possible, pourrais tu aller à http://chromeadblock.com/donate/thanks/ et en parler ? J’ai essayé de mettre quelque chose en place pour que PayPal le montre automatiquement après que tu aies donné, mais ça n’a pas l’air de fonctionner correctement.
En tous les cas, cela m’aiderait ENORMEMENT 🙂

Ci suit son mail de réponse :

Hi Olivier!

I wrote AdBlock in the hope that I could make people’s lives better. Your
donation tells me that I did it 🙂 Thank you very, very much! You are so
great!

It’s been a little scary in the few months since I quit my job, hoping that my
users would donate enough that I could support my family and fund more AdBlock
development. Not many users donate yet, which makes your donation even more
appreciated — your donation is way above what most users give: zero.

In any case, Katie and I have decided that it’s important enough work that I
should keep doing it whether we can live off of donations or not, until we
start running out of savings. Your donation just tipped the scales a little
further away from going broke… did I say thank you yet? Thank you! 😀

Happy ad blocking,
– Michael

PS: If you don’t mind, would you go to http://chromeadblock.com/donate/thanks/ and help me spread the word? I tried setting it up so PayPal would show you
that automatically after you donated, but it doesn’t seem to work reliably.
Anyway, it would help me IMMENSELY 🙂

Cours à l’institut universitaire d’informatique (IUT) d’Aix en Provence

Voici le fichier PDF du cours sur :

  • la base des DNS ;
  • les hôtes virtuels (« virtual hosts ») ;
  • règles de réécriture (« RewriteRules ») ;
  • les 3 principes de sécurité à avoir en tête.

Pour les quelques étudiants qui voudraient récupérer et lire le cours, un petit conseil sur les question qui vont vous être posées :

  • il vous faut connaitre les directives de réécriture les plus utilisées (redirection, etc) ;
  • il vous faut impérativement réussir à installer un ou plusieurs hôtes virtuels sur un ordinateur local et vous assurer que vous vous souvenez des étapes à faire ;
  • il vous faut savoir mettre en place une ou deux règle de réécriture afin de bien comprendre le fonctionnement. Vous allez avoir un ou deux exemples de règles à expliquer, et si vous n’avez jamais essayé d’en mettre une en place vous ne pourrez jamais les expliquer ;
  • enfin… avez vous bien en tête les 3 principes de sécurité ?

Bonne chance !

Et surtout n’hésitez pas à laisser un commentaire ou poser des questions ici.
Si vous avez des commentaires à faire sur mon cours, même chose : lâchez vous !