jeudi 17 janvier 2019

Environnement de developpemt Python et Ubuntu 18.10 : un calvaire ?

Évitons les longues introductions, le problème est le suivant :
paradoxalement, installer un environnement de développement Python3 +  pip3 + pipenv (outils de packaging Python recommandé officiellement) sur Ubuntu 18.10 est un véritable calvaire !!!

Voici les étapes logiques pour l'installation (python3 est déjà pré-installé par défaut sur Ubuntu 18.10) :

1. Installons pip pour python3 (le paquet python-pip est valable pour python2)
$ sudo apt install python3-pip
$ pip3 -V
pip 9.0.1 from /usr/lib/python3/dist-packages (python 3.6)
C'est un bon début.

2. Maintenant, utilisons pip3 pour installer pipenv :
$ pip3 install --user pipenv
ou :
$ python3 -m pip install pipenv --user
Collecting pipenv
  Using cached https://files.pythonhosted.org/packages/13/b4/3ffa55f77161cff9a5220f162670f7c5eb00df52e00939e203f601b0f579/pipenv-2018.11.26-py3-none-any.whl
Collecting pip>=9.0.1 (from pipenv)
  Using cached https://files.pythonhosted.org/packages/c2/d7/90f34cb0d83a6c5631cf71dfe64cc1054598c843a92b400e55675cc2ac37/pip-18.1-py2.py3-none-any.whl
Collecting setuptools>=36.2.1 (from pipenv)
  Using cached https://files.pythonhosted.org/packages/37/06/754589caf971b0d2d48f151c2586f62902d93dc908e2fd9b9b9f6aa3c9dd/setuptools-40.6.3-py2.py3-none-any.whl
Collecting virtualenv (from pipenv)
  Using cached https://files.pythonhosted.org/packages/6a/d1/e0d142ce7b8a5c76adbfad01d853bca84c7c0240e35577498e20bc2ade7d/virtualenv-16.2.0-py2.py3-none-any.whl
Collecting virtualenv-clone>=0.2.5 (from pipenv)
  Using cached https://files.pythonhosted.org/packages/5b/66/6b0265b0f70222ebf8947989092546492b4ef280f560ddf92b80e9d7172a/virtualenv_clone-0.5.0-py2.py3-none-any.whl
Collecting certifi (from pipenv)
  Using cached https://files.pythonhosted.org/packages/9f/e0/accfc1b56b57e9750eba272e24c4dddeac86852c2bebd1236674d7887e8a/certifi-2018.11.29-py2.py3-none-any.whl
Installing collected packages: pip, setuptools, virtualenv, virtualenv-clone, certifi, pipenv
Successfully installed certifi-2018.11.29 pip-18.1 pipenv-2018.11.26 setuptools-40.6.3 virtualenv-16.2.0 virtualenv-clone-0.5.0

Malheureusement, et comme on pourrait s'en douter, le résultat est le même, pip3 est cassé.


3. Mais lorsqu'on tente de relancer pip3 :
$ pip3 -V
Traceback (most recent call last):
  File "/usr/bin/pip3", line 9, in <module>
    from pip import main
ImportError: cannot import name 'main'
Et là, le calvaire commence...


Pour régler ce problème "proprement", on peut faire un :
$ python3 -m pip uninstall pip && sudo apt install python3-pip --reinstall
Ce qui va supprimer pip, puis le réinstaller via apt. Mais le problème reste entier, puisqu'à chaque fois que l'on tentera d'installer pipenv via pip3, nous nous retrouverons avec la même erreur.

De plus, pipenv est inutilisable en l'état, puisque le PATH semble ne pas être configuré correctement et donc le shell ne trouve pas la commande pipenv.
Pour régler cela, il convient d'ajouter une ligne comme la suivante au fichier ~/.bashrc :
export PATH="${HOME}/.local/bin:$PATH"
Bon, d'une certaine manière, si nous acceptons de faire le deuil de pip3, nous avons au moins  un pipenv fonctionnel 👍



Ce que je vais me résigner à faire pour l'instant, car je voulais simplement coder en python3 et non faire du débug sur apt, pip3, pipenv, ou je ne sais quel composant du système.

Ce que je trouve vraiment dommage, c'est qu'une opération en apparence aussi simple qu'installer un module python via les outils prévus pour, pose finalement plus de problèmes qu'il n'en résout.

D'autant que les différentes documentations officielles et non-officielles nous proposent des instructions d'installation parfois très différentes les unes des autres, sans pour autant fournir une solution totalement satisfaisante sous Ubuntu 18.10 (homebrew, dépôt git, sources...).

Ce qui me gêne encore plus est le fait que toute cette opération semble apparemment fonctionner sans aucun embûche sur MacOS, et ça c'est quand-même un peu craignos pour Ubuntu, même si la responsabilité dans cette histoire semble compliquée à attribuer avec certitude...

EDIT :


Une solution par Matthew Brown :
# Install pip and pipenv
sudo apt install python3-pip python3-dev
pip3 install --user pipenv

# Add pipenv (and other python scripts) to PATH
echo "PATH=$HOME/.local/bin:$PATH" >> ~/.bashrc
source ~/.bashrc
Problème résolu !! 🎆
Apparemment le problème venait donc bien du PATH.

Notons que la version de pip3 a effectivement changé, maintenant que le système va bien chercher le bon dans le home de l'utilisateur  :
$ pip3 -V
pip 18.1 from /home/$USER/.local/lib/python3.6/site-packages/pip (python 3.6)
Merci Matthew ;)

lundi 29 septembre 2014

Ticketing OpenSource & gestion de demandes

Dans le cadre de mes divers projets, je suis amené à devoir répondre à de nombreuses demandes, très variées et hétérogènes, pour des demandeurs différents, dans des contextes différents.

La plupart de ces demandes me sont adressées sur l'une de mes nombreuses adresses email, ce qui, en plus de ne garantit aucunement que ces demandes seront bien traitées à temps, à pour autre effet de bord de remplir inutilement mes boîtes mail, rendant de fait encore plus compliqué (/impossible) de retrouver les dites demandes et donc de les traiter.


À terme, cela revient à omettre (in)volontairement un certain nombre de demandes qui pour certaines restent importantes, donc à recevoir des relances qui elles mêmes s'entassent dans des boîtes mails qui à leur tour... Vous saisissez le souci ? C'est bien un serpent qui se mord la queue...


Il y a un certain temps, je me suis penché sur des moyens plus ou moins détournés afin de régler ce problème récurrent.
Listes de taches, post-it, tableau Veleda, etc. Mais aucune de ces solutions n'était suffisante ni acceptable, en partie parce qu'elles ne permettaient pas de déléguer facilement certaines tâches ou d'assurer le suivi de l'ensemble.

Je me suis donc posé la question sous un autre angle : ce problème revenait en fait à gérer une liste de demandes, certes pas des demandes de résolution de bug mais on se rapprochait de la solution.
Après réflexion, un bugtracker ne suffisait pas à régler le problème car trop spécifique. Mais un logiciel de gestion de tickets généraliste le ferait parfaitement !

C'est ainsi que je me suis mis à la recherche de tels logiciels. Connaissant certaines références en logiciels libres, et après quelques recherches, voici une petite liste des candidats potentiels :
  • OTRS : un vieux de la vielle mais toujours d'actualité, référence du marché ; plutôt pour les grosses structures
  • osTicket : deuxième fleuron du marché, peut-être moins austère que le précédent ; adapté aux grosses structures
  • Brimir : basé sur RubyOnRails ; adapté aux petits structures
  • Jutda Helpdesk : également appelé django-helpdesk du nom du fameux framework python sur lequel il est bâti ; adapté aux petits structures
  • RT (Request Tracker) : autre solution

Ces outils permettent entre autres les commodités suivantes:
  • recueil des demandes sous forme de tickets
  • suivi de toutes les demandes, avec statistiques
  • création automatique de tickets à réception d'email
  • assignation du ticket à la personne compétente
  • intégration du demandeur au processus de résolution de sa demande
  • workflows & automatisation
  • ...


La gestion des demandes est une excellente pratique, mais elle ne se suffit pas à elle-seule dans une démarche de recherche d'efficacité, surtout pour du travail collaboratif.

Alliée à un bon gestionnaire de projets comme Redmine, ou OpenProject, la mise en place d'un gestionnaire de tickets devrait solutionner avantageusement cet épineux problème d'organisation.

Maestro s'il vous plait !

Lorsque vous êtes en charge d'un certain nombre de serveur (cela s'applique dès deux serveurs en fait) vous devenez coutumier du fait de devoir répéter inlassablement les mêmes tâche
s, opérations, commandes entre chaque serveur à la chaîne durant des heures.

Par exemple, mise à jour du système, installation de ssh / byobu / Docker / (...), configuration de votre .vimrc, déploiement de services et applications diverses...

Et franchement, pour un feignant perfectionniste comme moi, ça devient vite insupportable !
Sans compter les risques d'erreurs lors de la modification à la chaîne de fichiers de configuration, qui peut donner des résultats allant de l'art moderne à la catastrophe.

En fait tout cela repose sur deux besoins distincts mais complémentaires :
  • gestion de la configuration cohérente des machines
  • envoi de commandes vers un parc entier simultanément
Ces deux besoins sont rassemblés au sein du concept buzzword d'"orchestration".

Jusqu'ici, j'avais en tête des noms de solutions d'orchestration comme Puppet ou Chef.
Pour être honnête, après rapide coup d'œil à leurs doc respectives, je fus pris de violentes nausées devant la complexité de mise en place et la courbe d'apprentissage de ces deux solutions leaders du marché.
De plus, elles sont codées en Ruby, et comme je ne connais pas ce langage, les choses se compliquent en cas de besoin de customisation. Ah, si seulement ils étaient en Python...
Bon, il y a bien Juju, la solution d'orchestration maison de Canonical qui semble très aguicheuse, mais je n'ai pas encore eu le temps de m'y pencher.

Devant ce constat accablant, je devais donc me résigner à attendre de plus favorables hospices...


Ce dimanche soir, je décidais de regarder le film Salt gentimement propose par Netflix, avec Angelina Jolie dans le rôle de l'espionne-agent-double-mais-non-en-fait.

Et puis je me couche pour attaquer la semaine en forme.
Mais 1 heure plus tard, je me réveille sans raison apparente, et ai l'idée de lire quelques GNU/Linux Mag en retard avant de retomber dans les bras de Morphée.

Et là, par une synchronicité comme seule la Vie peut en inventer, je me retrouve nez à nez avec la couverture du GNU/Linux Mag #166 avec au centre "ORCHESTRATION ENFIN SIMPLE avec SALT !".
Comme quoi, il suffisait de demander ! L'agent Évelyne Salt à réponse à tout.
L'article de Émile <iMil> Heitor tombe comme souvent à pique, et me fait découvrir avec son humour légendaire un monde de possibilités insoupçonnées...

Salt est écrit en Python, il est extrêmement simple et puissant et semble répondre à tous les besoins en terme d'orchestration et de gestion de parc de serveurs. Il s'interface par ailleurs facilement avec Fabric, lui aussi écrit en Python.

Que demander de plus ? Y'a plus qu'à tester, et bientôt à moi la gestion de serveurs les doigts de pied en éventail...

Plan de sauvegarde minimaliste


http://www.thorandco.fr/?p=767

vendredi 26 septembre 2014

mercredi 27 août 2014

Sans commentaire...


ou comment supprimer les commentaires des fichiers log/config

grep -v '^#'

sed...

Afficher 1 ligne sur 2


Il peut parfois être utile d'afficher une ligne sur deux d'un fichier.

  • À partir de la première ligne (lignes impaires)
sed -n 'p;n'
  • À partir de la deuxième ligne (lignes paires)
sed -n 'n;p'
Page très utile :

samedi 28 décembre 2013

Burning sky

"Il se passe toujours quelque chose.
Il n'existe pas de moment banal.
Il n'y a que l'instant."

samedi 14 décembre 2013

mardi 3 décembre 2013

jeudi 31 janvier 2013

La facilité rend-elle idiot ?

Intéressante réflexion d'un gars de chez 37signals concernant le fait que la sur-facilitation et simplification à outrance, liée à la quête du "tout tout-de-suite" et du moindre effort pourrait bien nous rendre idiots.

Je partage ce point de vue et tente de l'appliquer tous les jours dans mes entraînements (Parkour) mon job et mes apprentissages.
Un exemple très proche de celui de Jamie : je souhaite utiliser le framework Jango (Python), mais avant d'y toucher je me fais une cure intensive de Python. Parce qu'avant de vouloir éviter de réinventer la roue, il me semble fortement sain d'apprendre à la créer ;-)

C'est toujours la même histoire : les enfants ne veulent pas apprendre leurs tables de multiplications, argumentant qu'on a inventé la calculatrice, alors pourquoi s'embêter ?
Sauf que, à force de ne plus jamais faire d'effort, on devient incapable d'en faire. Et cela me semble dramatique, d'autant que cette façon de penser touche les enfants qui deviendront  bientôt adultes...
À méditer...

Idiot-proofing is for Idiots by Jamie of 37signals

dimanche 7 octobre 2012

mardi 2 octobre 2012

Find your way...

Sois sûr que ton destin
À l'écart de d'État te maintiens ;
Lié à aucune bande,
Même les nobles de la terre,
Sous une toile d'or campant
Tu n'occupes nul emplacement,
Parce que plus chevaleresque qu'eux
À une guerre plus noble tu aspires ;
Ta trompette joue un air plus brillant.
La vie que j'aspire à vivre,
Nul homme ne me la propose,
Seules les promesses de mon cœur
Portent son blason.

H. D. Thoreau, Résister


dimanche 30 septembre 2012

La Dame du Lac


L'après adaptation...

Que faire lorsqu'un obstacle infranchissable se présente à soi ?
Une possibilité serait de l'esquiver, une autre de continuer de s'entraîner sur des obstacles moins difficiles pour progresser suffisamment et revenir enfin à cet obstacle pour le franchir. Une autre encore pourrait être de ne rien faire, de rester "au pied du mur".
Quoi qu'il arrive, il nous reste "la fuite", l'esquive, pour regagner sa liberté. S'adapter pour survivre en somme...

Mais que faire alors si l'obstacle nous encercle ? L'adaptation est-elle possible sans marge de manœuvre ? Lorsque l'obstacle nous engloutit ? L'adaptation a elle-même ses propres règles, et ses propres limites.
À ce point critique où la survie ne peut plus s'en remettre à l'adaptation, il faut changer de paradigme...

L'intégration, déconstruire l'édifice de soi pour "devenir" l'obstacle et le transcender.
L'être qui en ressort n'est plus une copie "améliorée", adaptée de l'original. C'est le retour à l'origine, qui n'a nul besoin d'adaptation.
Desapprendre c'est mourir pour renaître.
Mourir pour renaître, ou mourir pour de bon...



lundi 27 août 2012

Développement WordPress et compagnie...

Comme indiqué dans un précédent ticket, je suis actuellement en plein développement de sites web pour me refaire la main sur PHP/xHTML/CSS3/JavaScript et compagnie.
Pour le projet qui m'occupe aujourd'hui, j'ai choisi WordPress comme CMS de base à mes développements, par sa simplicité, sa flexibilité, la possibilité offerte à mon client de mettre à jour lui-même son site via l'interface de rédaction des articles...

Comme il est inutile de réinventer la roue carrée, je pars sur un starter theme "responsive", qui pourra s'adapter à tous types de périphériques d'affichage (PC, smartphone, tablette...).

Le plus gros du boulot consiste à développer une interface spécifique pour la création des articles de mon client à l'aide des custom post type de WordPress, et à créer un thème pour l'affichage des fiches produits à l'aide de custom fields.
Au sein de chaque fiche produit sera également intégré soit une gallerie soit un slideshow afin d'afficher les photos du produit en question.
Enfin, un slideshow sera certainement affiché en page d'accueil, et un widget de contact sera disponible dans la colonne droite de chaque page.

Here we go !

dimanche 26 août 2012

Enfin un blog (depuis le temps...)

Depuis que j'explore de part et d'autre le vaste domaine de l'informatique (une bonne dizaine d'années déjà...) j'ai souvent ressenti l'envie (sinon le besoin) de lancer un blog perso.
C'est super pratiquer un blog, ça permet de conserver des pense-bêtes quand on a passé 3 nuits blanches d'affilées à chercher la solution d'un problème (développement, configuration, bugs...). Les linuxiens et autres codeurs savent de quoi je parle ;)
Enfin bref, il aura quand même fallu ce malheureux épisode avec mon nouveau smarphone HTC One X pour me décider à me lancer.
C'est chose faite !

Je me remet actuellement au code, après un arrêt de plus de 2 ans, afin de concrétiser quelques projets un peu visionnaires dans le web (plus d'infos prochainement). Pour me refaire la main, j'ai choisi quelques projets de dev web :
  • deux sites vitrines sous wordpress (theming, xHTML CSS AJAX)
  • un site institutionnel pour l'organisation mondiale du Parkour (d'abord prévu pour l'an dernier, nous avions dû retarder son lancement).
    fifpk.org : la fin approche
    la fin approche :s
Par la suite, après avoir retrouvé mes marques (il paraît que c'est comme le vélo...), je me lancerai sur mon projet de web application(s) (le choix des langages, technologies, architectures, frameworks etc... restant à définir).

Bref, n'ayant pas vraiment le temps actuellement pour héberger mon propre blog wordpress (encore moins pour un coder un From Scratch™), et ayant passé ma nuit sur les blogs des dev Google, j'ai naturellement jeté mon dévolu sur la plateforme Blogger, pour sa simplicité, son intégration à l'écosystème Google® (burk, malgré l'implication de la firme de Mountain View dans l'OpenSource, c'est pas très "transparent" tout ça...).
logo blogger

Et voilà donc ce blog "Flobuz"s space", par manque total d'inspiration après ces 4 nuits blanches de suite... on fait, on fera mieux plus tard ;)

Pour les quelques âmes égarées qui passeraient sur ce blog, je m'oblige à écrire de vraies phrases avec des majuscules/virgules/points/COD/verbes... Bien qu'au fond cet espace soit quand même né d'un besoin parfaitement égocentrique, si jamais certaines infos peuvent s'avérer utiles à certains ça sera encore mieux :)

Allé, on retourne coder ce thème WordPress, ça va pas se faire tout seul...

HTC One X : à peine déballé et déjà le coup de la panne !

Cela faisait presque 2 ans que je n'avais pas changé de smartphone, et mon HTC Desire HD montrant quelques signes de faiblesses, j'ai jeté mon dévolu sur un HTC One X.
photo HTC One X
Il a quand même la classe, non ? ;)

Quelle drôle d'idée ! Cet appareil est connu pour de gros problèmes dans la gestion de la batterie (à sa sortie son autonomie était catastrophique), mais qu'à cela ne tienne, le modèle haut de gamme de HTC a subi une série de mises à jours ayant réglé ces soucis.
Commandé sur Amazon, j'ai reçu l'appareil hier matin, et après une petite journée de prise en main/configuration/mise à jour/charge... la bête était censée fonctionner.
C'était sans compter sur ma légendaire chance avec les appareil technologiques : aux alentours de 20h, le téléphone perd la connectivité et commence à afficher un problème de carte SIM non insérée. Sachant où ce genre d'histoire me mènerait, je prend une bonne inspiration et me prépare pour un marathon débug, afin de tenter d'éviter la case "retour Amazon ou SAV".
Après quelques recherches, je découvre que certains possesseurs du One X (HOX pour les intimes) on connu les mêmes déboires que moi : il s'agit d'un problème au niveau des contacts du lecteur de carte SIM.

Je me décide donc (26/08-2012 6:43) à renvoyer la bête à Amazon. Mais ayant déjà passé une journée à le configurer, je cherche un moyen de faire un backup du téléphone afin d'accélérer l'installation de mon prochain HOX.

N'étant pas très coutumier des smartphones sous ICS, je me penche sur la doc Android, et là bonne surprise : ICS inclut une option de backup. Il suffit d'installer le SDK et de saisir la commande magique :
adb backup -apk -shared -all -f htc-one-x/sauvegarde-htc-one-x.ab
L'installation du SDK ne pose pas de problème particulier, à part un comportement curieux d'Ubuntu concernant les droits d'accès au périphérique (udev). Une petite config de udev plus tard, me voilà fin prêt à saisir la commande magique.
Elle exporte toute la configuration, les applis etc du téléphone vers un fichier *.ab sur l'ordinateur.
Pour restaurer la bête, il existe la commande magique n°2 :
adb restore sauvegarde-htc-one-x.ab
En attendant, ayant dû découper ma SIM Free pour en faire une microSIM, je me retrouve sans téléphone pendant au moins 2 jours (ce qui est un peu embêtant quand même...).
Espérons que mon prochain HOX sera bien à la hauteur de la fiabilité légendaire des modèles haut de gamme de HTC...