Breizhcamp 201725/04/2017

Voici un petit retour sur 2 jours passés au Breizhcamp 2017. Cette année le thème était la série Breaking Bad. Et une chose est sûre, les organisateurs ainsi que les sponsors ont vraiment joué le jeu à fond :

AfficheBzc2017

Plutôt que de résumer les conférences auxquelles j'ai assistées, j'ai décidé de ne présenter qu'une seule idée de chaque session. Ca permettra une lecture rapide et un équilibre de feedback entre toutes les conférences :

Les problèmes que l’on rencontre en microservice : configuration, authentification et autre joyeusetés - Quentin Adam

Pour l'authentification de vos services mangez des Macaroons c'est bien meilleur que des cookies

Réinstaller automatiquement des applications Android via APK sous Linux25/02/2017

J'ai été confronté à une problématique : réinstaller une liste d'applications Android à partir d'APKs en contournant les problématiques de conflits de version, downgrade etc.

Les étapes, pour chaque application que l'on souhaite réinstaller, sont successivement :

  1. Désinstallation via AAPT
  2. Installation à partir de l'APK via ADB

Le tout nécessite :

  • Linux
  • Android Asset Packaging Tool (aapt)
  • Android Device Bridge (adb)
  • Un répertoire qui contient toutes les APKs

La contrainte principale :

  • Pour la désintallation, il est nécessaire de connaître le nom de l'application installée dans le device. Pour cela, on va utiliser le "package name" du manifest AndroidManifest.xml. Il faut donc que dans l'APK à réinstaller, le nom soit identique, sinon le device contiendra toujours l'ancienne version de l'application

Présentation avec Reveal.js en mode container Docker12/05/2016

Dans le cadre d'une présentation de Docker, j'ai décidé d'utiliser Reveal.js.

Pour ceux qui ne connaissent pas reveal.js est un framework Javascript qui permet de transformer du contenu texte fourni par exemple en Markdown en HTML.

Il permet de customiser le contenu de la présentation, les backgrounds, animations, etc.

Pour fonctionner, il y a 2 modes :

  1. Le mode "basic" avec du contenu directement intégré dans une page HTML qui s'occupe également de charger le javascript. Cette page affichée depuis un navigateur charge la librairie reveal qui transforme des balises sections en contenu formaté via HTML
  2. Le mode "externalisé" où l'on peut charger un fichier Markdown externe par exemple. C'est bien pratique, cela permet de découpler du contenu structuré du rendu final (ce qui est souvent un effet recherché et permet de ne pas enfermer le discours utile dans la techno de présentation - à bon PowerPointeur, salut !)

J'ai donc choisi de privilégier ce second mode. Petite problématique : le fonctionnement de reveal impose que les fichiers "externes" soit exposé telle une ressource web. Cela nécessite donc de la présenter sur un serveur Web.

Pas de soucis, reveal propose de s'installer via l'outillage Node qui va bien : un npm install et un npm start et nous disposons d'un serveur qui expose toutes les ressources du répertoire courant (statiques de reveal y compris).

Oui mais du coup, à chaque fois que je vais vouloir exécuter ma présentation reveal sur un nouvel environnement, je vais devoir télécharger toutes les dépendances JS, réaliser les tâches automatique de configuration/installation: ce qui va me prendre du temps, beaucoup de temps...

La solution... Docker !

Sortie lisible d'une stacktrace d'exception en Java25/06/2015

Java 8 apporte son lot de nouveautés notamment les Stream. Le but n'étant pas de fournir un cours ou une analyse sur les Stream, il en existe de très bons tel que celui-ci sur le blog d'Ippon, mais de fournir des astuces sur des problèmes récurrents dans le développement d'application Java.

Afficher une Stack d'exception sous forme lisible :

try{

...

} catch (MonException ex) {
    List listStackLine = Arrays.asList(e.getStackTrace());
    String stack = listStackLine.stream().map(StackTraceElement::toString)
                    .collect(Collectors.joining("\n"));
    fail("Exception reçue : "+e.getMessage()+" avec la stack "+stack);
}

Explications :

  1. Ligne 6 : récupération du tableau de String dans l'exception et transformation en String
  2. Ligne 7 : utilisation d'une stream puis application d'une méthode de transformation pour ne garder que le résultat de la méthode "toString" de la classe StackTraceElement et utilisation d'une méthode de collecte qui joint les éléments de la liste par un retour chariot.

Renommer en masse des fichiers (Linux)03/04/2015

Dans les projets auxquels je participe, j'ai souvent besoin de renommer des fichiers en masse; en remplaçant une sous-chaine fixe du nom de fichier par une autre et ce sur plusieurs fichiers d'un répertoire à la fois.

Voici un script shell qui me permet d'effectuer ces opérations:

#!/bin/sh
# RSLOF : Replace Substring in List of FileNames
#
# @author : @RGuillome
# @args :
#  - 1 : substring to replace
#   - 2 : replace by...

if [ $# -le 2 ];
 then echo "Usage : rslof [SUBSTRING_TO_REPLACE] [SUBSTRING_REPLACEMENT]"
fi

substring_to_replace=$1
substring_replacement=$2


echo "Replacement of $1 by $2"

for i in `ls *$substring_to_replace*`
do
 new_name=$(echo "${i/$substring_to_replace/$substring_replacement}")
 echo "$i name will be replaced by $new_name"
 mv $i $new_name
done