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

Repost 0

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

Repost 0

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

Repost 0

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

Repost 0

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

Repost 0

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

Repost 0

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

Repost 0

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

Repost 0