Publié le 22 Mai 2015

L'installation de R sur Max OS X est assez aisée avec homebrew. Il y a cependant un écueil car R n'est pas disponible par défaut. Il faut d'abord ajouter un nouveau "repo" à homebrew:

brew tap home-brew/science

Penser à mettre à jour les taps homebrew avant de commencer:

brew update

Ensuite il faut installer gcc si vous ne l'avez pas encore:

brew install gcc

ou éventuellement 

brew upgrade gcc

pour être sûr d'avoir la dernière version de gcc (gcc 5 qui inclut gfortran).

Enfin on peut installer R:

brew install R

Et voilà c'est tout.

Voir les commentaires

Rédigé par Bliz

Publié dans #R

Publié le 18 Mai 2015

La lecture d'un fichier est nettement plus aisée en Scala qu'en Java.

En effet en scala le code tient en une seule ligne (ou presque):

import scala.io.Source

Source.fromFile("mon/fichier.txt").getLines

 

 

Voir les commentaires

Rédigé par Bliz

Publié dans #Scala

Publié le 11 Mai 2015

Par défaut 127.0.0.1 représente l'adresse locale (ou loopback). C'est à dire que rien est envoyé sur le réseau mais redirigé directement vers l'hôte local.

Il est intéressant d'avoir plusieurs adresses locales: 127.0.0.2, 127.0.0.3, ... afin de pouvoir faire tourner plusieurs instances d'une même application.

Pour ajouter une adresse locale cela se fait à l'aide de ifconfig et de la commande suivante:

sudo ifconfig lo0 alias 127.0.0.2 up

Voir les commentaires

Rédigé par Bliz

Publié dans #Linux

Publié le 8 Mai 2015

Jusqu'à présent j'ai toujours générer les PDF côté serveur mais je viens de découvrir une librairie javascript qui permet de le faire directement dans le navigateur.

Il s'agit de jsPDF. Cette librairie est assez facile d'utilisation il suffit de voir les examples disponibles.

Il y a une fonctionnalité qui m'a l'air particulièrement prometteuse: la possibilité de générer un pdf directement à partir du HTML.

J'avais placé de grands espoirs dans cette fonctionnalité en pensant pouvoir générer le HTML à partir d'un template angular directement en javascript sans l'attacher au DOM mais ce fut malheureusement un échec à cause des CSS non pris en charge.

Pour être honnête les CSS sont plus ou moins gérer si le HTML est un élément du DOM (même masqué).

En fait je trouve cette librairie malgré tout sympathique car la génération du PDF est assez rapide et permet de décharger le serveur.

Je vais continuer à suivre son évolution d'un oeil, surtout concernant la prise en charge des CSS.

Voir les commentaires

Rédigé par Bliz

Publié dans #Javascript

Publié le 7 Mai 2015

Maintenant qu'on sait comment télécharger un template angular il va falloir le traiter ou le compiler. C'est à dire remplacer toutes les doubles accolades {{}} par les valeurs correspondantes.

Cela se fait en 2 étapes:

  1. La compilation qui va produite une fonction qui pourra être utilisée pour générer un element HTML en lui passant un contexte ou scope.
  2. La liaison où on utilise la fonction précédente pour lier un élément HTML à un scope

Ce qui donne:

// html est une string contenant un template html
var bind = $compile(angular.element(html));
var element = bind($scope);

ou en une seule ligne:

var element = $compile(angular.element(html))($scope);

Si au lieu d'un élément HTML on a besoin d'une string on peut utiliser $interpolate au lieu de $compile.

 

Voir les commentaires

Rédigé par Bliz

Publié dans #angular

Publié le 7 Mai 2015

Un template angular n'est rien de plus qu'un fichier html.

On peut donc le télécharge facilement à l'aide du service $http.

$http.get('mon/template.html', {cache: $templateCache});

L'astuce consiste à bien préciser de cacher le template avec $templateCache de sorte que le template soit dispo dans le cache et qu'on évite des téléchargement superflus.

 

Voir les commentaires

Rédigé par Bliz

Publié dans #angular

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