Publié le 31 Mars 2015

Dans un message de log, si vous essayer d'afficher un BSONDocument en utilisant la méthode toString voilà ce qu'on obtient:

BSONDocument(<non-empty>)

A part vérifier que le document n'est pas vide, il n'y a pas vraiment d'information à en tirer.

Heureusement il est facile d'afficher tout le contenu d'un document en utilisant la méthode statique 'pretty':

BSONDocument.pretty(monDoc);

Voir les commentaires

Rédigé par Bliz

Publié dans #mongo

Publié le 26 Mars 2015

Pour effacer l'écran du terminal il existe la commande

> clean

Sous Mac OS X il existe un raccourci pour ça:

Ctrl+l

Voir les commentaires

Rédigé par Bliz

Publié dans #mac

Publié le 19 Mars 2015

flatten est une opération qui permet de transformer un tableau à deux dimensions en tableau à une dimension. Avec un exemple tout devient plus clair - partons du tableau suivant:

var tab = [[1,2,3], [4,5], [6,7,8], [9]];

L'opération flatten consiste à transformer ce tableau de tableaux en un tableau simple:

[1,2,3,4,5,6,7,8,9]

Il n'y a pas d'opération flatten directement disponible en javascript mais on peut utiliser la méthode concat pour y parvenir:

var flatTab = tab.concat.apply([], tab);

Ici on applique concat sur un tableau vide dans lequel on concatène tous les entrées de tab.

Tout comme flatten cela marche aussi sur un tableau simple:

var flatTab = flatTab.concat.apply([], flatTab);

Dans ce cas le tableau reste le même mais cela permet d'appliquer flatten sans vérifier qu'il s'agisse d'un tableau à une ou deux dimensions. Dans les 2 cas on récupère un tableau simple.

Voir les commentaires

Rédigé par Bliz

Publié dans #Javascript

Publié le 16 Mars 2015

J'ai dû développé en PHP un petit module d'import de fichier csv. La solution que j'ai utilisée se base sur le LOAD DATA INFILE de MySQL.

Un des besoins était de pouvoir utiliser un autre séparateur de champ que la virgule.

J'ai donc écrit une petite fonction qui permet de détecter le séparateur utilisé dans la ligne d'en-tête qui contient les noms des champs présents dans le fichier.

function separator($fields) {
    preg_match_all(
       '/(\w[\p{Pc}\w]*)+\s*([\p{P}\p{S}]+)\s*\w/',     
       $fields, 
       $matches, 
       PREG_SET_ORDER);
    return $matches[0][2];
}

La solution utilise une expression régulière pour détecter les caractères de ponctuation (\p{P}) et symboles (\p{S}) présent après le premier nom de champ. Il devrait donc être assez facile de l'utiliser dans d'autres langages de programmation.

Note: Le nom du premier champ peut contenir des _ (\p{Pc}).

Ensuite il suffit de récupérer les caractères utilisés dans le deuxième groupe (2ème parenthèse).

(La première parenthèse étant le nom du premier champ).

Voir les commentaires

Rédigé par Bliz

Publié dans #Php

Publié le 13 Mars 2015

En javascript la résolution de l'objet 'this' peut vite devenir compliquer. Heureusement il est possible d'exécuter une fonction en précisant explicitement sur quel objet la fonction s'applique.

 

Au lieu d'appeler la fonction directement il faut utiliser la méthode call() disponible sur toute fonction. C'est à l'air complique mais c'est en fait assez simple:

Au lieu d'appeler:

maFonction(arg1, arg2);

il suffit d'exécuter:

// ref devient l'object référencer par this à l'intérieur de maFonction()
maFonction.call(ref, arg1, arg2);

 

 

Voir les commentaires

Rédigé par Bliz

Publié dans #Javascript

Publié le 6 Mars 2015

Pour compiler uniquement un module (ou une liste de modules) il faut utiliser l'option -pl (project list):

mvn test -pl web

L'option -am (also make) peut aussi être intéressante car elle permet de compiler les modules dont dépendent ceux spécifiés avec -pl:

mvn test -pl web -am

Voir les commentaires

Rédigé par Bliz

Publié dans #Maven

Publié le 6 Mars 2015

J'ai dernièrement rencontré cette erreur en testant une appli assez conséquente.

Comme l'erreur est une OutOfMemoryError j'ai naturellement penser à augmenter la mémoire allouée à la JVM mais cela est resté sans effet.

En fait la mémoire n'est pas le problème dans ce cas là. Il faut bien lire le message remonter par cette erreur:

unable to create new native thread

Cela signifie que la JVM ne peut créer de nouveau thread car la limite de l'OS est atteinte.

Souvent cela indique une mauvaise gestion des threads.

Ce qui était malheureusement le cas ici: beaucoup de tests en parallèles bloquait des thread sur des requêtes HTTP.

Voir les commentaires

Rédigé par Bliz

Publié dans #Java

Publié le 4 Mars 2015

Au niveau des modifs de l'historique je trouve que Mercurial n'est pas aussi souple que git.

Mais bon on peut quand même supprimer un commit à l'aide de l'extension mq.

Pour activer l'extension mq il faut ajouter la ligne suivante dans le fichier ~/.hgrc:

[extensions]
mq=

Ensuite on peut supprimer n'import quel commit avec la commande hg strip (l'option -r permet d'indiquer la révision - numéro de commit -  à suprimer):

hg strip -r 12345

Voir les commentaires

Rédigé par Bliz

Publié dans #Version control

Publié le 25 Février 2015

Si vous utilisez la ligne de commande assez fréquemment vous savez surement que la commande cd (change directory) permet de retourner dans le répertoire précédent avec :

cd -

Très pratique mais on ne peut retourner que dans le repertoire précédent il n'y a pas d'historique des répertoires visités.

Heureusement il y a une autre commande qui permet de changer de repertoire tout en maintenant un historique de navigation. Il s'agit de pushd

pushd ~
pushd ~/Downloads
pushd ~/var/log

Ensuite pour remonter dans l'historique on utilise popd

popd

pushd ajoute les répertoires dans une pile et popd les dépile.

Voir les commentaires

Rédigé par Bliz

Publié dans #Linux

Publié le 20 Février 2015

Si vous placez un bouton dans un formulaire HTML le comportement par défaut est que lorsqu'on clique sur le bouton le formulaire est envoyé.

<form>
   <button>Cliquer ici pour envoyer le formulaire</button>
</form>

Un clic sur le bouton entraine l'envoi du formulaire. C'est presque équivalent à :

<input type="submit" value="Cliquer ici pour envoyer le formulaire">

Maintenant on peut avoir besoin d'un bouton qui se trouve à l'intérieur d'un formulaire mais qui ne doit pas envoyer le formulaire (il peut déclencher un action en javascript par exemple).

Il suffit dans ce cas d'ajouter un attribut type="button":

<form>
   <button type="button">Cliquer ici sans rien envoyer</button>
</form>

Voir les commentaires

Rédigé par Bliz