Exile on Keyboard St. - Blog sur Linux et Debian

Aller au contenu | Aller au menu | Aller à la recherche

samedi 2 décembre 2017

Installer Firefox Quantum rapidement avec liar

La fondation Mozilla a publié il y a quinze jours la nouvelle version de son navigateur, Firefox Quantum, et vous avez sans doute constaté comme quoi que la navigation est plus rapide et plus fluide avec cette nouvelle version du Panda roux.

Depuis le 14 novembre, Firefox Quantum a déjà été patché et sa version est passée de 57.0 à 57.0.1.

Sous Lnux, Firefox Quantum peut s'installer "à la main" en téléchargeant la "tarball" puis en allant l'extraire dans un répertoire de votre choix.

On va plutôt aujourd'hui l'installer avec liar, qui passera toutes ces commandes manuelles pour vous. Je passe ici sur l'installation de Linux Installer for ARchives qui est détaillée dans le README du projet.

L'installation se passe en une ligne:

liar -l -p firefox install firefox-quantun https://download-installer.cdn.mozilla.net/pub/firefox/releases/57.0.1/linux-x86_64/en-US/firefox-57.0.1.tar.bz2
Installing 'firefox-quantun' from 'https://download-installer.cdn.mozilla.net/pub/firefox/releases/57.0.1/linux-x86_64/en-US/firefox-57.0.1.tar.bz2' to '/home/debian/Programs/firefox-quantun'
--2017-12-02 07:40:05--  https://download-installer.cdn.mozilla.net/pub/firefox/releases/57.0.1/linux-x86_64/en-US/firefox-57.0.1.tar.bz2
Résolution de download-installer.cdn.mozilla.net (download-installer.cdn.mozilla.net)… 54.192.76.53
Connexion à download-installer.cdn.mozilla.net (download-installer.cdn.mozilla.net)|54.192.76.53|:443… connecté.
requête HTTP transmise, en attente de la réponse… 200 OK
Taille : 53478276 (51M) [application/x-tar]
Sauvegarde en : « /home/debian/.liar_cache/firefox-57.0.1.tar.bz2 »

/home/debian/.liar_cache/firefox- 100%[=============================================================>]  51,00M  10,9MB/s   ds 4,7s   

2017-12-02 07:40:09 (10,9 MB/s) — « /home/debian/.liar_cache/firefox-57.0.1.tar.bz2 » sauvegardé [53478276/53478276]

Extracting '/home/debian/.liar_cache/firefox-57.0.1.tar.bz2' to '/home/debian/Programs/firefox-quantun'
Creating link: '/home/debian/bin/firefox'

La commande firefox se trouve alors automatiquement dans le PATH à condition que ~/bin y soit.

On peut aussi installer Firefox après l'avoir téléchargé:

Intallation de Firefox Quantum

Vous noterez que dans l'installation avec téléchargement, wget est très verbeux bien qu'aucune option ne le demande à la commande liar ... C'est un petit bug qu'il faudra corriger !

jeudi 16 novembre 2017

upgrade-from-grub-legacy: la commande (assez) mal nommé du paquet grub-pc

Le paquet grub-pc du bootloader de Linux contient 3 commandes placées dans les répertoires /bin et /sbin.

Une d'entre elles se nomme upgrade-from-grub-legacy et permet de migrer de Grub à Grub 2. Contrairement aux deux autres commandes du paquet grub-pc, son nom ne commence pas par grub.

Ce choix peut poser problème si vous utilisez la complétion avec Bash car c'est la seule commande Linux qui commence par 'upg'.

Si vous avez défini un alias pour mettre à jour votre système comme suit:

alias update='apt-get update && apt-get upgrade && apt-get autoremove'

Et que, par erreur, vous saisissez dans votre terminal:

upg <TAB> <ENTER>

Vous aller lancer la commande upgrade-from-grub-legacy, ce qui n'était absolument pas votre volonté.

Dommage, vous vous souveniez que votre alias se nommait upgrade !

Si par mégarde, vous faites cette erreur (je l'ai faites ...), ne faites par CTRL C après avoir lançé la commande, parce que si tous les fichiers de /boot/grub/i386-pc/ n'ont pas eu le temps d'être recréés au moment du CTRL C, votre système Linux ne redémarrera pas !!!!

Si par contre, vous laissez la commande se terminer, pas de problème. Néanmoins, le nom de cette commande est mal choisi et devrait commencer par grub pour éviter d'être utilisée à mauvais escient, surtout que de passer de Grub à Grub2 n'arrive maintenant quasiment plus jamais.

dimanche 5 novembre 2017

Le paquet trash-cli ou comment utiliser la corbeille en ligne de commande

On a tous à un moment ou à un autre supprimé un fichier par erreur sous Linux.

On remédie souvent à cette situation malheureuse par un:

alias rm='rm -i'

Cependant, il existe un moyen de se passer de la confirmation de suppression de la commande rm et cela consiste à utiliser la corbeille en ligne de commande.

Linux propose en effet le paquet trash-cli que l'on installe comme suit:

sudo apt-get install trash-cli

Et pour supprimer un fichier, plutôt que d'utiliser la commande rm:

trash-put Readme.md 

Puis:

trash-put Profiles.zip 

Pour afficher la liste des fichiers présents dans la corbeille:

trash-list 
2017-11-05 16:34:05 /home/user/Profiles.zip
2017-11-05 16:33:51 /home/user/Readme.md

La timestamp affiché étant la date de suppression du fichier.

Supposons maintenant que j'ai supprimé Readme.md par erreur:

user@machine:~$ restore-trash 
   0 2017-11-05 16:34:05 /home/user/Profiles.zip
   1 2017-11-05 16:33:51 /home/user/Readme.md
What file to restore [0..1]: 

Il me suffit alors de sélectionner le numéro du fichier pour que celui-ci soit restauré.

Le paquet trash-cli fournit aussi la commande restore-trash qui permet de rétablir l'intégralité des fichiers placés à la corbeille.

Et on peut maintenant définir:

alias rm='trash-put'

dimanche 29 octobre 2017

IntelliJ IDEA: Quel formatage pour votre code Java

Beaucoup de développeurs, même expérimentés, ne prêtent pas (ou pas assez) attention au formatage du code.

Pourtant, l'utilisation d'un template de formatage de code présente les entre autres les avantages suivants:

  • le code est plus facile à lire
  • Les lignes blanches successives et inutiles sont évitées
  • En Java, le pavé des imports sera toujours cohérent entre les développeurs
  • Il permet de voir facilement les blocs, même ceux ne contenant qu'une instruction
  • Une fois un template de formatage choisi dans une équipe, les conflits à l'update sont évités et les merges facilités

Malheureusement, la plupart des projets de développement n'imposent pas un template de formatage et les développeurs se contentent trop souvent du template par défaut de leur environnement de développement. Et comme tous les développeurs n'utilisent pas le même IDE ...

Eclipse propose par exemple trois templates par défaut, qui tous utilisent des tabulations pour indenter le code ... Pire, le profile "Java Conventions" utilise à la fois des tabulations et des espaces. C'est bien dommage qu'Eclipse propose de formater le code avec des tabulations, ce que très peu de gens font encore. Parait t'il qu'historiquement, ce choix avait pour but de "sauver" de l'espace disque !!! Cette époque là est bien révolue. Enfin, pour modifier la façon de formater le code par défaut d'Eclipse, il faut dupliquer le profile avant de pouvoir le modifier, ce qui n'est pas très commode. IntelliJ IDEA n'impose pas cette restriction.

Dans ce billet, on va quand même dupliquer le profile par défaut d'IntelliJ, pour pouvoir exporter nos paramètres et aussi revenir facilement au profile par défaut.

Interdire la détection de l'indentation existante

Première chose à faire dans IntelliJ IDEA, décocher la case "Detect and use existing file indents for editing". En effet, avec cette option, si un fichier est indenté avec des tabulations, IntelliJ considèrera qu'il faut continuer d'indenter de cette façon !!!

Utiliser EditorConfig ou pas ?

EditorConfig est un format de fichier texte permettant de définir des profiles de formatage de code, via quelques propriétés. Ce format est censé être supporté par de nombreux éditeurs, ce qui est très séduisant. Malheureusement, trop peu de propriétés sont implémentées par exemple par le plugin EditorConfig pour IntelliJ, et on est donc amené à définir le reste du paramétrage dans la configuration standard de l'éditeur. J'y reviendrai peut être dans un billet séparé. Pour l'instant, on va cocher qu'on n'utilise pas EditorConfig.

Onglet 'Tabs and Indents'

On ne change rien dans cette section puisqu'IntelliJ utilise par défaut les espaces pour l'indentation et 4 de plus à chaque bloc. Ce formatage nous convient.

Onglet 'Spaces'

Dans cette section, on va cocher dans la sous-section 'Within' la case 'Array initializer braces', ce qui permet de mieux voir les paramètres dans les appels à log4j ou java.util.logging.

Onglet 'Wrapping and braces'

C'est dans cette section que l'on va modifier le plus de choses.

Concernant la position des accolades, on va adopter le style Allman, c'est à dire positionner les accolades sur la ligne suivante.

Toutes les valeurs de la sous section 'Braces placement' seront donc positionnées à 'Next line'.

Une fois qu'on a fait cela, il est logique:

  • dans 'if() statement' de cocher 'else on new line'
  • dans 'try statement' de cocher 'catch on new line' et 'finally on new line'
  • dans 'do while statement' de cocher 'while on new line'

Enfin, afin que les blocs soient bien visibles, même ceux ne contenant qu'une instruction, on va position à 'always' les propriétés 'Force braces' des sous-sections suivantes:

  • 'if() statement'
  • 'for() statement'
  • 'while() statement'
  • 'do while() statement'

Onglet 'Blank lines'

Dans la sous-section 'Keep maximum blank lines', on positionnera les 3 propriétés suivantes à 1 au lieu de 2:

  • In declarations:
  • In code:
  • Before '{':

En effet, je trouve que trop de lignes blanches n'aide pas à la lisibilité mais nous oblige à scroller.

Onglets 'JavaDoc', 'Imports' et 'Arrangement'

Je ne modifie rien pour l'instant.

Onglet 'Code generation'

Dans la section 'Final modifier' on coche les deux cases:

  • Make generated local variables final
  • Make generated parameters final

Vous pouvez utiliser le Formateur de code Java pour IDEA défini ci-dessous en le téléchargeant avec le lien précédent.

mercredi 18 octobre 2017

Bien utiliser les tableaux en bash: les tableaux associatifs

Dans un billet précédent, on a vu comment bien utiliser les tableaux en bash. Il s'agissait des tableaux indexés dont l'indice est un entier comme dans beaucoup de langages.

Mais Bash permet aussi la définition de tableaux associatifs dans lesquels l'indice est une chaîne de caractères et non plus un entier.

Pour reprendre l'exemple des couleurs:

declare -A colours

colours[black]=noir
colours[red]=rouge
colours[green]=vert

Vous remarquerez le flag -A au lieu de -a utilisé pour le tableau indexé.

Pour lister les valeurs du tableau associatif:

for colour in "${colours[@]}"; do
    echo "$colour"
done
rouge
vert
noir

Maintenant si je veux faire le parcours en partant des clés:

for colour in "${!colours[@]}"; do
    echo "$colour: ${colours[$colour]}"
done

Ce qui donne:

red: rouge
green: vert
black: noir

La syntaxe est donc exactement la même qu'avec les tableaux indexés excepté qu'ici la clé est une chaîne de caractères et que l'utilisation des crochets tient lieu de double quotes: la clé peut donc contenir des espaces.

On peut aussi affecter un tableau en une seule instruction:

data=([joe]=30 [mary]=25)

- page 1 de 30