" Mens sana in PHP sano ! "

Tri de tableau multi-dimension en javascript

Bonjour à tous,

 Hier j'ai eu le problème suivant en javascript. Comment trier efficacement un tableau multi-dimension en javascript. Et bien aujourd'hui j'ai trouvé la solution ! La fonction sort() en javascript permet de passer une function personnalisé en paramètre ce qui nous permet de valider de façon personnalisée le tableau. Voici un exemple simple où l'on tri par le nickname de la personne.

var objectArray = [ { userId: 1, nickname: 'Marie' }, { userId: 1, nickname: 'Sylvain' }, { userId: 1, nickname: 'Michel' }, { userId: 1, nickname: 'Victo', }, { userId: 1, nickname: 'Michael' }, { userId: 1, nickname: 'Abdel' }, { userId: 1, nickname: 'John' }, { userId: 1, nickname: 'Sylvio' } ];

function sortByNickname( a, b ) {

   if( a.nickname === b.nickname )
   {
       return 0
   }
   return ( a.nickname < b.nickname ) ? -1 : 1;

}

Cette fonction personnalisée recoit deux elements du tableau en paramètre et nous les comparons. S'il sont égaux nous retournons la valeur 0 ce qui veux dire que nous ne déplaçons aucun des paramètres dans le tableau. Si a.nickname est plus petit que b.nickname nous retournons -1 ce qui signifie que a.nickname doit être placé plus haut dans le tableau que b.nickname. Sinon on retourne 1 ce qui signifie que b.nickname doit être placé plus haut que a.nickname dans le tableau.

Et voilà c'est tout !

S'agit juste de le savoir !

Deux profiles avec Firefox

En tant que développeur web, il m'est souvent utile, pour tester des applications web, d'avoir deux instances de navigateurs web ouverts avec deux profiles différent. Notamment pour les application utilisant ajax. Voici donc comment faire sous linux:

  1. Créer un nouveau profile à l'aide de la commande suivante: firefox -P -no-remote
  2. Démarrer firefox avec la commande suivante: firefox -P NonDuProfil -no-remote

Pour plus de facilité, pourquoi ne pas se faire un raccourci sur le bureau avec cette commande ?!

Bon débogage !

Sauver un développeur web

Et bien, voici une initiative qui ne laissera pas de glace les développeurs web ! Save the developers ont lancé une initiative afin que les internautes mettent à jour leur version de navigateur. Fini Internet Explorer 6. Enfin ! Buts de l'opération:
  • Assister les usagers dans la mise à niveau de leur navigateur désuet;
  • Procurer une expérience agréable de navigation;
  • Réduire le stress des développeurs web;
  • Accélérer le retrait des navigateurs désuets.
À notez que vous pouvez inclure ce fichier javascript sur votre site pour notifier les visiteurs que leur navigateur est désuet.

http://www.savethedevelopers.org/say.no.to.ie.6.js

Une démo est disponible sur le site officiel.

BRAVO aux instigateurs de ce projet !

Un seul OS pour les guider tous !

Vous faites du développement web ? Vous trouvez que ça commence à être compliqué de tester vos applications et site web versus la panoplie de navigateur ? Peut-être avez-vous installé vmware avec une machine virtuelle par version de navigateur ? Pourquoi ne pas tout installer les versions de navigateur dans une seule machine virtuelle ?! Parce qu'on peut pas ? Faux !

J'ai trouvé une façon d'installer de façon autonome les autres versions de navigateurs (IE3, IE4.01, IE5.01, IE5.5, IE6, IE7). Bien sûr il y a Evolt browsers archive que peut-être certain d'entre vous connaissent déjà. Mais c'est long installer tout ça un après l'autre non ? Alors, j'ai découvert un installateur automatique qui les installe tous en un clique. Vous pouvez aussi sélectionner uniquement ceux que vous désirez. Voici le lien pour télécharger cet installateur.

Tredosoft Multiple IE Installer
http://tredosoft.com/files/multi-ie/multiple-ie-setup.exe


Il marche parfaitement sous Windows XP.

Bonne période de tests !


P.S. Malheureusement ça ne rend pas standard les navigateurs... IE ça reste IE :)

Un peu de "Salts" avec vos mots de passe ?

Un nouveau tutoriel sur les mots de passe vient de sortir sur www.apprendre-php.com. Il traite de comment sécuriser les mots de passe adéquatement. Tout le monde connait et utilise bien sur le hashshage à l'aide de md5 ou sha1. Ce qui a piqué m'a curiosité dans ce tutoriel ce sont les salts.

Qu'est ce que les salts ? Les salts ne sont en fait que des sortes de clés, gardé secrètes du côté de votre application PHP et qui combinés à vos mots de passe renforce la sécurité de ceux ci. Mais pourquoi utiliser les salts alors que les hashs ne sont pas réversibles ? À cause des Tables Arc-en-ciel. Comment ça les table arc-en-ciel me direz-vous ? Vous devez pensez que je débloque complètement là non ?

Ces tables sont en fait des dictionnaires qui nous permettent rapidement de savoir un mot de passe à partir d'un hash. Vous comprennez donc qu'il s'agit d'un jeu d'enfant d'essayer de retrouver le bon mot de passe à partir d'un hash. Voyons donc un exemple:

Créons les salts dans votre fichier de configuration.


// config.inc.php

$salt1 = 'Windor!';

$salt2 = 'NosCompliments!';

Comment les utilisons nous:


// index.php

// On inclut notre fichier de configuration.
require_once('conf/config.inc.php');

// On obtient le hash dans la base de données.
$hashDb = getHashDb();

// On construit le hash du mot de passe fournit par l'utilisateur.
$hashMdp = md5 ( $salt1 . $mdp . $salt2 );


// On compare les hashs.
if( $hashMdp === $hashDb )
{
    echo 'Mot de passe valide !';
}
else
{
    echo 'Mot de passe invalide !';
}

Voilà ! Aussi simple que ça !

Rien ne vous empêche d'ajouter plus de salts ou de combiner plusieurs méthodes de hash dans votre vérification.

par exemple:

$monHash = sha1( md5( $salts1 ) . sha1( $mdp ) . md5( md5( $salts2 ) . md5( $salts3) ) );

dojox.encoding.digests.MD5 ou MD5 avec Dojo

J'ai enfin trouvé comment me retourner un hash MD5 (Message Digest 5) avec Dojo. Dans la version 0.9, dojo.crypto existait. Maintenant, en version 1.0, il faut utiliser dojox.encoding.digests.MD5. En effet, crypto a été fusionné avec encoding et le tout est encore en développement. Comme il n'y a pas beaucoup de documentation et que je veux m'en souvenir, voici comment faire:

@@ // On inclut ce qu'il faut
dojo.require( 'dojox.encoding.digests.MD5' );

// On appelle la fonction MD5 avec le bon type de retour dans notre cas Hex.
// En regardant dans le code source j'ai pu voir qu'il y avait le type Base64, String, Raw et Hex.
// Évidemment il a fallu que je les passe tous pour savoir que c'est Hex que j'avais de besoin.
var myHash = dojox.encoding.digests.MD5( 'Ma chaine a transformer', dojox.encoding.digests.outputTypes.Hex );
@@

Voilà ! Bon codage !