Catégorie : développement

Tout ce qui concerne le développement en général, que ce soit des choses générales, ou des choses bien précises. Cela va de la gestion de projet à la recherche du fonctionnement de pointeurs en C.

Astuce jQuery : accepter un clic une fois, une seule fois, pas de double clic

A lieu de faire

$('#mon_element').on('click', function() {
  mafonction();
} );

c’est pas « on » c’est « one » :

$('#mon_element').one('click', function() {
  mafonction();
} );

En fait une fois qu’on a cliqué sur l’élément en question, jQuery supprime l’évènement avec la fonction unbind().

Serveur Apache et mod_rewrite : mémo / astuces / hints / tips

Voici mes notes de règles de ré-écriture. Principalement des expressions régulières dont j’ai souvent besoin et que je n’ai pas en tête :

Problème :
Apache ajoute automatiquement des slashes / si c’est un répertoire.
Solution :
DirectorySlash Off
Risques de sécurite si ça n’est pas bien géré.

Problème :
Chercher une variable dans les paramètres _GET, y compris en plein milieu (les solutions en général ne sont valides que si la variable est au début dans le _GET)
Solution :
RewriteCond %{QUERY_STRING} (^|&)nomvariable=valeur(&|$)

Problème :
Prendre en compte toute une séquence de caractères sauf le slash
Solution :
RewriteRule ^/([^/]+)/?$ page.php?page=$1 [L]
ou encore prendre tout sauf le slash et le point :
RewriteRule ^/([^/\.]+)/?$ page.php?page=$1 [L]

Vi / vim : comment remplacer des espaces par des espaces insécables ( )

Tout est dans le titre.

J’ai souvent ce problème : je fais copier coller de code dans un article WordPress que je veux publier, je mets le code entre <code></code> mais le problème, c’est que les espaces de début sont ignorés et l’indentation est perdue.

Voici donc l’astuce, sous vi, pour remplacer tous les espaces uniquement au début de la ligne par &nbsp;.

C’est à dire que :

     extend: 'Ext.panel.Panel',

devient :


extend: 'Ext.panel.Panel',

Ce que je ne veux pas bien évidemment.

J’ai posé la question ici : vim-regexp-help-change-spaces-to-nbsp.

Et je vous laisse y lire les réponses, mais la solution que j’ai retenue :


:%s/^ \+/\=repeat("&nbsp;",strlen(submatch(0)))

Site des vimgolfers : http://vimgolf.com/.

Firefox : javascript et bookmarklets

On peut éxecuter du javascript dans Firefox directement dans la ligne de l’adresse Internet.

Attendez, c’est génial, je le redis, vous n’avez pas compris :

Savez vous qu’on peut éxecuter du javascript dans Firefox directement dans la ligne de l’adresse Internet ?

En pratique ça donne quoi ?

J’en ai marre de taper systématiquement mon identifiant et mon mot de passe pour me connecter à un intranet.
J’ai un bouton qui est un raccourci classique :

Firefox - javascript et bookmarklets

Et au lieu d’un raccourci « simple » genre http://translate.google.com/ c’est un code JavaScript comme ça :
javascript:(function(){m='http://translate.google.com/translate?u='+encodeURIComponent(document.location)+'&langpair=en%7Cfr&hl=en&ie=UTF-8&oe=UTF-8';w=window.open(m,'addwindow','resizable=yes');setTimeout(function(){w.focus();},%20250);})();

Qu’est ce que ça fait : je peux être sur n’importe quelle page en anglais, je clique sur le bouton, et hop ! Il m’ouvre une autre fenêtre avec la page traduire via http://translate.google.com/. Magique !

Mais on peut faire encore plus pratique !

Par exemple, moi j’ai un raccourci pour me connecter sur un site personnel, mais ce dernier me demande toujours mon identifiant et mon mot de passe, qui sont systématiquement effacés, alors j’ai fait un second bouton dans lequel il y a du JavaScript qui remplit les champs automatiquement et simule le clic sur « valider ». Donc en pratique, je clique une fois, hop, la page s’affiche, je clique une seconde fois et je suis connecté. Je gagne un temps fou !

Et même chose pour les développeurs de paiement en ligne : vous en avez marre de remplir systématiquement les champs avec les numéros de cartes factices afin de tester, et de mettre une bonne date ? Hop il suffit de créer correctement un bon morceau de JavaScript et ça y est vous remplissez systématiquement TOUS les champs en un seul clic ! Gain de temps phénoménal.

Vous avez plein d’exemples ici :

http://mozillalinks.org/resources/bookmarklets-collection/

Pour la note, cela fonctionne aussi sur Chrome.

En espérant que cela serve à la communauté !

Funciton : un langage lisible et marrant

Voici, pour ceux qui ne le connaissent pas, un langage très récent (2011), fonctionnel, et lisible, mais entièrement nouveau, j’ai nommé (roulement de tambours) : « Funciton »

Voici un exemple de programme qui fonctionne, essayez de deviner ce qu’il fait :

(Note : ce n’est pas un dessin, c’est bien du texte, vous pouvez le sélectionner et le copier coller, ça fonctionne, essayez !) :


            ╓───╖
         ┌──╢ + ╟──┐
         │  ╙───╜  │
    ┌────┴────┬────┴────┐
    │  ┌┐     │      ┌┐ │
  ┌─┴──┤├──whoops!─┬─┤├─┴─┐
  │    └┘     │    │ └┘   │  ╔════════════════════════════╗
  │    ┌──────┴───┬┘      │  ║  addition — WITH           ║
  │   ┌┴┐        ┌┴┐      │  ║  THREE PROBLEMS (read on)  ║
  │   └┬┘        └┬┘      │  ╟────────────────────────────╢
  │ ┌──┴─╖  ┌───╖ │       │  ║  +(a, b) = b               ║
  │ │ << ╟──┤ + ╟─┘       │  ║      ? +(a^b, (a&b) << 1)  ║   │ ╘══╤═╝  ╘═╤═╝         │  ║      : a                   ║   │  ╔═╧═╗    │           │  ╚════════════════════════════╝   │  ║ 1 ║    │           │   │  ╚═══╝  ┌─┴─╖         │   └─────────┤ ? ╟─────────┘             ╘═╤═╝               │

Vous pouvez avoir toutes les informations sur Wikipedia ici :

http://esolangs.org/wiki/Funciton

Coloration syntaxique : vim, HTML et Smarty la solution

J’avais un problème que vous avez peut-être rencontré : la couleur des fichiers HTML quand il y a du Smarty, ça ne fonctionne pas parfois.

Alors j’ai récupéré le truc qui met les bonnes couleurs ici :

www.vim.org/scripts/script.php?script_id=1798

Mais seul problème : ça ne fonctionne qu’avec les fichier *.TPL
Donc j’ai fait une demande sur stackoverflow : comment ouvrir un fichier HTML, et vérifier s’il y a dedans "{* *}" et si c’est le cas, appliquer la couleur Smarty.

Répondu ici :
vim-how-to-apply-a-new-syntax-highlighting-smarty-instead-of-html-depending

Et maintenant, j’ai enfin tous les fichiers HTML qui s’affichent correctement. Je vous conseille vivement d’en faire autant, franchement ça m’aide bien que les "{* *}" soient enfin des commentaires et que les {foreach ...} soient bien colorisés.

Trop pratique !

Smarty : dump de variable : écrire une fonction plugin

Vous avez sûrement déjà été confronté au fait de vouloir afficher le contenu d’une variable Smarty.
J’ai décrit la version courte ici.

Maintenant, il peut arriver que l’affichage ne corresponde pas à ce que vous vouliez notamment parce que le print_r() et autre var_dump() affichent des retour chariot.

J’ai donc crée ma fonction plugin, qui fait cela :


  /**
   * Affiche le contenu d'une variable.
   * Utilisation : {dump var=$variable_smarty}
   *
   * @param array $params Tableau de parametres
   * @param object $smarty objet Smarty
   * @return string Le dump
   */
  public function smarty_dump($params,$smarty)
  {
    // Récupération des paramètres
    if (!isset($params['var'])) {
      throw new Exception(
        "dump : paramètre 'var' obligatoire");
    }
    return
      '<pre>'.
      str_replace(
        "\n", "<br />",
        str_replace(
          "\r", "",
          var_export($params['var'],true)
        )
      ).
      '</pre>';
  }

Ensuite, je déclare le plugin à Smarty :

$smarty->registerPlugin('function','dump',
  array($this,'smarty_dump'));

Et dans mon template, je l’appelle ainsi :


<table>
{foreach from=$tab_devis item=a}
  <tr>
    <td>
      {dump var=$a}
    </td>
  </tr>
{/foreach}
</table>

Et l’affichage devient parfait : il est à l’intérieur d’une balise <pre></pre>, avec retour à la ligne <br /> comme il faut.

En espérant que cela serve à des utilisateurs

Php, http et https : comment rester sur le même protocole ?

Bonjour,

Voici une petite astuce pour les développeurs de sites Internet.
Supposons que la page que vous êtes en train de développer soit du genre http://monsite.com/mapage.php.
Dans cette page, vous avez plusieurs liens/images vers le même site, mais seule l’adresse change un peu, par exemple http://autre.monsite.com/image1.png
Imaginez que quelques temps après, vous deviez changer de protocole et passer en mode sécurisé.
Vous devez changer aussi tous les autres liens, donc :

http://autre.monsite.com/image1.png

devient :

https://autre.monsite.com/image1.png

Eh bien voici l’astuce qui peut vous servir : vous pouvez demander au navigateur de rester sur le même type de protocole avec seulement deux slashes avant le nom du site. Notre exemple :

http://autre.monsite.com/image1.png

devient :

//autre.monsite.com/image1.png

(oui oui ça fonctionne et même très bien) !

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');
    }); 

vim : mettre en surbrillance les espaces inutiles en fin de code

Vous en avez marre des espaces en fin de code qui ne servent à rien ?
Vous voulez vous conformer à beaucoup de pratiques classiques (Apache, horde, etc.) ?

Voici le petit truc qu’il vous manque, à ajouter dans votre fichier vim :

" Ce code mettra en surbrillance rouge vif
" tous les espaces inutiles après la fin de code :
highlight WhitespaceEOL ctermbg=red guibg=red
match WhitespaceEOL /\s\+$/

Ce code de configuration vim va mettre en rouge tous les espaces inutiles en fin de code.

Fabuleux non ? 😉

Merci à ce site.