Tag - python

Entries feed - Comments feed

Last entries

Tue 26 Jan 2016

WE programming project: XKCD keyword index

With this post I'm starting a new kind of article: WE programming project. It's objective is to give ideas of programs that could be written over a WE, probably a lot more or lot less depending on your skill and willing to extend the idea.

Here is the first project proposal: an XKCD keyword index.

Objective

You probably known XKCD, "a webcomic of romance, sarcasm, math, and language". If not, I recommend it's reading. :-) All the XKCD comics are freely available, through an URL, e.g. "Asteroid" is available at URL https://imgs.xkcd.com/comics/asteroid.png.

Sometimes, I would like to illustrate a slide or blog item with one of XKCD comics. I know it exists, I saw it but I can no longer find it! So frustrating! So the main idea of this WE programming project is rather simple: make a keyword index of XKCD comics so that one could look for a comics over a theme or idea.

Requirements

Here is some requirements for this project, feel free to adapt to your needs or your own ideas: ;-)

  • It is a web site on the Internet that displays each XKCD comics (with proper reference to original web site) with associated keywords
  • One can search comics on a set of keywords
  • One can associate keywords (a-z- character set, space separated list) to a given comics
  • Already given keywords are suggested
  • No need of account by default, everybody is free to add new keywords (for easy contribution)
  • Moderators (with dedicated account) can make previously added keywords public, can remove keywords
  • No use of database (for easy installation), keywords are saved into a simple file
  • One can download the whole association of keywords to comics (e.g. as a JSON data structure)
  • There is an API to control the web site (for use by others and integration into other sites)

Needed programming technology

Any programming language you want which have a well designed web framework: Ruby with Rails, Python with Django, Javascript with Meteor, OCaml with Ocsigen, ...

If you tackle this project proposal, let me know! ;-)

Sat 05 May 2012

Petit script Python pour afficher le n-ième jour du mois

Quelqu'un avait besoin de sortir les dates du n-ième jour des mois d'une année donnée, alors j'ai écrit un petit script Python pour le faire :

  #!/usr/bin/python
  
  import sys
  import calendar
  
  year = int(sys.argv[1]) # 2012
  week = int(sys.argv[2]) # 1 pour 1ere semaine
  day = int(sys.argv[3])  # 0 lundi, 1 mardi, ..., 6 dimanche
  
  for month in xrange(1,13):
      month_calendar = calendar.monthcalendar(year, month)
      if month_calendar[0][day] != 0:
          # the day is in the first week
          print "%d-%d-%d" % (year, month, month_calendar[week - 1][day])
      else:
          # the day is not in the first week, skip first week
          print "%d-%d-%d" % (year, month, month_calendar[week][day])

Pour sortir le 3e lundi (0 pour lundi, 1 pour mardi, ..., 6 pour dimanche) de chaque mois de l'année 2012 :

$ ./ordered-day.py 2012 3 0
2012-1-16
2012-2-20
2012-3-19
2012-4-16
2012-5-21
2012-6-18
2012-7-16
2012-8-20
2012-9-17
2012-10-15
2012-11-19
2012-12-17

Si ça peut servir à d'autres, n'hésitez pas à le réutiliser. Licence CC0, si ça un sens pour si peu de code.

Thu 01 Apr 2010

Pourquoi je quitte l'expérience démocratique

demexp On m'a récemment contacté à propos de l'expérience démocratique. J'avais déjà annoncé que je quittais le projet mais j'ai fini par élaborer une réponse plus précise. Il me semble intéressant de la rendre publique, non pas pour étaler mes états d'âmes mais comme une réflexion a posteriori sur un engagement et sur un projet de logiciel Libre qui n'a pas marché (et accessoirement pour l'« histoire » du projet ;-).

Si on retourne en 2003, je venais surtout pour l'aspect informatique du projet. Faire un logiciel de débat et de vote électronique original, c'était intéressant et très motivant. Mais après plusieurs années de développement je n'ai toujours pas un logiciel utilisable et je me suis retrouvé tout seul à le faire (ou quasiment). La lassitude a fait le reste du travail. ;-)

Par ailleurs, certains choix technologiques ont limité le développement du projet (client lourd en Gtk+, pas d'interface web), même si cela était dû à des contraintes quand j'ai commencé (Ocsigen n'existait pas à l'époque). Pour d'autres choix comme utiliser le langage OCaml, ça a très certainement limité l'arrivée de nouveaux développeurs. Mais je n'en aurais pas fait autant dans des langages plus classiques comme PHP ou Python. D'ailleurs d'autres ont proposé des morceaux de logiciel, en repartant de zéro comme Jean-Marc Fauché ou Lyu Abe. Mais ces propositions ne m'ont jamais emballé.

Plus sur le fond, je m'interroge pas mal sur le sens du projet. La démocratie ne se limite pas au vote, le débat et la formation des citoyens sont tout aussi important. Après quelques années, j'ai eu l'impression qu'on se concentrait uniquement sur l'aspect vote et pas assez sur les autres aspects. Pour le dire autrement, c'était peut-être plus important de faire un serveur de listes de diffusion, un service web pour synthétiser les débats et puis finalement voter en Condorcet avec du papier et du crayon que de faire un logiciel de vote électronique. On avait dit qu'on ferait des « soirées Condorcet » dans un bar, pour mettre en œuvre de manière concrète et ludique les idées du projet : cela ne s'est jamais fait.

Pour le logiciel, je suis parti sans réellement de spécifications, quasiment par le codage. Ce n'est pas comme ça que l'on fait un bon logiciel. ;-) Évidemment, quand on a démarré, on ne savait pas trop où on allait. Maintenant je pense que j'aurais des idées plus claires.

Informatiquement parlant, l'amplitude du projet est très vaste. Cela va des bases de données aux interfaces graphiques en passant par la cryptographie ou le réseau. C'est très stimulant sur le plan intellectuel, on apprend pleins de choses mais on n'est pas forcément bon partout.

Sur un plan plus pratique et citoyen, le vote électronique est très polémique (voir par exemple ordinateurs-de-vote.org). Je suis moi même contre les machines de votes actuelles[1] ! Il est quasiment impossible de faire un logiciel de vote aussi transparent qu'une urne en plexiglas. La recherche dans le domaine des protocoles de vote avance mais il faudra encore probablement de nombreuses années avant d'avoir quelque chose d'utilisable. Et ce sera très vraisemblablement plus compliqué qu'un bulletin dans une urne.

Sur le plan plus humain, on a démarré à quatre sur le projet, puis à trois au cœur. J'ai trouvé sur le long terme que j'étais un peu seul à faire la gestion de tâches informatiques (mise à jour du serveur, répondre sur les listes, le développement, etc.), malgré le soutien de mes deux compères. Ils ont beau être les pères de l'idée, j'ai trouvé que leur implication n'y était plus.

Enfin et surtout, après plusieurs années, j'ai envie de m'attaquer à d'autres défis, dans des domaines totalement différent et cela ne se fera pas sans dégager du temps libre. J'ai donc arrếté mon implication dans des projets non « productifs ».

Voilà, c'est probablement trop long et un peu confus, mais c'est dur de résumer plusieurs années de projet en quelques mots.

Je considère toujours que la thématique du projet, la réflexion sur la démocratie et le rôle du politique, est cruciale. Peut-être juste que l'angle n'était pas le bon, je ne sais pas. Apparemment, d'autres on des idées similaires et très intéressantes.

Et l'expérience a été pour moi enrichissante. Je ne regrette rien ! :-)

Notes

[1] Vous avez dit schizophrène ? ;-)

Wed 10 Mar 2010

Standing on the shoulders of giants: MapOSMatic in a sea of Free Software

One thing that stroked me after the two hackfests we made to develop MapOSMatic: the little amount of code we really developed! In fact, we are re-using a lot of other Free Software.

Using the excellent sloccount, I tried to get some figures. MapOSMatic is about 3150 lines of code, 90% made of Python. MapOSMatic dependencies count for more than 600,000 lines of code, counting PostgreSQL, PostGIS, Apache 2 httpd, Django framework and some small libraries.[1] So we only developed about 0.5% of the code needed to run the MapOSMatic service. And I obviously do not count the OpenStreetMap data itself, which is about 70 GB!

That's why we can say, as most of software developers, that we are standing on the shoulders of giants: we are re-using knowledge, hard-work and polishing of a lot of other people. MapOSMatic is a glaring example of this fact and of the power of Free Software.

Notes

[1] Counting all MapOSMatic dependencies is nearly impossible: it is hard to draw a line between what is part of the system and what is a specific dependency of MapOSMatic (e.g. Python).

Mon 13 Jul 2009

Mini news : micro-blogging et demexp

En premier lieu, désolé pour le manque de billets la semaine dernière, mais il est parfois nécessaire de faire une pause de temps en temps.

Première mini-news : micro-blogging

Logo Identi.ca J'ai cédé aux appels de Jean-Philippe, Thomas ou Fabien sur le micro-blogging en finissant par ouvrir un compte sur le service de micro-blogging libre identi.ca. Mon identifiant (très original) : dmentre. Pourquoi choisir identi.ca plutôt que Twitter ? Parce que identi.ca fonctionne sur une plate-forme libre avec le logiciel Laconica et que les billets sont publiés sous une licence libre (CC-BY-SA 3.0). Bon, à mon avis, c'est encore une source de perte de temps sans réel utilité, mais j'affirme de plus en plus mon côté geek. :-)

Deuxième mini-news : demexp et les RMLL

RMLL 2009 J'ai fait un saut au 10e Rencontres Mondiales du Logiciel Libre (les reumeuleuleu pour les intimes) à Nantes cette année et malgré le peu de temps que j'ai pu y passer, Fred a trouvé le moyen de me faire participer à un débat radiophonique sur le vote électronique. Et pourtant, ce n'est pas faute de dire que demexp m'intéresse de moins en moins ! :-) Si vous avez 50 minutes à perdre, n'hésitez pas à me donner votre avis. J'ai l'impression qu'on est super confus au début (forcément, aucune préparation !) mais qu'après ça s'arrange un peu. Enfin j'espère. ;-) Pour ceux qui suivent les aventures du vote électronique, pas grande originalité dans les propos. Sinon, les RMLL, c'est super sympa pour voir les potes exilés aux quatre coins de l'hexagone. :)

Le logiciel de vote epoll pour les élections au CNRS réalisé par le troisième intervenant, Olivier Thauvin (alias nanardon), est lui aussi disponible. Il a des spécifications plus classiques (par rapport à demexp ;-) mais il y a apparemment un gros effort pour garantir les bonnes propriétés du vote en respectant notamment les recommandations de la CNIL. Les présentations d'Olivier donnent une description plus complète d'epoll.

Troisième mini-news : nouvelle version du demexp de Jean-Marc Fauché

Jean-Marc a publié il y a plus de deux semaines une nouvelle version de son demexp développé en Python avec web2py. Elle est enfin accessible en ligne à l'URL http://bentobako.org:8000/Demexp. Cette version apporte un système de délégation d'un vote.

Thu 04 Jun 2009

Luciole : un logiciel ultra-simple d'emploi pour faire des animations image par image

Logo Luciole J'ai découvert récemment par une nouvelle de LinuxFR le logiciel libre d'animation image par image Luciole. Ce qui m'a séduit dans sa description, c'est qu'il est ultra-simple d'emploi. Et c'est effectivement le cas : un premier film réalisé en moins de 10 minutes après le démarrage du logiciel ! :-)

Installation du logiciel

Des paquets sont fournis mais je préfère installer le logiciel à partir des sources disponible sur le site Launchpad. Luciole est programmé en langage Python.

Récupération et extraction des sources :

 $ wget http://code.launchpad.net/luciole/trunk/0.7.3/+download/luciole_0.7.3.tar.gz
 $ tar zxf luciole_0.7.3.tar.gz 
 $ cd luciole-0.7.3a

Dépendances de compilation (trouvées dans le fichier debian/control) à installer :

  python-dev python-gtk2-dev python-gnome2-dev

La compilation se fait par un simple :

 $ make

Il faut ensuite installer les dépendances nécessaires à l'utilisation de Luciole (là aussi trouvées dans debian/control) :

 python (>= 2.5) python-gtk2 python-glade2 python-gnome2 gstreamer0.10-plugins-base gstreamer0.10-plugins-good python-gst0.10 mjpegtools python-imaging imagemagick mencoder

Un premier film

Luciole : écran de travail On lance le logiciel par un simple :

 $ ./luciole.py

Une fenêtre s'ouvre, avec deux options : Créer un nouveau projet ou Ouvrir un projet existant.

Si on crée un nouveau projet, on choisit le dossier où mettre tous les fichiers du projet, puis le périphérique d'entrée (j'ai utilisé ma webcam, reconnue sans problème).

Après, l'utilisation proprement dite de Luciole est triviale :

  • En appuyant sur le bouton « Luciole endormie », on active la caméra. Chaque clic sur le bouton « Appareil photo » prend une image stockée dans la bande Capture ;
  • Pour faire le montage de l'animation proprement dite, on sélectionne une ou plusieurs images de Capture et on utilise le bouton Flèche à droite pour les mettre dans la bande Montage.

Tout ça est beaucoup plus compliqué à expliquer qu'à faire ! :-)

Quand on a suffisamment d'images, il suffit de choisir le bouton de lecture pour visualiser l'animation. Une fois qu'on est satisfait du résultat, on choisit l'option de menu Fichier > Export pour l'enregistrer dans un format vidéo. Et voilà le travail (ok, on doit pouvoir faire mieux ;-) !

Mise à jour, 2009-06-18 : liste des paquets sans virgule.

Thu 28 May 2009

Une nouvelle application demexp en web avec web2py

Le projet d'expérience démocratique est un projet de démocratie directe à grande échelle. Il a démarré il y a quelques années déjà mais il a du mal à décoller, en particulier par manque d'un logiciel adapté. En effet le projet nécessite un logiciel de vote électronique en ligne ayant des caractéristiques bien particulière comme le vote Condorcet, une délégation possible du vote, à tout moment possibilité de changer un vote, etc. J'avais écris un serveur et un client lourd (en OCaml) pour remplir ce rôle mais les développements ont stagné pour diverses raisons : manque de motivation de ma part, trop de choses encore à faire, client lourd trop compliqué à déployer et à maintenir, langage OCaml peu connu donc je suis le seul développeur sur le projet, etc.

Hors, très récemment, une nouvelle application est apparue, programmé par Jean-Marc Fauché : une implémentation des idées de demexp en technologie web. Plutôt que de partir de mon code, Jean-Marc redémarre de zéro en langage Python, en utilisant le framework web2py.

Les caractéristiques de web2py sont intéressantes :

  • un déploiement aisé des applications : on peut télécharger une application dans un serveur existant ou récupérer une application existante à partir d'un serveur ;
  • on peut développer l'application en ligne : base de données, modèles et vues (même si à mon avis ce n'est pas forcément très utile pour de grosses applications) ;
  • les rapports d'erreurs (exceptions) sont accessibles en ligne, par l'interface d'administration ;
  • le déploiement est hyper-simple : unzip web2py_src.zip && python web2py/web2py.py ;
  • web2py est organisé autour de l'architecture modèle-vue-contrôleur et incite à utiliser ce modèle ;
  • le système de template utilise le langage Python plutôt qu'un autre langage ad hoc ;
  • un système de traductions en ligne, là aussi par l'interface d'administration ;
  • la base de donnée est vue au travers d'objets Python et toute modification des descriptions de la base est répercuté sous forme de commandes SQL de mise à jour de la base ;
  • et bien sûr un soin tout particulier apporté au framework pour faire des applications web sûres par défaut.

En bref, web2py semble la plate-forme idéale de prototypage rapide d'applications web, améliorant les idées trouvées dans d'autres frameworks comme Django ou Ruby on Rail. Pour des développements longs et importants, je ne suis pas sûr qu'il soit totalement satisfaisant, les aspects dynamiques de Python ont leurs limites (qui ne connait pas le typage fort d'OCaml ne peut pas comprendre le sens de la vie ;-). Mais il faut reconnaître a développé en quelques semaines une application qu'on peut tester et facilement déployer.

J'ai installé un dépôt Mercurial pour consulter le code de Jean-Marc. Si vous voulez tester son code, sa dernière version publiée est utilisable sur ce site temporaire : http://bentobako.org:8000/Demexp/.

En guise de conclusion, l'expérience démocratique semble redémarrer et on ne peut que s'en réjouir.