Journal du développeur – Introduction

Bonjour à toi, internaute égaré, abonné de longue date ou passant de l’internet. En ce début d’année 2016 j’espère que tu as pris tes bonnes résolutions, que tu as fait le récapitulatif de l’année passé et que tu en as tiré les conclusions qu’il fallait en tirer !

Pour ma part j’ai pris une petite semaine de congé qui m’ont permis de faire tout ça et de me refaire une santé.

Confessionnal

Oh grand réseau de l’informatique diffuseur de la pensée libre mais toujours plus contrôlée. En 2015 j’ai été ton utilisateur plus qu’un de tes acteurs. Je n’ai pas vraiment touché à « Cubiq Arcadeum » bien que les joueurs aient passé la barre des 100. Je n’ai pas non plus été très exigeant dans mon utilisation de logiciel libre privilégiant beaucoup trop à mon goût le logiciel privateur. Et enfin, je regrette les nombreuses heures passées à flâner sur les réseaux sociaux en quête de vidéos humoristiques et de GIFs de petits chats tout mignon.

C’est pourquoi

Durant ma convalescence j’ai pris la décision de dépoussiérer un peu mon espace de travail. De nettoyer l’écran de mon ordinateur. De supprimer l’icône Facebook de mes marques pages Firefox ainsi que de l’écran d’accueil de mon téléphone. Et de désinstaller Windobs 8 qui n’est décidément pas fait pour travailler !

Parcours initiatique

A l’image de Candide de Voltaire et de son parcours initiatique, 2015 et son aboutissement m’a fait réfléchir (et lire) sur beaucoup de sujets, en passant d’écologie, à la recherche, à la femme comme à l’homme (l’Humain), aux relations humaines, à la société, à la paix comme aux actes de barbaries causés par les uns comme par les autres aux quatre coins du monde. Mais aussi à la recherche, à l’innovation, à l’évolution, à la vie, aux valeurs qui nous sont propres et que nous ne devrions pas refouler hors de nous.

En bref j’avais besoin de remettre les pieds sur terre, faire sortir la vapeur de la cocotte minute 2015 pour faire bouillir celle de 2016.

A l’image de Tiphaine Patraque sorcière dans « l’Hiverrier » de Terry Pratchett et comme l’avait un jour dit Mémé Ciredutemps  à celle-ci : « Quand on voulait se promener le nez en l’air, il fallait garder les deux pieds par terre. Récurer les sols, couper du bois, laver le linge, faire du fromage – ces tâches éreintaient, elles enseignaient ce qu’est la réalité. On pouvait leur consacrer une petite partie de son esprit, ce qui donnait aux pensées le temps de s’ordonner et de s’apaiser. »

Passons des paroles aux actes, parce qu’il le faut bien un jour !

Le résultat informatiquement:

  • Un ordinateur dépoussiéré avec Windobs 7, et les seuls plug-ins constructeur utiles ni plus ni moins ! Oui j’ai rétrogradé, oui c’est pas très Geek, mais je n’ai jamais eu autant de facilitée à travailler qu’avec un Windobs 7 bien propre.
  • Beaucoup de libre et d’open installé VLC, Inkscape, Blender, Gimp, Libre office, Firefox, …
  • Un Youtube en noir, et toutes les musiques les plus écoutées enregistrées en local pour avoir moins de bande passante utilisées.
  • Et enfin des dossiers bien triés et rangés. Pour ne pas se perdre et gagner du temps. Désactivations de tous les sons de Windows. Paramétrages de tout ce qui s’ouvre au démarrage.

Le résultat dans la vie de tous les jours:

Cette partie, je l’ai commencée depuis l’an dernier au 1 Janvier 2015.

  • Continuer à réduire ma consommation d’énergie fossile, je lâche un peu plus le pied de l’accélérateur, j’essaie de faire le maximum de déplacement à pied (1520km sur l’année 2015), ou à vélo (1200km de Juin à Décembre 2015. Pour un total de 3600km en ajoutant la course à pied et la natation sur la même année.
  • Porter une plus grande attention à la nourriture que j’achète et donc que je consomme ! Ayant une plus grande activité physique et donc une plus grande dépense Calorique, je consommais certes moins de carburant fossile mais beaucoup plus de nourriture. Provoquant une hausse des déchets ménagers. Contre ma volonté dans finir avec la surconsommation. :(
  • Manger plus, mais manger mieux. J’avais déjà pu lire des articles sur les gens vivants le « Zéro emballages ». J’ai donc commencé à mis mettre moi aussi petit à petit ce qui a eu pour effet de mieux manger et de jeter moins qu’avant.
  • Cette hausse de mon activité physique, la volonté de manger mieux, plus localement et avec moins de déchets à eu un résultat physique et visible sur ma silhouette qui s’est vu retirer 30kg à son point le plus élevé (un petit +5kg de rebond sur les derniers mois).
  • L’augmentation de la taille de mon portefeuille en dépensant moins en malbouffe, sodas, et tous  autres produits industrielles.

A venir (en vrac)

  • Un article sur le mieux manger, consommer autrement, les déchets.
  • La suite du journal du développeur (partie 1).
  • Une surprise à vous présenter.

Cmd #6 [Git]

Quelques commandes Git bien utiles.

 

git log -p

Permet de voir le diff introduit par chaque commit.

 

git log --name-status

Voir la liste des fichiers affectés par chaque commit avec le type de modification: ajout, modification, suppression.

 

git log --stat

Donne des infos concernant les fichiers modifiés (ex: …/src/test/resources/log4j.properties | 3 +-).

 

git stash save

Sauvegarde les modifications locales et remet le dépôt dans l’état correspondant à votre HEAD.

 

git stash pop

Applique les modifications précédemment sauvegardées.

 

Source:

Libération du téléphone

Depuis quelques mois maintenant, j’ai quitté l’OS Android du constructeur de mon téléphone portable pour migrer vers Cyanogen. J’appréhendais un peu l’opération bien que celle-ci soit bien documentée et que ce ne soit pas la première fois que j’effectuais une migration. Lorsqu’on touche au système du téléphone, le risque zéro n’existe pas… Après relecture de la procédure, je me suis donc lancé.

En premier lieu, il convient de débloquer le bootloader. Cette étape est transparente pour peu que le téléphone ne soit pas un téléphone opérateur; ce qui est mon cas. On demande un code au constructeur et on l’utilise pour débloquer le bootloader. C’est aussi simple que cela. Pour leur part, les téléphones opérateurs sont généralement munis d’une surcouche avec des applications inutiles et impossibles à désinstaller, auquel s’ajoute un blocage fort du bootloader et des droits root. « Malheureux, ce téléphone ne t’appartient pas, nous seuls savons ce qui est bon pour toi (et ne t’avise surtout pas d’utiliser ce téléphone chez un concurrent) ».

Je commence ensuite l’installation de Cyanogen à proprement parler. Rien de bien compliqué, la documentation est complète et bien faite. Tout se passe bien, jusqu’à ce que je tente la sauvegarde du système existant. Zut, la partition est chiffrée ! J’avais oublié ce point. Je continue donc la procédure d’installation sans faire de copie de l’existant. Au passage, j’en profite pour installer immédiatement freecygn et me débarrasser le plus possible de Google. L’installation se termine. Je croise les doigts et redémarre. L’écran s’allume, le logo Cyanogen apparaît. C’est bon ça fonctionne, je peux passer à la personnalisation du système.

Avec cette nouvelle installation, je suis donc privé de PlayStore. Cela ne me pose pas de problème, puisque j’utilise F-Droid comme alternative et que 90% des applications que j’utilise en proviennent. Pour éventuellement installer une application disponible uniquement sur le PlayStore de Google, j’ai découvert le très utile GooglePlayDownloader de Tuxicoman et plus récemment, son adaptation disponible via http. Très pratique pour récupérer une application sans avoir à installer le logiciel ou lorsqu’on ne dispose pas d’un ordinateur à proximité.

Mon téléphone est désormais un peu plus libre qu’avant, avec moins de contact avec Google. Une autre possibilité serait de construire soi-même son système Android en partant des sources de l’AOSP. Cette perspective ne me semble pas insurmontable, néanmoins, je n’ai pas spécialement l’intention de réaliser les tests de fonctionnement sur le téléphone que j’utilise quotidiennement au risque de devoir tout réinstaller ou de le rendre inutilisable. Je n’envisage pas non plus de faire l’acquisition d’un deuxième téléphone juste pour les tests (du moins pour le moment). Du reste, j’ai découvert le Jolla phone de l’entreprise finlandaise Jolla (à l’avenir incertain puisque actuellement en difficulté financière) qui m’a l’air d’être une alternative intéressante aux Android de Google, notamment avec son SailfishOS basé sur un cœur Linux et du Qt. Je n’envisage néanmoins pas de changer de téléphone à moyen terme quand mon téléphone actuel fonctionne très bien.

Modifications de l’infrastructure de services

Qu’est-ce qui se cache derrière ce titre pas forcément pertinent ? Un point sur l’évolution des composants logiciels que j’utilise pour me passer des GAFAM (Google Apple FaceBook Amazon Microsoft). Quelques changements ont en effet eu lieu depuis mon précédent article.

Au revoir Owncloud… J’ai pris la décision d’abandonner Owncloud lors de la mise à jour vers la version 8.1.0. En quelques mots, à chaque mise à jour du logiciel, je me retrouvais à devoir réactiver plusieurs modules, supprimer des fichiers sur le disque ou finir une mise à jour via la ligne de commande. La dernière maj a mis en lumière des problèmes dans la gestion des clefs de chiffrements des fichiers, résultats: une majorité des fichiers est illisible. N’ayant pas de document à récupérer absolument, je ne me suis pas attardé sur les éventuelles procédures de récupération après un premier essai infructueux. Ce dernier problème achève donc de me convaincre d’aller regarder les autres solutions disponibles en matière de gestion de fichiers en ligne.

Je me tourne finalement vers Seafile. L’installation est bien documentée et ne pose pas de problème particulier. Dans les points positifs, je note la présence d’un client Android et d’une version serveur pour Raspberry Pi. Les fonctionnalités et l’interface de la version « Community » peuvent sembler austère, mais les éléments principals d’une telle solution sont présents et fonctionnent bien. A noter qu’il est possible de demander un passage en version pro gratuit si on se limite à 3 utilisateurs; à réfléchir. Seafile supporte également le chiffrement des fichiers, mais celui-ci s’effectue via le client; c’est un point que je dois encore tester.

Le passage de Owncloud à Seafile pour la gestion des fichiers a également posé la question du remplacement des autres modules Owncloud liés à la gestion des contacts, calendriers, flux rss et favoris. Pour moi, le rôle principal d’Owncloud réside dans la gestion de fichiers en ligne, les autres modules permettant d’enrichir la plateforme et de lui ajouter des fonctionnalités annexes. Je suis donc parti à la recherche de logiciels spécifiques permettant chacun de répondre aux besoins identifiés. Finalement, j’obtiens le découpage suivant:

  • Seafile: Pour la gestion et le partage de fichiers.
  • Selfoss: Pour la gestion des flux rss. Dispose d’une application Android dédiée.
  • Baïkal: Pour la gestion des contacts et du calendrier. (Interface web en construction dans la v2)
  • Shaarli: Pour sauvegarder simplement des urls depuis n’importe quel support.

Voilà pour la nouvelle forme de mon nuage de service. L’étape suivante concerne l’auto-hébergement progressif d’une partie des services, amenant avec elle son lot de défis.

[Classic ASP] Improving split function

Coming from the JavaScript world, I’m used to split function working as follow :

"".split(",")
> Array [ "" ]

It’s basic JavaScript. Take an empty string, try to split it on a delimiter, it will return an array containing just one element : an empty string. It’s exactly what you expect from the function, always return an array. Like it should be in every programming language.

A few weeks ago, I had to deal with split function in ASP Classic. Calling the function is a bit different, but that’s not a big deal :

split("foo,bar", ",")

The function works fine in almost every cases. But it has an unexpected behaviour when you use it on an empty string. Let’s try it :

Dim array
array = split("", ",")
'-- Expect array to contain one element
UBound(array) '-- Returns -1. Wait! What?
array(0)      '-- Guess what: Internal server error

That’s a problem. The split function does not return an array containing an empty string when you try to split an empty string, it just returns an array with nothing in it – hence UBound returning -1.

When you are aware of this particularity, it’s easier to write your code. Since I personally prefer a JavaScript-like split function, I decided to write a betterSplit function doing the job as I wanted :

'-- Improve Split to work as expected
Function betterSplit(str, delimiter)
  Dim ar
  ar = Split(str, delimiter)

  '-- UBound
  '-- < 0 if empty string
  '-- = 0 if no delimiter in string
  If UBound(ar) <= 0 Then
    ReDim ar(0)
    ar(0) = str
  End If

  betterSplit = ar
End Function

As a matter of fact, I find this function much better than the original split function as it always returns an array even when using an empty string as a parameter.