pyAggr3g470r – EPUB

pyAggr3g470R-epub-1

Il est maintenant possible d’exporter un article avec pyAggr3g470r au format EPUB afin de le lire sur son lecteur d’ebooks. L’export est automatique. Il sera aussi possible d’exporter les articles d’un flux (blog) ou tous les articles de la base SQLite avec une table des matières.

pyAggr3g470R-epub-2

Au final on peut maintenant exporter la base au format RSS, epub, texte brut, HTML et pour DokuWiki.

Un script rss-to-epub serait peut être pratique.

Sacrée surprise!

Venant enfin de me décider à ré-installer Tux Droid avec mes petits scripts pour Kmail (cette fois avec les drivers libres car Kysoh a certains problèmes…) je viens de découvrir ceci. Autant dire que ça ma fait drôle (surtout que c’était chez moi). En même temps ça fait un peu plaisir.

Il y a maintenant plusieurs articles qui utilisent des photos que j’ai mis en ligne. Celui de Woustviller, de l’abbatiale Saint Nabord et peut-être d’autres. Elles ne sont pas vraiment de qualité. Ce sont des photos illustrant des articles sur des sujets “peu connus” pour lesquels il manque de photos libres. Pour l’humanité Il est important de mettre vos photos sous licence libre. Et tout le reste ;-)

Voilà une bonne petite surprise ce soir.

Calibre

calibre-3

Si vous disposez d’un Kindle (ou même Android) voilà une application sympa: Calibre. Ça fait quelques temps que je voulais tester, maintenant c’est fait.

calibre-1 calibre-2

L’application est bien faite. Comme on peut le voir la détection avec le lecteur est automatique. De nombreux lecteurs sont supportés. Tellico devrait aussi pouvoir synchroniser aussi facilement avec un Kindle, Android ou autre (ou un partage de données entre Tellico et Calibre). Il est aussi possible de faire des conversions.

Dans ce billet j’aurai voulu donner un lien intéressant pour installer un système libre sur Kindle (et pouvoir lire des epub). Malheureusement comme je ne l’ai pas enregistré avec mes liens delicious je n’arrive plus à le retrouver. Dommage car c’était plutôt intéressant (ça m’embête). Donc si vous avez des techniques pour lire des epub sur un Kindle (quelconques, mais de préférence sans transformer un epub en pdf…) vous pouvez les poster. Ça peut être utile à des personnes. Je pense à Vincent là. C’est quand même étrange qu’un lecteur comme le Kindle qui paraît plutôt bon, ne lise pas d’epub (même DRM-isé).

pyAggr3g470r – Évolutions de l’interface

pyAggr3g470r - Main Page

Comme il est possible de le constater (je l’espère), les dernières modifications apportés à pyAggr3g470r visaient à obtenir une interface un peu plus sympa (sans faire de trop). Le code HTML a aussi été retravaillé un peu, ainsi que le CSS. J’utilise certaines nouveautés d’HTML5 (voir ce billet) qui pour le moment ne fonctionnent correctement uniquement avec Opera (à ma connaissance).

Il y a également des améliorations plus techniques, mais mineures. De plus la base d’articles peut maintenant être exporté sous 4 formats: HTML, texte brut, RSS et pour DokuWiki. La nouveauté est l’export RSS.

Aussi il est maintenant possible de lire un aperçu de l’article avant de décider d’afficher tout le contenu. Ceci via un petit CSS. Voyez l’effet ci-dessous.

pyAggr3g470r - ToolTips

Plus de captures.

HTML5 et les balises input

HTML5 input URL

HTML5 c’est vraiment bien. J’ai une utilisation vraiment basique du langage HTML, cependant j’essaye toujours d’avoir un code moderne et respectueux des standards. Dans mon bon livre, je viens de voir les nouvelles balises input d’HTML5. Et qu’est-ce que c’est bien fait! Il y a maintenant une balise input de type URL qui permet de vérifier si la donnée saisie est au bon format (de même pour les adresses e-mail). Si le format est incorrect le formulaire n’est pas soumis. Cette expression régulière est maintenant inutile (je la conserve tout de même).

J’aime bien car ça permet de traiter des bugs plus tôt (avant même que le formulaire ne sois envoyé, sans java script) et il suffit d’insérer une petite balise.

Un autre exemple avec la balise input de type number qui vient de me faire économiser quelques lignes de codes.

HTML5 input number

Pour finir, la balise input de type month:

HTML5 input month

Une ligne de code.


Mise à jour
Par un heureux hasard je viens de tomber sur ce billet qui parle de la validation des formulaires. Il est possible de placer des expressions régulières dans ces nouvelles balises: input type=’email’ required pattern=’.*@company\.com’.

Test de reposurgeon

Je viens de tester un peu le nouveau projet reposurgeon. reposurgeon permet de réaliser des opérations risquées non possibles avec les systèmes de versionnement. Ce qui est génial c’est que reposurgeon gère de manière totalement transparente Git, Mercurial, bzr et normalement les autres DVCS (disposant de fast-export et de fast-import). Le projet est tout nouveau et il faut un peu regarder son code pour comprendre. Dans ce billet nous allons:

  • charger un dépôt quelconque;
  • lister les révisions;
  • faire des recherches;
  • éditer les commentaires, dates, etc.
  • supprimer des commits.

Pour Git il n’y a pas de problèmes car fast-export est inclus de base. Si vous voulez tester avec Mercurial il vous faudra simplement le plug-in hg-fast-export.

Avant de tester réglons ce petit problème pour Mercurial:

  • récupérez le plug-in fast-export: git clone git://repo.or.cz/fast-export.git;
  • dans le dossier fast-export nous avons uniquement besoin du fichier hg-fast-export.py et du fichier h2git.py. Copions les donc dans le dossier de reposurgeon.
  • à la ligne 93 de reposurgeon il faut renseigner correctement l’adresse du fichier hg-fast-export.py.

Pour vous simplifier la vie vous pouvez aussi renseigner dans votre terminal la variable $EDITOR avec un éditeur de votre choix. Pourquoi pas vi (ou vim). Je ne vais pas le faire. Il faudra donc l’indiquer à reposurgeon le moment venu.

Voilà nous allons maintenant jouer avec ce super outil avec le dépôt de pyAggr3g470r.

/reposurgeon-0.5$ ./reposurgeon 
reposurgeon% read pyaggr3g470r
reposurgeon: found hg repository
master: Exporting full revision 1/195 with 6/0/0 added/changed/removed files
master: Exporting simple delta revision 2/195 with 0/2/0 added/changed/removed files
master: Exporting simple delta revision 3/195 with 0/1/0 added/changed/removed files
master: Exporting simple delta revision 4/195 with 0/2/0 added/changed/removed files
master: Exporting simple delta revision 5/195 with 0/2/0 added/changed/removed files
master: Exporting simple delta revision 6/195 with 0/2/0 added/changed/removed files
.
.
.
master: Exporting simple delta revision 189/195 with 0/2/0 added/changed/removed files
master: Exporting simple delta revision 190/195 with 0/1/0 added/changed/removed files
master: Exporting thorough delta revision 191/195 with 0/3/0 added/changed/removed files
master: Exporting simple delta revision 192/195 with 0/4/0 added/changed/removed files
master: Exporting simple delta revision 193/195 with 0/1/0 added/changed/removed files
master: Exporting simple delta revision 194/195 with 0/2/0 added/changed/removed files
master: Exporting simple delta revision 195/195 with 0/2/0 added/changed/removed files
Issued 195 commands
2010-11-10T22:49:28 * pyaggr3g470r

reposurgeon% stats
Repository 'pyaggr3g470r' was read at 2010-11-10T22:49:28
Loaded from pyaggr3g470r
37K, 195 commands, 0 blobs, 195 commits, 0 tags, 0 resets, 195 marks.
Subdirectory: .hg
    Exporter: /home/cedric/telechargement/reposurgeon-0.5/hg-fast-export.py --marks /dev/null --mapping /dev/null --heads /dev/null --status /dev/null --repo .
Export-Style: ('nl-after-commit', 'nl-after-commit', 'export-progress')
 Initializer: hg init
    Importer: hg fastimport %(tempfile)s
    Checkout: hg checkout

reposurgeon% edit :194
reposurgeon: you have not specified an editor and $EDITOR is not set
reposurgeon% edit :194 vim   (entrée en mode édition)
reposurgeon: no events modified.

reposurgeon% list /improvement/
     9 2010-01-31T21:48:09 Added : description of articles. Some improvements.                                                                                                      
    11 2010-02-01T09:26:08 Added comments. Some improvements.                                                                                                                       
    12 2010-02-01T12:44:22 Added a menu to access more faster to feeds and some improvements of the CSS.                                                                            
    13 2010-02-01T22:05:06 Release 0.4. The main page display only 10 articles by feeds. For each feeds a page present the list of all articles. The SQLite base is smaller than bef
    26 2010-02-09T22:11:56 Little improvement (Possibility to mark all articles as read only by feeds.)                                                                             
    33 2010-02-23T08:15:08 Minor improvements.                                                                                                                                      
    36 2010-02-24T09:08:06 Added utils.py and lot of improvements.                                                                                                                  
    53 2010-03-04T21:48:35 Minor improvement. Faster display of description page.                                                                                                   
    68 2010-03-23T14:55:55 Minor improvements for the e-mail notification.                                                                                                          
    69 2010-03-23T18:54:46 Release 1.0. Mail notification. A lot of improvements and some bug fix.                                                                                  
    70 2010-03-24T09:29:39 Mail notifications are sent through a new thread. Some improvements.                                                                                     
    77 2010-03-26T08:22:06 Some improvements and one bug fix.                                                                                                                       
    84 2010-04-16T10:49:25 Minor CSS improvements.                                                                                                                                  
    85 2010-04-16T11:25:00 Minor improvement.                                                                                                                                       
    88 2010-04-28T08:11:19 Added tag cloud. Some improvements.                                                                                                                      
    91 2010-04-29T09:08:26 Minor bug fix and some improvements.                                                                                                                     
    93 2010-04-29T09:29:34 Release 1.2. Added tag cloud, minor bug fix, CSS improvements.                                                                                           
   103 2010-06-10T09:12:54 Remove a feed from the file feed.lst. Some improvements.                                                                                                 
   111 2010-07-02T15:46:29 SQLite improvements.                                                                                                                                     
   122 2010-07-06T09:54:43 Regular expression improvement.                                                                                                                          
   124 2010-07-07T11:40:31 Lot of performance improvements                                                                                                                          
   127 2010-07-08T13:24:07 Release 1.6. It is now possible to automatically add a feed (with the URL of the site), delete an article,delete a feed with all its articles and to dele
   133 2010-07-23T12:28:12 Minor improvement when a URL is too long for the QR Code generation.                                                                                     
   136 2010-07-30T08:12:45 Code improvement. 'pylint --max-line-length=200 pyAggr3g470r.py = 8.41/10'                                                                               
   137 2010-08-25T07:00:56 Configuration file improvement (no need to set the path in the configuration file).                                                                      
   149 2010-09-06T19:07:35 Minor improvement of the page of unread articles.                                                                                                        
   150 2010-09-06T19:12:11 And an other minor improvement...                                                                                                                        
   187 2010-10-25T17:16:15 Release 2.1. Better export of articles in HTML format. Lot of improvements. New wiki.                                                                    
   193 2010-11-04T21:43:42 Major improvement of the performance (concerning the management page).                                                                                   
reposurgeon% 

reposurgeon% delete =t & 133..:195
reposurgeon: garbled type mask at 't & 133..:195'

reposurgeon% expunge 195
reposurgeon: at 195, deleting pyAggr3g470r.py
reposurgeon: at 195, deleting utils.py
reposurgeon: deleting blobs and empty commits [195]

reposurgeon% list *master
   193 2010-11-04T21:43:42 Major improvement of the performance (concerning the management page).                                                                                   
   194 2010-11-04T22:24:05 Improvement of the performance (concerning the load of articles from data base in memory).                                                               
reposurgeon% 

reposurgeon% edit :194 vim (édition)
reposurgeon: modified events are [194].

reposurgeon% list 194..194
   194 2010-11-04T22:24:05 reposurgeon rocks! 

Et voilà. Voyez comme cet outil est simple d’utilisation et vraiment pratique! Je viens de modifier un ancien commentaire. J’aurais très bien pu modifier la date ou le nom de la personne ayant commité.Testons sur un dépôt Git:

/reposurgeon-0.5$ git clone git://gitorious.org/forban/forban.git
Initialized empty Git repository in /home/cedric/telechargement/reposurgeon-0.5/forban/.git/
remote: Counting objects: 941, done.
remote: Compressing objects: 100% (890/890), done.
remote: Total 941 (delta 476), reused 148 (delta 3)
Receiving objects: 100% (941/941), 608.67 KiB | 24 KiB/s, done.
Resolving deltas: 100% (476/476), done.

/reposurgeon-0.5$ ./reposurgeon
reposurgeon% read forban
reposurgeon: found git repository
reposurgeon: from git fast-export -M -C --signed-tags=verbatim --tag-of-filtered-object=drop --all......(0.76 sec) done.
2010-11-10T23:35:23 * forban

reposurgeon% stats
Repository 'forban' was read at 2010-11-10T23:35:23
Loaded from forban
58K, 567 commands, 360 blobs, 183 commits, 19 tags, 5 resets, 543 marks.
Subdirectory: .git
    Exporter: git fast-export -M -C --signed-tags=verbatim --tag-of-filtered-object=drop --all
Export-Style: ('nl-after-commit',)
 Initializer: git init
    Importer: git fast-import
    Checkout: git checkout

reposurgeon% list
.
.
.
   536 2010-11-01T07:54:49 exclude .dotfile from search results                                                                                                                     
   538 2010-11-01T07:56:12 remove query string output                                                                                                                               
   540 2010-11-01T14:55:25 don't try to get value when the loot is                                                                                                                  
   542 2010-11-01T14:58:15 return a default value for the lastseen                                                                                                                  
   544 2010-11-01T15:05:13 Forban 0.0.22 

reposurgeon% list /bug fix/
   122 2010-01-04T11:20:10 bug fix : ensure that index already exists                                                                                                               
   128 2010-01-06T00:12:57 index (bug fix): if index not present and HEAD successful, fetch and save it.                                                                            
   136 2010-01-13T00:48:21 bug fix in forban_share : do not try to fetch index if the loot was                                                                                      
   188 2010-03-07T16:16:25 opportunistic fetching bug fixed for unseen forban services.                                                                                             
reposurgeon% (seulement 4 ;-) )

C’est exactement pareil avec Git. Le chargement est même plus rapide. Normal. Je pense que reposurgeon va devenir une référence et un outil (déjà) très pratique. Actuellement reposurgeon est à la version 0.5 et à été annoncé le 1 novembre 2010. Écrit en Python et constitué d’un seul script, il est déjà très utilisable comme nous venons de le voir.

Agrégateur personnel (suite)

Je viens de faire un peu évoluer le script dont je parlais hier afin qu’il fournisse lui-même un flux RSS. Il est maintenant utilisable avec un fichier de configuration (en fait simplement une liste de flux) passé en ligne de commande. Avec un petit script j’ai donc maintenant deux agrégateurs en ligne:

Bref, je me suis beaucoup inspiré du célèbre planet et je suis assez content du résultat. Le script est très court, environ 100 lignes de codes (CSS compris + CSS pour appareils mobiles) et est paramétrable. En modifiant deux lignes de code il est utilisable en CGI. Bon, c’est clair que je peux faire des améliorations.

Utilisation:

$ crontab -l # m h dom mon dow command */10 * * * * python ~/feeds/feeds.py ~/feeds/news.lst ~/www/feeds/index.html ~/www/feeds/rss.xml feeds.cedricbonhomme.org */10 * * * * python ~/feeds/feeds.py ~/feeds/cedricbonhomme.lst ~/www/firehose/index.html ~/www/firehose/rss.xml firehose.cedricbonhomme.org

Les fichiers .lst contiennent simplement chacun une liste de flux. Utilisation toute simple.
Je pense que je vais encore ajouter quelques options. Il serait par exemple intéressant de pouvoir donner une limite par flux (pour expiration) afin de ne pas avoir une page HTML énorme.

Le combat des DVCS

Mercurial vs Git

Ces derniers temps je vois de plus en plus de billets contenant la chaîne de caractère “git has won” ou “github has won“. Cela m’attriste un peu. Bien sûr il ne faut pas comprendre ici que Mercurial se porte mal. Au contraire. Mercurial c’est cool, simple à utiliser et puissant. Je me demande juste pourquoi tellement de développeurs adoptent la gitattitude.

Concrètement, pour qu’elle raison Git est-il plus tendance que Mercurial? Pour une raison technique? Parce que Linus? Pourquoi pas Guido? Sur un plan technique l’image de ce billet reflète certainement bien les différences. On peut aussi voir Git comme MacGyver et Mercurial comme James Bond.

Personnellement, je pense que Mercurial n’a rien a envier à Git sur le plan technique.
La bataille semble plutôt sociale. Git a le vent en poupe en partie grâce au réseau github et aussi (un peu moins) au réseau gitorious.
Il faut le dire, github est sacrément bien fait comparé à bitbucket. github est surtout plus rapide. L’aspect communautaire est aussi mieux pensé. Sur bitbucket il n’est même pas possible de mettre des tags sur un projet ou de rechercher par licence.

J’aimerai beaucoup que bitbucket utilise la même licence que gitorious. Une licence AGPL.

Finalement on se trompe peut être de combat. Il s’agit plutôt d’un combat de services d’hébergement de code source.

Il ne faut pas oublier que le code est roi. L’important reste toujours de développer ces logiciels ouvertement. Qu’il s’agit d’un dépôt Mercurial ou Git, le dépôt doit être ouvert et le code doit être sous licence libre. Et le service Web de préférence doit utiliser une licence libre, comme le fait gitorious.

Je me suis récemment ouvert un compte github et gitorious. Je vais me servir de ces comptes pour tester le plug-in Mercurial Hg-Git.

P.S.: si vous avez un argument technique de poids je suis preneur, merci.

pyAggr3g470r – Export pour DokuWiki

Depuis mon récent changement d’hébergeur et de wiki je profite pleinement des fonctionalités offertes par DokuWiki. Et c’est même bon pour pyAggr3g470r! En effet, grâce aux namespaces de DokuWiki j’ai eu l’idée de d’implémenter dans pyAggr3g470r un troisième type d’export. Un export spécialement prévu pour mon Wiki.

Voyez le résultat: http://wiki.cedricbonhomme.org/doku.php/news-archives#blog