Publié le 29 Juin 2015

En scala il est possible de saisir directement du code XML (XML literal). Ce code est en fait une séquence de nodes (NodeSeq), contrairement à d'autres langages comme Java où il faut saisir une chaîne de caractères qu'il faut ensuite parser.

Par exemple le code suivant est valide (pour l'instant*):

val xml = <root><node>value</node></root>

Noter qu'il n'y a pas de " autour du code xml.

Maintenant imaginons qu'au lieu de value on veuille utiliser une variable (ou appeler une fonction). Dans ce cas il faut utiliser des {}:

val myValue = "blablabla"
val xml = <root><node>{myValue}</node></root>

* Je dis pour l'instant car dans une future version de scala les XML literals seront remplacés par les string interpolations, ce qui donnera quelque chose comme ceci:

val xml = xml"<root><node>$myValue</node></root>"

Voir les commentaires

Rédigé par Bliz

Publié dans #Scala

Repost 0

Publié le 22 Juin 2015

En fait rien de particulier sur ce cas là si ce n'est la façon de déstructurer les arguments de la fonction de mapping. Ça à l'air compliqué mais pas tant que ça en fait. Prenons un exemple avec une liste de paires:

val paires = List("Jurassic Park" -> 1993, "Star Wars" -> 1977, "Shaun the sheep" -> 2015)

Voilà notre conteneur. Maintenant effectuons un mapping dessus:

val films = paires.map( paire => s"${paire._2} sorti en ${paire._1}")

Rien de spécial ici, ça fonctionne mais l'utilisation des _1 et _2 pour accéder aux membres de notre paire n'est pas très lisible.

J'aurai préférai écrire quelque chose comme ceci:

val films = paires.map( (titre, année) => s"$titre sorti en $annee")

Voilà qui est plus clair mais cela ne compile pas. En fait il faut utiliser un pattern matching pour déstructurer la paire:

val films = paires.map(film => film match {
   case (titre, annee) -> s"$titre sort en $annee"
})

C'est pas mal et ça fonctionne mais le pattern matching est un peu lourd.

Heureusement on peut supprimer le "match" et ne garder que le "case":

val films = paires.map { case (titre, annee) => s"$titre sorti en $annee" }

A part le "case" en plus on est assez proche de la forme déstructurée mais voilà il faut bien penser à utiliser le "case" sinon ça ne compile pas.

Voir les commentaires

Rédigé par Bliz

Publié dans #Scala

Repost 0

Publié le 18 Juin 2015

Si vous avez installé une clé 3G Huawei sur votre Mac, Brew n'a sans doute pas apprécié et affiche sans doute l'erreur suivante:

$ brew doctor
Warning: You have an outdated version of /usr/bin/install_name_tool installed.
This will cause binary package installations to fail.
This can happen if you install osx-gcc-installer or RailsInstaller.
To restore it, you must reinstall OS X or restore the binary from
the OS packages.

Et oui ce n'est pas vraiment cool. Reinstaller entièrement Mac OS je préfèrerai éviter et effectivement il y a bien un moyen de restaurer ce fichier mais il faut tout de même télécharger OS X depuis l'AppStore.

Une fois les 5,64G téléchargés, quitter l'installateur. Le .dmg, quant à lui, est télécharger directement dans /Applications.

Pour résoudre le problèmes il faut refaire une "Essentials installation" en lançant les commandes suivantes depuis un terminal:

$ open /Applications/Install\ OS\ X\ Yosemite.app/Contents/SharedSupport/InstallESD.dmg
$ open /Volumes/OS\ X\ Install\ ESD/Packages/Essentials.pkg

Après environ 20 minutes, l'installation se termine et brew semble plus joyeux.

 

Voir les commentaires

Rédigé par Bliz

Publié dans #mac

Repost 0

Publié le 12 Juin 2015

Si vous essayez de placer un datepicker à l'intérieur d'une popup (modal) vous verrez que ce dernier apparaît derrière la popup et n'est donc pas utilisable.

Cela vient du fait que la popup bootstrap a un z-index de 1050 et donc le date picker est masqué.

La correction se fait directement en css en spécifiant un z-index supérieur à 1050 pour le datepicker.

.datepicker {
   z-index: 1150 !important;
}

On prend un peu de marge en ne spécifiant pas directement 1051 au cas où d'autres éléments viendrait se glisser entre ces 2 z-index.

Voir les commentaires

Rédigé par Bliz

Publié dans #CSS

Repost 0