" 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 !

Améliorer les performances de rsync over ssh

Après plus de trois nuits complètes à restaurer mes fichiers de mon serveur de backup vers mon laptop, j'ai enfin décidé de regardé pourquoi c'est si long. Le maximum taux de transfert que j'ai obtenu est 1.5 MB/s. Ce qui fait pas mal long pour 160 Go de données. En googlant un peu, j'ai découvert que les pauvres performances n'était pas reliées ni à mon routeur, ni à ma configuration réseau, ni à mes vieilles cartes réseaux, ni même à rsync ( Car je l'utilise pour mes backup, c'est le best ! ) mais bien à SSH. J'utilise rsync via ssh pour mes backup. SSH, puisqu'il est crypté, produit un surplus de travail au processeur pendant le transfert et cela réduit considérablement la vitesse de transfert. Donc, même chose pour scp. Doh !



Donc, comment on pourrait bien améliorer un peu les performances !? Et bien j'ai lu que l'algorythme d'encryption Blowfish était plus rapide et d'une sécurité comparable. Enfin, je copie sur mon réseau local alors on l'essaye !

Voici la commande utilisée:

rsync -avz --progress -e 'ssh -c blowfish' repertoire_de_bak/* username@IP:/repertoire_de_restaure

Bingo.. en un instant, je viens de presque de doubler ma performance... Je suis passé de 1.5 MB/s au mieux à 2.6 MB/s. Je vais peut être sauver une nuit de restaure :)

J'aimerais donc trouver une alternative encore plus rapide. Que peut-on faire ?

Options envisageables

  • Copie via NFS
  • Rsync over NFS
  • FTP
  • Rsync over FTP ( Ca se peut ça ? Ça serait bien cool ! )
  • rsync server

Vous avez des idées ? Vous avez fait des tests ? Écrivez-moi !

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 !

codeFest PHP Québec 2.1 : Optimiser & Tester les logiciels libres

Du 16 au 18 mai 2008 à Montréal et Sherbrooke se tiendra la version 2.1 du CodeFest de PHP Québec. Le sujet de cet édition portera sur les tests unitaires et l'optimisation du code. Vous êtes tous invité, débutants et experts, à prendre part à améliorer le logiciel qui vous intéresse. Voici les projets libres proposés:

Bon codage ! :)

Pont sans fil entre deux WRT54G

Bon, j'ai ressorti mon deuxième routeur sans fil des boules à mites. Depuis que je suis emménagé dans ma maison j'en avais pas eu de besoin et j'ai depuis changé le setup de base de mon réseau. La question était donc comment est-ce qu'on fait pour faire un pont sans fil entre deux routeurs WRT54G ?

D'abord, on ne peut pas le faire avec le firmware de base. Personnellement j'avais déjà installé DD-WRT sur le routeur qui va servir d'extension. Ensuite, il faut le configurer tel que mentionné ci bas, après l'avoir resetter. Mon premier routeur possède les informations suivantes:

Ip: 192.168.15.254
Masque: 255.255.255.0

DONC:

Onglet Setup => Basic setup

Connection type : Disable
Local IP : 192.168.15.253
Subnet mask 255.255.255.0
Gateway : 192.168.2.254
Local DNS : 192.168.15.3 // J'ai un serveur DNS sur le réseau local
Assign WAN Port to SWITCH : Cochée
DHCP Server : Desactivé

Onglet security => firewall

Désactiver le firewall

Onglet Wireless => basic Settings

Wireless mode : Client bridge
Wireless Network Name (SSID): Le meme que le premier routeur.
Wireless Channel : Le meme que le premier routeur.
Wireless SSID Boadcast : Disable

Onglet Wireless => Wireless Security

Security Mode : WEP ou WPA (chez moi en PreShared Key - Tkip)
Key, Encryption : Le même que le premier routeur.

Onglet Wireless => Advanced settings

Authentication type : Shared key

Setup => Advanced routing

Operating mode: routeur
Dynamic routing: both

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 !

LPI-3 pour février 2009

Selon Linux-Watch, la prochaine mouture de la certification professionnelle linux (LPIC-3) sortira vers février 2009. Cette version sera axée sur la sécurité linux à l'instar de CCSP (Cisco Certified Security Professional), mais incluera aussi les notions linux tel que la RHCE (Red Hat Certified Engineer).

L'avantage principal de la certification LPI est sa neutralité par rapport aux vendeurs tel que: RHCE (Red Hat) ou NCLE (Novell Certified Linux Engineer, Novell). Autrement dit, les notions apprises s'appliquent à toutes les distributions linux et non seulement à Red Hat, par exemple.

À noter que les examens peuvent être passés dans un centre Pearson Vue près de chez vous après avoir obtenu votre ID auprès de LPI.

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 :)

Acheter votre ordinateur avec LINUX

Je viens de mettre la main sur l'adresse d'un fournisseur de portables, ordinateurs de table et serveurs qui arrivent avec linux préinstallé. Plus de licence Windows à payer. Yes ! ;) En plus, les prix semblent pas mal intéressant.

http://system76.com/

VIM: Ouverture de fichier par SCP

Lorsque le temps presse, c'est à dire presque tout le temps, et que nous devons faire des modifications rapides à des fichiers de configuration ou du code qu'on vient de mettre en production; pourquoi ne pas faire confiance à notre ami VIM ?!

En effet VIM possède une capacité très intéressante ! Il permet de modifier directement un fichier à distance via SCP. La commande est la suivante. Par exemple vous voulez modifier le fichier des comptes d'usager sur votre serveur linux à la maison.

vim scp://nom_usager@server//chemin/vers/le/fichier/de/compte.txt

et le tour est joué !

Plus de raison de ne pas utilisé VIM pour vos modifications rapides !

Conférence PHP Québec 2008 - Jour #1

Et voilà ! Le jour "J" est enfin arrivé pour tout les organisateurs, bénévoles, et participants de la 6ième Conférence PHP Québec. Surement beaucoup de stress et de changements de dernière minute au programme. J'espère que vous êtes inscrit car sinon il est trop tard ! La conférence est sold-out ! Mais attendez il reste quelques billets pour les ateliers d'aujourd'hui ! Qu'attendez vous ? Courrez !

Au programme ajourd'hui:

Des ateliers pratiques en 3 tracks (PHP Au delà de la théorie, Technique Avancé, Accessibilité des données)

8h30 Inscription

9h00 SOAP tip, tricks and tools (Rob Richards)
Techniques de sécurité systémique sur le Web (Damien Seguy & Philippe Gamache)
Security/Optimisation Q&A (Ilia Alshanetsky & Chris Shiflett)

11h30 Dîner

12h30 Test driven object oriented programming - learning and understanding (Marcus Boerger & Sebastian Bergmann)
The symfony platform: Create your very own framework (Fabien Potencier)
Databases Information Center (Robert Bernier & Kitman Cheung & Kuassi Mensah & Zak Greant & Jay Pipes)

15h00 Pause

15h15 Explaining the complaints (Derick Rethans & Marcus Boerger)
Top 10 Scalability Mistakes (John Coggeshall)
Databases Q&A (Robert Bernier & Kitman Cheung & Kuassi Mensah & Zak Greant & Jay Pipes)

15h30 JobFair (Salon de l'emploi)

17h00 JobFair & Cocktail

19h00 Fin de la journée

Ouf !!! Tout un programme ! Domage que je n'y soit pas aujourd'hui !

J'arrive en soirée à Montréal et demain matin promis j'y suis !

Ciao !

"Cheers" Pré-Conférence: Changement de lieu

Avis important à tous,

Nous avons déjà reçu quelques réponses à notre souper / cheers pré-conférence PHP Québec 2008, merci à tous ceux qui ont répondus pour nous confirmer votre présence.

Par contre, nous ne pouvons avoir de réservation au Cosmos de Grande-Allée pour samedi 19 heures, il y a déjà trop de groupes et le gérant nous a avoué déjà être overbooké ;-)

Nous déplacons donc l'événement au ST-HUBERT DE LA GRANDE-ALLÉE, un peu plus loin sur la même route.

L'adresse exacte est le 693, Grande-Allée Est G1R 2K4; la réservation sera au nom de Sylvain Lévesque (PHP Québec) toujours à 19 heures.

Au plaisir de se voir samedi soir.

Plus d'informations: http://tinyurl.com/2s4hy3

"Cheers" Pré-Conférence

Bonjour à tous,

J'ai déjà mentionné dans un précédent billet (ici) l'arrivée prochaine de la Conférence PHP Québec 2008. Nous avons réservé une surprise à tous les gens de Québec !!!

En effet, samedi qui vient, le 8 mars 2008, nous organisons un "Cheers" pré-conférence. Pour l'occasion une quinzaine de personnes descendront de Montréal pour venir souper, prendre un verre, discuter et s'amuser au Restaurant Cosmos de la Grande-Allée. Le "Cheers" débutera vers 19h00 et se prolongera jusqu'à ce qu'il ne reste plus personne.

Vous ne vous demandez pas qui sera de la partie ? Et bien, la majorité seront des conférenciers provenant de plusieurs pays et quelques organisateur de la Conférence. Cette activitée est ouverte à tout le monde ! Surtout n'oubliez pas de confirmer votre présence à info@phpquebec.org afin qu'on puisse ajuster les réservations en conséquences.

NE MANQUEZ PAS CETTE CHANCE UNIQUE !

Au plaisir de vous y voir en grand nombre !

@+

Plus d'informations:

http://tinyurl.com/ywkqw8

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

Mise à jour de l'Annuaire des Services PHP au Québec

Bonjour,

L'association PHP Québec, dont la mission est de promouvoir l'utilisation du PHP au Québec au sein des entreprises, du gouvernement, des centres éducatifs et des professionnels, met à jour son Annuaire des Services PHP au Québec.

Une version papier de l'annuaire sera distribué gratuitement pendant les rencontres mensuelles de Québec et Montréal, aux visiteurs de la 6ième Conférence PHP Québec qui aura lieu les 12, 13 et 14 mars 2008 prochain, à Montréal, ainsi qu'à toutes autres activitées auxquelles PHP Québec participera.

L'annuaire se présente en 4 sections:

   * Les membres corporatifs 2007-2008;
   * Formation;
   * Hébergement;
   * Services conseils.

Si vous désirez que votre entreprise soit présente dans l'annuaire, veuillez nous contacter à annuaire@phpquebec.org avec les informations suivantes:

Nom de l'entreprise: Adresse: Ville: Téléphone: Fax: (facultatif) Courriel: Site web: Categorie: (Formation, Hébergement, Services conseils) Description: (max 300 caractères).

En plus de montrer leur soutient envers PHP Québec, les entreprises désireuse de devenir membre corporatif de PHP Québec auront la possibilité d'ajouter leur logo d'entreprise et seront affichés au début de l'annuaire. Vous DEVEZ nous faire parvenir votre fiche avant le 1er mars 2008. Passé ce délai, nous ne pourrons garantir votre présence dans l'annuaire pour des raisons techniques.

Remarque: Nous nous réservons le droit de ne pas ajouter votre fiche à l'annuaire si elle ne comporte pas suffisament d'informations de contact et/ou de description.

Merci !