public enum { java, logiciels libres,…}

public enum { java, logiciels libres,…}

Devoxx 2018 — 20 avril 2018

Devoxx 2018

L’édition 2018 de DEVOXX touche bientôt à sa fin. Pour ceux qui ne connaissent pas cette conférence, c’est LA conférence sur le développement en France. A titre personnel, je peux plus apprendre en trois jours à cette conférence qu’en formation.

img_20180419_155256624099247.jpg

Tout d’abord un grand merci aux organisateurs. Ils assurent réellement. Bon, pour l’année prochaine, n’hésitez à retenir ma conférence 😉

Si vous n’avez pas eu la chance d’assister aux trois jours, il faut savoir que vous pourrez voir les rediff sur la chaine youtube.

Les tendances

Voici les tendances que  j’ai retenu :

  • Spring, spring et encore spring
  • Du réactif en veux tu en voila
  • Du DDD sinon rien
  • Du devops

et le plus impressionnant pour moi était la conférence de JOSHUA BLOCH(!!!) sur Effective Java. Pas tant dans le contenu, car il reprenait peu ou prou celui du livre, mais de voir une personne de ce calibre (dans le monde JAVA, c’est une rock star) en France, c’est assez impressionnant.

Les keynotes ( dont celle sur le smart building) étaient dans l’ensemble très intéressantes. Les conférences étaient également d’un très bon niveau. J’ai pu découvrir par exemple l’avance que peut avoir l’Estonie sur l’IT ( voir le projet x-road )  par rapport à la France qui lance le projet french road.

Voici quelques conférences qui m’ont plu et interpelé :

Je ne vais pas trop les décrire ( voire pas du tout ), elles seront disponibles prochainement sur la chaine youtube .

Intégration et médiation avec Apache Camel — 10 avril 2018

Intégration et médiation avec Apache Camel

Depuis quelques jours, je teste Apache Camel pour la mise en œuvre  de médiations.

Apache-camel-logo

Apache Camel est un framework assez ancien. Il est similaire à Spring Intégration et permet l’ implémentation de patterns d’intégration.

Les patterns d’intégration

Qu’est-ce qu’un pattern d’intégration allez-vous me dire ? C’est une solution d’architecture ou plus simplement une recette de cuisine permettant d’avoir une solution toute prête à une problématique d’intégration donnée. L’ensemble de ces patterns est décrit sur ce site ( ne vous attardez pas sur le look des années 90 … ).

Exemple :

PublishSubscribeSolution

 

Camel permet simplement de gérer l’intégration via un DSL.

Choix d’implémentations

On peut faire pas mal de choses avec ce FRAMEWORK et de plusieurs manières. J’ai fait les choix d’implémentation suivants :

  • Tout se fera avec SPRING … et pas en XML 🙂
  • Il faut que toutes les médiations soient testables
  • J’exécute le code dans un FATJAR ( pourquoi avec springboot )

Configuration de la route

Apache Camel définit les médiations dans des routes. Elles se définissent assez rapidement .

Les routes commencent par une instruction from et se terminent par une ou plusieurs instructions to.

Pour mon exemple, j’extrais les données d’une table et les stocke dans un fichier.

Tout se configure par des URLs. La première permet d’extraire les données via JPA/HIBERNATE. Une entité Address permet le requêtage. La seconde permet le stockage dans un fichier texte JSON.

Elles sont externalisées dans des fichiers de configuration pour faciliter les tests et accessibles via SPRING.

Lancement de la route

Le lancement de la route se fait dans une méthode main() :

Tests

Camel fournit une API de test assez bien fournie. Elle permet notamment de mocker des endpoints existants (ex. : le fichier de sortie de mon cas de test).

Dans mon cas, j’ai décidé de remplacer la base de données que j’interroge en input par une base HSQLDB chargée en mémoire. Le fichier de sortie est, lui, remplacé dynamiquement par un mock. Pour ce faire, j’ai utilisé les « adviceWith »

Pour aller plus loin

Il y a pas mal d’exemples sur le GITHUB de CAMEL. Vous pouvez également acheter le livre « Camel In Action ». Ca ne vaut pas Effective Java 🙂 , mais vu qu’il est écrit par le principal développeur, c’est une très bonne référence.

 

 

Activer l’ equalizer sur Debian 9 — 25 mars 2018

Activer l’ equalizer sur Debian 9

Et oui, il y a un equalizer dans debian….Pulse Audio dispose d’un equalizer. Bon ce n’est encore très user friendly, mais ça fonctionne!

Installation de l’equalizer

#apt-get install pulseaudio-equalizer

Activation

Ajouter les lignes suivantes dans le fichier /etc/pulse/default.pa

load-module module-equalizer-sink
load-module module-dbus-protocol

Relancer le démon pulseaudio

# pulseaudio -k && pulseaudio -D

A ce stade, vous devriez avoir dans le panneau de configuration la référence à l’equalizer

Sélection_001

Lancement

En ligne de commande ( je vous disais que ce n’était pas trop user-friendly), lancer la commande

$ qpaeq &

On obtient cette interface:

qpaeq_002

Arrivé à ce niveau, je suis quand même un peu déçu/ Il n’y a pas une vrai intégration dans debian ( pas de lanceur pour l’equalizer ) et il n’y a pas de presets configurés ( #souvienstoiwinamp)

J’ai essayé de poster mon soucis sur IRC, mais je n’ai pas encore eu de réponse. Je pense soumettre un bug dans les prochains jours.

 

Installation de Vagrant — 15 mars 2018

Installation de Vagrant

Vagrant est un outil permettant de construire des environnements de travail virtualisés hébergés sur vmware, virtualbox ou encore docker. Il permet par exemple de construire et gérer une VM dans un seul et même workflow et d’éviter les exports et partages de machines virtuelles ( tout est déclaré dans un seul et même fichier ).

Vagrant

Voici comment je l’ai installé sur ma debian 9.

Installation

Le paquet fourni dans la distribution n’est pas compatible avec la version de virtualbox fournie dans le repo virtualbox.org. j’ai donc installé la version disponible sur le site de vagrant.

# dpkg -i vagrant_2.0.2_x86_64.deb

Configuration

Proxy

Si vous avez un proxy, il faut effectuer le paramétrage suivant

$ export http_proxy="http://user:password@host:port"
$ export https_proxy="http://user:password@host:port"
$ vagrant plugin install vagrant-proxyconf
$ export VAGRANT_HTTP_PROXY="http://user:password@host:port"
$ export VAGRANT_NO_PROXY="127.0.0.1"
$vagrant box add \
precise64 https://files.hashicorp.com/precise64.box
<code>$ export VAGRANT_DEFAULT_PROVIDER</code>=virtualbox 

Installation d’une VM

Voici un exemple pour une VM virtualbox basée sur ubuntu

$ mkdir ~/vagrant
$ cd ~/vagrant
$ vagrant init pristine ubuntu-budgie-17-x64
$ vagrant up 

Avec ces quelques commandes j’obtiens un environnement ubuntu hébergé sur virtualbox sans avoir à installer et configurer la vm. Pour l’instant je ne rentre pas trop dans les détails de la construction des images. Peut-être que je m’y plongerai prochainement…

Ma présentation au Touraine Tech — 26 février 2018

Ma présentation au Touraine Tech

J’ai eu la chance d’être sélectionné pour la première édition de la conférence TouraineTech.

logotnt_final

Tout d’abord, je tiens à remercier toute l’équipe du Touraine Tech pour l’accueil et l’organisation de cette conférence.

Ma présentation s’intitulait: Jenkins2 le retour (d’expérience). Je faisais un retour d’expérience sur la mise en œuvre de Jenkins 2 et des pipelines. Elle était au format quickie  (15mn).

Vous trouverez ci-dessous les slides :

J’ai pas mal préparé la présentation car c’était ma première dans ce domaine. Je trouve que ça s’est pas trop mal passé. J’ai fait quelques erreurs dans mes slides ou tout du moins je trouve que je n’ai pas eu l’effet escompté. Quoi qu’il en soit, je suis plutôt content du résultat.

Les retours ont été assez satisfaisants. Voici le retour des participants :

IMG_0161

Pour ceux qui regrettaient de ne pas avoir de démos, j’en suis désolé, mais le format de 15mn ne s’y prêtait pas trop . Si j’avais eu plus de temps, j’aurai fait des démonstrations qui auraient beaucoup mieux illustré mon propos.

Pour conclure, je pense rééditer cette expérience. Ça m’a vraiment plu. Je n’ai plus qu’à trouver un sujet pour l’édition 2019 de Touraine Tech 🙂

 

 

 

Ma configuration CYGWIN — 16 février 2018

Ma configuration CYGWIN

Dans la série, j’essaye de sauvegarder toutes mes configurations, voici ce que j’ai fait pour configurer correctement cygwin.

Pour ceux qui ne connaissent pas ou qui n’ont pas la chance d’utiliser windows au travail, cygwin est un shell avec tous les outils GNU.

En attendant d’avoir windows 10 ( au travail ) et un BASH intégré, il n’y a pas mieux. Du moins à mon humble avis.2000px-Cygwin_logo.svg.png

GIT

Complétion

On a besoin des fichiers suivants

Je les ai téléchargé et placé dans le répertoire $HOME.

Activation de la configuration et affichage de la branche en cours dans le prompt

J’ai activé la configuration git en exécutant les scripts précédemment téléchargés.

Voici la personnalisation que j’ai paramétré dans la variable d’environnement PS1

J’ai également activé des propriétés qui étaient en commentaire dans ce fichier. Je ne les ai pas listée pour ne pas trop surcharger l’article 🙂

Configuration Nom et sécurité

VIM

Que serait un prompt sans vim ?

J’ai installé une suite de plugin : The ultimate vimrc. Il faut cloner le repo GIT et lancer un script

git clone --depth=1 https://github.com/amix/vimrc.git ~/.vim_runtime
sh ~/.vim_runtime/install_awesome_vimrc.sh

 

 

 

 

Ma Configuration Debian 9 — 10 février 2018

Ma Configuration Debian 9

Désolé de remettre ça… Je remets sur mon blog ma configuration Debian. Histoire de ne pas la perdre tant qu’elle est dans mon historique .

220px-Debian-OpenLogo.svg

Voici ce que j’ai réalisé post-installation:

Ajout dépôts supplémentaires

Dans le fichier /etc/apt/sources.list, ajouter les repo contrib et non-free . Activer également les mises à jour de sécurité.

deb http://ftp.fr.debian.org/debian/ stretch main non-free contrib
deb-src http://ftp.fr.debian.org/debian/ stretch main non-free contrib

deb http://security.debian.org/debian-security stretch/updates main non-free contrib
deb-src http://security.debian.org/debian-security stretch/updates main non-free contrib

# stretch-updates, previously known as 'volatile'
deb http://ftp.fr.debian.org/debian/ stretch-updates main non-free contrib
deb-src http://ftp.fr.debian.org/debian/ stretch-updates main non-free contrib

Logiciels tiers

Etcher

#echo "deb https://dl.bintray.com/resin-io/debian stable etcher" | sudo tee /etc/apt/sources.list.d/etcher.list
#apt-key adv --keyserver hkp://pgp.mit.edu:80 --recv-keys 379CE192D401AB61

Virtualbox

# wget -q https://www.virtualbox.org/download/oracle_vbox_2016.asc -O- | sudo apt-key add -

Dans le fichier /etc/apt/sources.list.d/virtualbox.list

deb https://download.virtualbox.org/virtualbox/debian stretch contrib

Spotify

Dans le fichier /etc/apt/sources.list.d/spotify.list

deb http://repository.spotify.com stable non-free

Installation paquets supplémentaires

# apt-get update
# apt-get install firmware-iwlwifi virtualbox-5.2\
ttf-mscorefonts-installer easytag tuxguitar-jsa htop\
 frescobaldi gparted grsync ntfs-config chromium autofs\
 openjdk-8-jdk openjdk-8-jre gnome-tweak-tool ntfs-config \
ntfs-3g cifs-utils geogebra-gnome arduino libmediainfo \
libmediainfo0v5 network-manager-openvpn-gnome dirmngr \
spotify-client spotify-client-gnome-support \
 etcher apt-transport-https etcher-electron vim \
fonts-powerline audacity ffmpeg lame unrar rar gdebi \
sound-juicer traceroute scala net-tools nmap \
gnome-shell-pomodoro hplip dig dnsutils build-essential \
linux-headers-amd64 firmware-linux-nonfree lshw ethtool \
libsane-hpaio xsane autofs vlc

Configuration autofs

Pour ceux qui ne connaissent pas , autofs est un outil permettant de monter directement des partages nfs et cicfs à l’utilisation et non au démarrage de l’ordinateur.

Dans le fichier /etc/auto.master

/mnt/SERV1/nfs /etc/auto.nfs --ghost, --timeout=60 
/mnt/SERV1/cifs /etc/auto.SERV1.cifs --ghost, --timeout=60 
/mnt/SERV2 /etc/auto.cifs --ghost, --timeout=60

ensuite insérer la configuration adéquate dans les fichiers référencés :

auto.cicfs

data -fstype=cifs,credentials=/home/USER/.cred-file,user=littlewing,uid=1000,gid=1000 ://192.168.0.XX/REPERTOIRE

Les identifiants / mots de passe sont stockés dans un fichier .cred-file stocké à la racine du répertoire utilisateur.

Voici un exemple :

username=user
password=password

Le fichier auto.SERV1.cifs reprend la même structure

auto.nfs

REP1 -fstype=nfs,rw,intr 192.168.0.XX:/volume1/REP1
REP2 -fstype=nfs,rw,intr 192.168.0.XX:/volume1/REP2

Installation d’atom

J’ai choisi d’installer atom via le package .deb fourni par github. Afin d’automatiser l’installation et la mise à jour, voici le script que j’ai réalisé :

#!/bin/sh
SETUP_ROOT=/tmp
wget -O $SETUP_ROOT/atom.deb "https://atom.io/download/deb"
echo "Installation du paquet..."
dpkg -i $SETUP_ROOT/atom.deb
echo "Fini :)"

Ce script est placé dans le répertoire /usr/local/sbin et lancé comme suit :

# upgrade-atom.sh

Installation de Firefox

Afin d’avoir la dernière version de firefox, voici le script que j’ai réalisé:

#!/bin/sh
SETUP_ROOT=/tmp
BIN_ROOT=/usr/local/firefox
DATE=`date +%Y-%m-%d`
OLD_EXE=/usr/lib/firefox-esr/firefox-esr
wget -O $SETUP_ROOT/FirefoxSetup.tar.bz2 "https://download.mozilla.org/?product=firefox-latest&os=linux64&lang=fr"
echo "Extraction de l'archive..."
tar xjf $SETUP_ROOT/FirefoxSetup.tar.bz2 -C /usr/local
echo "Changement des droits utilisateur"
chown -R :users $BIN_ROOT
chmod a+x $BIN_ROOT/firefox
echo "Sauvegarde de l'ancien binaire et Creation des liens symboliques"
if [ -e $OLD_EXE ]
then
 OLD_BINARY=${OLD_EXE}_orig_${DATE}
 mv $OLD_EXE $OLD_BINARY
fi 
ln -s $BIN_ROOT/firefox $OLD_EXE
chmod a+x $OLD_EXE
echo "Fini :)"

Minecraft

Voila l’étape la plus importante, du moins pour mes enfants …

J’ai crée le script /usr/local/bin/minecraft.sh

#!/bin/bash
cd /usr/local/minecraft
java -Xmx1G -Xms512M -cp /usr/local/minecraft/Minecraft.jar net.minecraft.bootstrap.Bootstrap

J’ai placé le JAR en question dans le répertoire /usr/local/minecraft.

Enfin, j’ai crée le fichier « lanceur gnome » /usr/share/applications/minecraft.desktop

[Desktop Entry] 
Name=Minecraft
Comment=
Categories=Game;BoardGame;
Exec=/usr/local/bin/minecraft.sh
Icon=Minecraft_Block
Terminal=false
Type=Application
StartupNotify=true

J’ai également mis une icone SVG dans le répertoire /usr/share/icons/

Optimisation du boot

Après toutes ces installations, il faut vérifier que les performances, notamment au démarrage ne sont pas trop altérées

Pour avoir le détail du boot, il faut utiliser la commande systemd-analyze

#systemd-analyze blame
 8.113s NetworkManager-wait-online.service
 2.549s apt-daily-upgrade.service
 803ms networking.service
 228ms colord.service
 213ms dev-sda1.device
 145ms systemd-timesyncd.service
 128ms ModemManager.service
 102ms autofs.service
....

On peut également voir le chemin critique avec cette commande:

#systemd-analyze critical-chain 
The time after the unit is active or started is printed after the "@" character.
The time the unit takes to start is printed after the "+" character.

graphical.target @8.944s
└─multi-user.target @8.944s
 └─autofs.service @8.841s +102ms
 └─network-online.target @8.841s
 └─NetworkManager-wait-online.service @723ms +8.113s
 └─NetworkManager.service @642ms +80ms
 └─dbus.service @612ms
 └─basic.target @612ms
 └─paths.target @612ms
 └─acpid.path @610ms
 └─sysinit.target @608ms
 └─systemd-backlight@backlight:acpi_video0.service @1.042s +8ms
 └─system-systemd\x2dbacklight.slice @1.042s
 └─system.slice @119ms
 └─-.slice @108ms

Désactivation des services

Par exemple, si vous voulez désactiver le service virtualbox au démarrage

# systemctl disable vboxautostart-service.service

et ainsi de suite pour tous les services inutiles au démarrage

Analyse du démarrage d’un service

Pour analyser le démarrage d’un service, on peut utiliser la commande journalctl

# journalctl -b -u NetworkManager-wait-online.service

 

Conclusion

Après toutes ces étapes, j’ai un système opérationnel. Il manque pas mal d’outils ( ex. maven, npm, intellij,…). Ces outils tiennent plus du poste de développement.

 

 

 

Migration de mon blog — 9 février 2018