Voici un petit soft que je vous propose de découvrir!
Gérer vos URL en ligne de commande
===============================
Marre d'avoir 300 onglets sous firefox qui mettent 3 plombes à se lancer et vous bouffent plein de ram.
Vous trouvez que les systèmes de marque page des navigateurs sont inutilisables?
Vous aimeriez un outil en ligne de commande rapide, souple et léger?
LinkManager répond à ce besoin!!
Vous pouvez ajouter/modifier/supprimer et surtout rechercher vos liens via votre prompt favori.
Afin de donner une expérience utilisateur satisfaisante, LinkManager utilise l'autocomplétion et la coloration syntaxique.
J'ai justement utilisé à cet effet la lib "clint" de Kenneth Reitz.
Etant légèrement insuffisante au niveau des couleur de fond, je l'ai forké ^^.
Malgré l'accroche "aguichante" et volontairement "présomptueuse", ce projet ne se prend pas au sérieux et n'a aucune prétention de changer le monde ni les habitudes... juste de proposer une alternative "simple".
Il part de plusieurs principes :
* Un programme sert à une seul chose (philosophie Unix)...
* Dev un soft minimaliste mais "propre" et "maintenable" plutôt que de se lancer dans un projet trop gros qui n'aboutira jamais. (et dont des parties risques d'être forcément impropre)
* Un outil avant tout en ligne de commande plutôt qu'utilisant une GUI obèse.
* Un soft "déconnecté" : même si l'objectif étant de sauvegarder des URL, la base est consultable off-line.
Pas de service de "cloud" foireux ni de latence lié au web.
* Extreme programming : j'ai d'abord créé l'API puis j'ai codé les tests en même temps que les fonctionnalités.
Enfin, l'ensemble du code "critique" est couvert par des tests ou presque.(couverture de code)
* DRY, KISS et autres acronymes sympa.
La recherche
------------
LinkManager est orienté recherche!
Le but est bien de retrouver le super lien qu'on avait archivé y'a 6 mois, qu'on veut absolument retrouver... et qui n'est pas facilement googeulable.
Pour cela, l'addition d'un lien donne la possibilité d'ajouter des tags (une liste de mots clés), une description et la pertinence. (valeur de 1 à 10)
Ce dernier point est essentiel : plus la pertinence est élevé et plus le lien sera susceptible d’apparaître en tête de liste.
Version Bétâ:
-------------
Cette version est en bétâ! Je préfère prévenir ^^!
Même si j'ai mis en place des tests unitaires etc, je ne garanti pas un soft sans bugs ni perte de données.
Donc prudence quant à une utilisation intensive sans sauvegarde.
Pour faciliter les choses, j'ai mis en place un script de flush (suppression de l'intégralité de la base), de "load" (récupération sous format json) et d'un dump (sérialisation de la base en un format json).
Pour l'occasion, j'ai créé un fichier d'exemple :
linkm load fixture_example.json
Pour sauvegarder sa base :
linkm dump >| snapshot_1.json
Enfin, le soft devrait rapidement sortir une version 1.0 si il y a un réel intérêt derrière.
Sous le capot
-------------
* python 3 et pas mal de dépendances juste incontournable de l'éco-système python.
* gettext
* la base de donnée redis
* pytest : pour des tests unitaires sans prise de tête
* un manpage (man linkmanager)
License
-------
BSD : pas vraiment de grande réflexion autours de ça.
On peut contribuer/forker sans prise de tête... c'est q'un passe temps donc no stress.
Le nom
------
Vraiment pas terrible... URLManager aurait sans doute été mieux.
Si il y a des suggestions, je suis preneur.
Tâches Cron/Anacron
-------------------
Vous désirez garder une trace de votre base de donnée et la sauvegarder régulièrement?
Il est bien évidement possible d'utiliser la périodicité sous linux.
Perso, je lance ceci en "daily" via anacron: (en user mode)
linkm dump >| /home/myuser/backup/linkmanager/$(date +"%d_backup.json")
Par la suite, je pense créer une variable de config dans les settings du fichier.
Pour les éventuels traducteurs
------------------------------
J'ai évidement attribué à chaque chaîne de caractère de pouvoir être traduite... en utilisant gettext.
Pour simplifier la traduction, j'ai pompé allègrement (mais adapté quand même) les merveilleux outils du projet Django.
Du coup, en ce mettant à la racine, un
./makemessages
parcourera le projet afin d'y chercher de nouvelles chaines de caractères à traduire.
et un
./compilemessages
compilera les fameuses chaines traduites.
Si on veut les 2 en 1:
invoke trans
Pour les empaqueteurs
---------------------
Paquet sur Pypi
~~~~~~~~~~~~~~~
Normalement, un simple
sudo pip3 install linkmanager
devrait suffire
Paquet PPA
~~~~~~~~~~
J'ai commencé l'empaquetage mais je boque sur pas mal de soucis de dépendances.
Je m'y repencherais volontier si le soft succite de l'intérêt.
(
https://launchpad.net/~jerem-ferry/+archive/linkmanager)
Pour les développeurs
-----------------------------
Ce projet n'est pour l'instant qu'un passe-temps comme un autre.
Il m'a permis de jouer avec du NoSQL en dehors d'un projet professionnel.
Il est tourné vers l'avenir... et l'avenir c'est python3.
Perso, j'utilise python3.3 dans mon virtualenv
mkvirtualenv -p /usr/bin/python3 linkmanager
La rétro-compatibilité vers python 2 est normalement assuré (je ne pense m'y attarder que si il y a une vrai demande)... ce n'est cependant pas ma priorité et j'invites tous les éventuels contributeur à passer sous python 3 pour éviter les soucis vicieux d'encodage ou autre.
Ma 1ère version n'utilise que la base de donnée Redis (très minimaliste mais super performante, elle nécessite de bien réfléchir à la structure des données) mais il est prévu d'avance de pouvoir rajouter le support d'autres bases... et ça risque d'être aisé 😉
Merci à python pour le Duck typing!
Ma future priorité : MongoDB.
Dès son support, j’inclurais un script de bench : j'ai envie de voir si la différence avec Redis est frappante et à partir de combien d'entrées elle devient significative.
Ensuite, pourquoi pas tester elasticsearch...
https://github.com/mothsART/linkmanager
Tests unitaires
---------------
Attention : avant de lancer cette procédure de test, assurez-vous que vous n'avez pas de données sensibles sur vos bases redis!
Si oui, assurez-vous de sélectionnez une base vierge via le fichier settings.py : variable "TEST_DB_NB"
(C'est d'ailleurs étonnant que redis ne prévoit rien à cet effet...)
Pour lancer la couverture de test, il suffit de lancer
invoke test
et si on veut lancer un fichier de test en particulier :
python -m pytest linkmanager/tests/db.py
Evolution possible
------------------
* recherche interactive (avec du ncurses)
* autres facteurs de recherche tel que la date d'enregistrement/date de mise à jour/auteur.
* Contenu en cache :
Suis-je le seul à pester lorsque je désire re-visiter un lien et que ce dernier n'existe plus? quel désarroi!
Et bien, LinkManager pourrais combler ce déficit en proposant la mise en cache du fameux lien.
Si le lien n'existe plus, il est consultable sur le cache...
Il serait également possible de comparer le lien en cache avec le site actuel : ce diff permettra de voir rapidement quels sont les éléments qui ont changés depuis!
Et pourquoi pas proposer un mini-serveur web lancé en localhost pour parcourir ces contenus.
Naviguer en non connecté en somme.
* un load à partir d'une url : linkm load
http://monsite.fr/linkm.json
* une extension firefox/chrome/autre browser pour rajouter des fonctionnalités
* une connexion avec Evernote (ou un autre service de cloud)
* fichier de log d'utilisation : possibilité d'avoir des stats, d'améliorer la recherche etc.
Je regorge d'autres idées... mais pour le cela, il faut s'en donner les moyens.
Pour l'instant, ce soft ne sert que mes propres besoins mais je suis ouvert à des propositions!