PROJET AUTOBLOG


Le Blog de Genma

source: Le Blog de Genma

⇐ retour index

Lifehacking - Wallabag, Liseuse et fainéantise : mon projet. Billet N°1

jeudi 1 janvier 1970 à 01:00

Suite mon billet Le combo gagnant pour optimiser sa veille, j'évoquais le fait que Wallabag va récupérer le contenu texte, enlève tout le superflu et propose, entre autre, comme fonctionnalité, le fait d'exporter l'ensemble des billets non lu sous la forme d'un epub. Cet Epub, je le dépose sur ma liseuse Bookeen. Et quand je suis dans les transports en commun, je lis cet epub. Je lis donc les billets récupérés via mon fil RSS, que j'avais identifié comme étant à lire, mais plus tard.

Mon projet

Actuellement, je dois cliquer sur le bouton exporter, enregistrer l'epub, brancher la liseuse, copier l'epub sur la liseuse... Mon projet final est de pouvoir brancher ma liseuse en USB et qu'automatiquement, ça aille télécharger l'epub dans Wallabag, le copie sur la liseuse. Car oui je suis fainéant et j'aime bien passer du temps pour en gagner ensuite :).

Ce qu'il faudrait faire

Avec une règle Udev, au branchement de la liseuse en USB et à la détection de cette dernière, il faudrait qu'un script se lance. Ce script aurait pour tâches les actions suivantes :
- se connecter à Wallabag
- lancer l'export de l'epub
- mettre en "lu" dans Wallabag les entrées récupérées dans l'epub
- renomer le fichier epub avec la date (par défaut il s'appelle unread.epub)
- copier l'epub sur la liseuse
- démonter proprement la liseuse

Ce qu'il est possible de faire

Pour Wallabag, quand on est connecté et qu'on a le navigateur ouvert, une url du type
- https://wallabag.mondomaine.org/export/unread.epub permet l'export des nons lus sous la forme d'un epub
- https://wallabag.mondomaine.org/export/unread.pdf permet l'export des nons lus sous la forme d'un pdf

La règle Udev est simple à faire. La liseuse est reconnue comme une clef USB (pour son stockage interne), une fois qu'on a l'epub, on peut le copier dans le dossier qui va bien. Je présenterai donc dans un prochain billet les étapes :
- renommer le fichier epub avec la date (par défaut il s'appelle unread.epub)
- copier l'epub sur la liseuse
- démonter proprement la liseuse

Les soucis rencontrés et état des lieux de mon investigation

Je ne veux pas avoir à lancer de navigateur, à me connecter etc. Wallabag est sur une instance Yunohost gérée par un SSO. Le SSO de Yunohost ne permet pas encore de se connecter via curl par exemple.

Wallabag stocke un utilisateur et un mot de passe qu'on pourrait utiliser (si on passe par l'URL https://wallabag.mondomaine.org/ on arrive directement sur l'interface de connexion à Wallabag et on outrepasse le SSO) mais le mot de passe est générée aléatoirement à l'installation de Wallabag par Yunohost, il est stocké chiffré et salé en base de données (bonne pratique). Donc on ne peut pas utiliser ce mode de connexion.

Il est possible de créer une application et d'avoir un token de session. Je vous renvoie à la documentation technique de Wallabag (Creating a new API client). J'ai essayé, ça marche en ligne de commande.

Soucis, dans les méthodes de l'API (http://doc.wallabag.org/en/master/developer/api.html#other-methods), je ne vois pas d'export en epub ou pdf de possible.

Il faut que je regarde si c'est prévu / une fonctionnalité à venir, faisable... Du coup j'en ai fait la demande sur Github.

Ce que je fais déjà

Rédiger cet article de présentation et l'étude que je présence ci-dessus ? ;-)
J'approfondis mon analyse via les messages que je trouve sur le forum de Yunohost

Vous pouvez aider

Vous pouvez aider en contribuant à ce projet en laissant des idées ou pistes en commentaire. Merci d'avance. J'ai pensé par exemple à passer par un navigateur sans interface graphique (une version plus évoluée/moderne de curl par exemple). Ou trouver comment avoir le mot de passe du user qu'utilise Yunohost pour se connecter à Wallabag (non ce n'est pas le mot de passe de l'utilisateur qu'on a, cf ma remarque : un mot de passe est générée aléatoirement à l'installation de Wallabag par Yunohost).

La suite ?

La suite, c'est par ici : Lifehacking - Wallabag, Liseuse et fainéantise : mon projet. Billet N°2

Yunohost - Astuces pour se créer une instance de test ou demo

jeudi 1 janvier 1970 à 01:00

Remarques :
- Je suppose que vous connaissez Virtualbox, Debian et l'installation de Yunohost
- Les astuces sont valables indépendamment du contexte lié à la virtualisation.

Dans ce billet je parle d'une façon de faire et de quelques astuces non spécifiques à Yunohost. Il faut savoir que le projet Yunohoste fournit de VRAIES machines de test/développement ici
ynh-dev, a yunohost dev env qui seront plus à même d'être un environnement de test / de démo.

Contexte

J'aimerai avoir une instance de Yunohost qui me permette :
- de faire des démonstrations, avec des données bidons et non personnelles (et donc ne surtout pas faire des démonstrations sur mon cloud personnel), sur laquelle je peux installer des applications si besoin ;
- à côté de ça je suis actuellement en train de tester le packaging d'applications pour Yunohost.

Choix de Virtualbox

Yunohost propose des environnements de développement (comme Vagrant par exemple). J'ai fait le choix de crééer une machine virtuelle sur Virtualbox, j'y ai installé Debian puis ai installé Yunohost en suivant la procédure standard.

Les avantages que j'ai à utiliser Virtualbox :
- Les snaphshots : Comme j'utilise Virtualbox, je pense à faire régulièrement des snaphshots, pour lesquels j'indique un état de mon instance, ce que j'ai fait etc. C'est une sorte de sauvegarde. Ainsi, je peux revenir à un état antérieur si j'ai tout cassé, fait une fausse manip ou autre.
- Les clones : Comme j'utilise Virtualbox, je peux cloner ma machine virtuelle pour avoir un double et faire des manips/des tests ou autre.

Quelques astuces

- Nom d'utilisateur : En installant Debian, j'ai crée un utilisateur par défaut, genma, pour la gestion "de l'administration" (via sudo). Dans Yunohost, il me demande de créer un utilisateur. Je choisis Genma.
Soucis : il existe déjà (vu qu'il a déjà été créé à l'installation de Debian)
Solution : je crée donc un utilisateur Demo dans et pour Yunohost.
- Redirection de ports Dans la configuration de la machine Virtualbox, le réseau en NAT et j'ai indiqué trois règles de redirections de ports. A savoir le port 80 (http), 443 (https) et 22 (SSH) de localhost vers la machine virtuelle. Ainsi je n'ai pas à me préoccuper de l'IP de la machine virtuelle. Je fais tout via "localhost" (cf mon exemple de demo.com qui renvoie vers 127.0.0.1 soit localhost)
- Nom de domaine bidon pour des tests
Soucis : il faut forcément un nom de domaine (ou on peut en avoir un en nohost.me) à l'installation de Yunohost.
Solution : installer YunoHost en utilisant un nom de domaine bidon du genre : demo.com
On ajoute donc dans le fichier /etc/host (C :\Windows\System32\Drivers\hosts dans le cas de Windows) une ligne du type

127.0.0.1 demo.com

Et on indiquera demo.com comme nom de domaine à l'installation de Yunohost en test/recette/demo. On accédera à son yunohost via https://demo.com/yunohost/sso ou https://demo.com/yunohost/admin/ Pratique aussi pour tester hors réseau / sans accès à Internet, pour faire des démos par exemple.

Attention cette astuce ne marche pas forcément si le système passe par la résolution DNS AVANT d'utiliser les lignes du fichier /etc/host. En tout cas sous Windows 7, ça marche.

Lifehacking - Youtube et vidéos hors ligne Billet N°1

jeudi 1 janvier 1970 à 01:00

Ce billet fait suite à mon billet sur Youtube et les RSS (Comment suivre une chaîne YouTube sans abonnement / compte ?). Habitant en région parisienne et ayant pas mal de transport en commun journalier, j'utilise ce temps pour lire (merci la liseuse Booken), écouter des podcasts (cf mes critiques), ou regarder des vidéos sur mon smartphone.

Les vidéos - Youtube - Mon projet

Pour les vidéos Youtube il peut être intéressant de les regarder en mode "hors ligne", depuis mon smartphone avec le minimum de manipulation (principe du lifehacking et de l'automatisation).

Avant de me lancer, je pense que je vais regarder ce qui existe, en particulier sous Github. Je pense que je reprendrais des briques existantes et adapterait ça au cahier des charges suivant (Qui a pour but de ne pas aller trop loin et faire trop compliquer dès le début)

Sur mon serveur perso,
- Dans mon agrégateur RSS, FreshRSS, je m'abonne à à un certain nombre de flux. (c'est déjà le cas). J'ai donc déjà l'automatisation de la récupération des liens vers les vidéos.
- Un script se connecte à FreshRSS, utilise Youtube-dl pour récupèrer les vidéos et met à jour le flux (il y a une API à FreshRSS, ça doit se faire. A étudier)
- Une fois les vidéos récupérées, si besoin le script convertit les vidéos via ffmpeg (ou alors je les récupère en format "light" dès le début, à voir)
- Les vidéos sont stockées dans un dossier temporaire
- Une règle Udev fait que, je branche mon téléphone sur le serveur en USB (il a des prises), ça monte automatiquement mon téléphone (la carte SD), ça copie les fichiers vidéos, vérifie si besoin la copie (un simple MD5)
- Une fois la copie finie, ça débranche le téléphone (éjection de l'USB)
- Et comme je suis chez Freemobile, ça m'envoie un SMS qui me dit que c'est bon, je peux récupérer le téléphone.

Ce qui marche déjà : la règle UDev, l'envoi du SMS en fin de script. J'ai déjà fait un P.O.C (Proof Of Concept)

Ce qui reste à faire : le reste :)

Ce que je pourrais faire mais ça complique : ne supprimer les vidéos du dossier du serveur qu'une fois qu'elles sont lues (les conserver permet d'avoir une sauvegarde d'une certaine façon, au cas où je supprime les vidéos du smartphone par erreur par exemple).

Numok à Paris - Mes conférences en médiathèque

jeudi 1 janvier 1970 à 01:00

Comme l'année dernière, je participerai au festival Numok, festival numérique de la ville de Paris.

Le but est d'aller à la rencontre du grand public pour présenter cette initiative, ses enjeux etc. Et de faire un bilan encore meilleur que celui de l'année dernière déjà fort enthousiaste

Numok - Festival numérique des bibliothèques

Organisée par les bibliothèques de la Ville de Paris, la 1ère édition du festival Numok met en avant le numérique comme lieu de partage, de jeu et de découverte. Du 15 au 30 octobre, une riche programmation est proposée gratuitement à tous les publics, avertis ou totalement novices, petits ou grands.

Les conférences que je vais donner

Cette année, il y aura plusieurs interventions autour d'un seul et même thème, la présentation du projet "Degooglisons Internet" initié par Framasoft. J'interviendrais en mon nom propre (et pas en celui de Framasoft). Voici donc la liste des dates, noms des médiathèques et lieux auxquels je saurai :
- Samedi 08 octobre 2016 à 15h, à la Bibliothèque Valeyre au 24, rue de Rochechouart, Paris 9ème
- Vendredi 21 octobre 2016 à 19h, à la Médiathèque de la Canopée, au 10 passage de la Canopée, Paris 1er (Chatelet)
- Samedi 22 octobre 2016 à 14h, à la Bibliothèque Italie, 213 Boulevard Vincent Auriol, Paris 13 ème
- Vendredi 28 octobre 2016 à 19h, à la Médiathèque Jean-Pierre Melville, Métro Olympiades, Paris 13ème
- Samedi 29 octobre 2016, à la Bibliothèque André Malraux au 112 rue de Rennes, Paris 6ème

Et comme l'année dernière, je parlerai Hygiène numérique
- Samedi 15 octobre 2016, à la Médiathèque Marguerite Yourcenar au 41, rue d'Alleray Paris 15ème
- Jeudi 20 octobre 2016, à la Bibliothèque Germaine Tillion au 6, rue du Commandant Schlœsing Paris 16ème

Lifehacking - Wallabag, Liseuse et fainéantise : mon projet. Billet N°2

jeudi 1 janvier 1970 à 01:00

Ce billet fait suite à mon billet Lifehacking - Wallabag, Liseuse et fainéantise : mon projet. Billet N°1

Dans les commentaires on me signalait l'existence du billet Wallabag sur votre Kobo en un clic. Wallabag sur votre Kobo en un clicLe billet propose deux approches différentes : une via Calibre et l'autre via Wallabag et c'est de la 2ème dont je reprends le code que je me suis inspiré. Je suis donc allé voir ça et j'ai trouvé une partie de la résolution à mon problème, ce qui m'a permis d'avancer mon projet.

Via Twitter on me signale une applicatiion qui permettrait de lire le contenu d'une instance Wallabag 2 sur sa Pocketbook Touch Lux. C'est du C++, je ne connais pas ce langage. Je vous invite tout de même à y jeter un coup d'oeil.

Cas de l'utilisateur utilisé

Comme je le disais dans mon billet, je ne peux (pas encore) utiliser l'API de Wallabag ni l'utilisateur de Yunohost.

Pour l'instant, je crée donc un utilisateur dédié dans Wallabag (et je ne passe donc pas par l'identifiant générique de Yunohost)
- Avantages : c'est générique et marche pour toute instance de Wallabag autohebergé.
- Inconvénients : ça ne marche pas (pas encore) avec l'utilisateur de Yunohost. Il faut créer un autre utilisateur dans Wallabag. Et donc recommencer à marquer des articles à lire sous ce nouvel utilisateur.

La machine

J'ai une machine autohébergée qui a un port USB facilement accessible (pratique avec une rallonge de câble USB). Mon objectif final est de brancher ma liseuse sur le serveur, qu'elle soit détectée et que l'Epub contenant les articles non lus de Wallabag soit téléchargé et copié sur la liseuse Booken.

Les scripts

Ces scripts sont mis sur la machine sur laquelle on branche la liseuse en USB. Dans mon cas, c'est mon serveur, mais ça peut être son PC sous Linux, ça marchera aussi.

Il y a donc un script RecupEpubDeWallabag.sh qui sera lancé avec la règle udev (ce sera dans lebillet n°3 à venir)
Lui même appel le script Wallabag_Epub_to_Booken.py disponible ici https://framagit.org/genma/Wallabag_Epub_to_Booken/blob/master/Wallabag_Epub_to_Booken.py

#!/usr/bin/env python2
# -*- coding: utf-8 -*-

import cookielib
import mechanize
import configparser
import time

# Lecture du fichier de param pour les codes
config = configparser.ConfigParser()
config.read('Config.ini')
configWallabag = config['WALLABAG']
LOGIN = configWallabag['LOGIN']
PASSWORD = configWallabag['PASSWORD']
WALLABAG_URL = configWallabag['WALLABAG_URL']
WALLABAG_EPUB_URL = configWallabag['WALLABAG_EPUB_URL']

# Date & time
now = time.localtime(time.time())

# Browser
br = mechanize.Browser()

# Enable cookie support for urllib2
cookiejar = cookielib.LWPCookieJar()
br.set_cookiejar(cookiejar)

# Browser options
br.set_handle_equiv(True)
br.set_handle_redirect(True)
br.set_handle_referer(True)
br.set_handle_robots(False)
br.set_handle_refresh(mechanize._http.HTTPRefreshProcessor(), max_time=1)
br.addheaders = [('User-agent', 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1) Gecko/2008071615 Fedora/3.0.1-1.fc9 Firefox/3.0.1')]

# authenticate
print (str(time.strftime("%d-%m-%y %H:%M:%S", now)) + " Lancement du script")
br.open(WALLABAG_URL)
br.select_form(name="loginform")
br['_username'] = LOGIN
br['_password'] = PASSWORD
br.submit()
print (str(time.strftime("%d-%m-%y %H:%M:%S", now)) + " Tentative de connexion à Wallabag")
url = br.open(WALLABAG_URL)
print (str(time.strftime("%d-%m-%y %H:%M:%S", now)) + " Connexion à Wallabag réussie")
# TODO timeout value has to be optimized
url2 = br.open(WALLABAG_EPUB_URL, timeout=300.0)
print (str(time.strftime("%d-%m-%y %H:%M:%S", now)) +" Lancement de l'export de l'Epub")
now = time.localtime(time.time())
EpubFileName = "Wallabag_export_" + str(time.strftime("%d%m%y", now)) + ".epub"
with open(EpubFileName, 'w') as newsfobj:
newsfobj.write(url2.read())
print (str(time.strftime("%d-%m-%y %H:%M:%S", now)) + " Epub généné & récupéré sous le nom " + EpubFileName)

C'est un premier jet, je ne connais pas bien le Python et il y a encore des choses à optimiser / améliorer.

A optimiser

- Mettre en "lu" dans Wallabag les entrées récupérées dans l'epub
- Optimiser le temps de timeout. A voir selon le nombre d'articles & le temps de connexion. J'ai mis un timeout à 3 minutes, mais je rencontre encore des soucis de temps de connexion (le temps de génération de l'epub est assez long)
- Ajouter des "vraies" logs pour suivre la progression
- Envoyer un mail ou un SMS (utilisateur Freemobile) une fois la copie terminée
- Ajouter la gestion des dépendances python
- Ajouter des tests unitaires...
- ...

Je pense que toutes ces évolutions, ce sera pour au moins le billet N°4 et suivant, le N°3 sera consacré à la règle UDev (Le principe : le noyau linux détecte un périphérique USB lors de son branchement, lit son numéro de série et lance alors une commande / un script définie comme règle udev.)