Humus numericus

Aller au contenu | Aller au menu | Aller à la recherche

R, Spip et autres

jeudi 20 mars 2014

Simulations de fins de championnats de football

Je viens de mettre en ligne sur data.nozav.org un essai de simulations de fins de championnats de football. L’idée est d’utiliser les matchs déjà joués pour évaluer les probabilités de victoires, nuls et défaites à domicile et à l’extérieur, et d’utiliser ces probabilités pour estimer les chances des différentes issues pour les rencontres à venir. On peut ensuite simuler plusieurs milliers de fins de championnats possibles, et voir quels sont les résultats et classements au final les plus probables.

Le billet de blog décrivant plus précisément la méthode est là :

Et surtout l’application permettant de visualiser les simulations régulièrement mises à jour pour les championnats de Ligue 1, Ligue 2 et National est accessible ici :

Comme d’habitude le code source et les données sont disponibles sur Github.

mardi 11 juin 2013

Résultats et classification des bureaux de vote de Lyon d'après les présidentielles de 2012

Je viens de mettre en ligne un nouvel article sur data.nozav.org, à savoir les résultats des présidentielles de 2012 au niveau du bureau de vote pour la commune de Lyon, ainsi qu’une classification des bureaux en question. Le Grand Lyon venant de mettre en ligne sur le portail SmartData le contour des zonages des bureaux de la commune, cela permet une représentation cartographiques de ces résultats.

Pour lire la suite :

dimanche 9 juin 2013

Classification des communes françaises selon la présidentielle de 2012

Je viens de mette en ligne un nouveau site : data.nozav.org. L’objectif est d’y publier des analyses ouvertes, dont le code source sera librement accessible, et basées sur des données disponibles sous licence type opendata.

Premier article pour l’instant : une classification des communes françaises selon les résultats du premier tour des présidentielles de 2012. Si jamais ça vous intéresse, c’est par ici :

lundi 21 mai 2012

Blog (un peu) à l'abandon !

Comme vous l’avez sans doute remarqué (ou pas), peu de mises à jour en ce moment sur ce blog. Faute de temps, d’inspiration, bref, les trucs classiques.

J’ai également tendance à utiliser de plus en plus SeenThis, un réseau social qui permet de partager rapidement et efficacement des ressources trouvées sur le Web. C’est également très pratique pour de petits billets techniques ou informatifs. Si jamais ça vous intéresse :

mercredi 16 novembre 2011

«Nous sommes tous des classes moyennes !»

Monsieur Laurent Wauquiez, notre bien-aimé ministre de l'Enseignement supérieur et de la Recherche, le chef de file de la «Droite sociale» qui veut mettre les RSAistes au travail forcé, vient de pondre un passionnant opus baptisé La lutte des classes moyennes.

Dans une non moins passionnante interview, il nous en dit un peu plus sur ce travail sociologique approfondi qui s'appuie sur une minutieuse enquête de terrain. Ainsi :

La France a un tabou sur les classes moyennes. Personne n’en parle. Il n’existe pas de réflexion sur leur place dans notre pays.

Depuis 30 ans, la France est le seul pays à avoir fait reculer la barre de la richesse nationale qui va aux classes moyennes. Les plus riches ont capté beaucoup plus avec la mondialisation. Les plus pauvres ont vu un renforcement considérable de la solidarité, voire de l’assistanat. Les seules qui ont reculées sont les classes moyennes. L’objectif de ce livre consiste donc à leur donner la parole puisqu’on ne les entend jamais ; je les appelle les «sans voix».

Le titre est évidemment un clin d’œil à Karl Marx. Nous disons qu’aujourd’hui, la lutte des classes sociales est finie. Ce qui importe c’est celle des classes moyennes. Ce sont elles qui sont en lutte pour survivre.

Alors voilà. Les «sans voix», ceux dont on ne parle jamais, ceux qui luttent pour survivre, ce ne sont pas les pauvres, les ouvriers ou les chômeurs, nan nan nan, ce sont les classes moyennes.

Et c'est quoi les classes moyennes ? Facile, Laurent là aussi a enquêté :

Les classes moyennes dans notre pays correspondent à 70% de la population.

Et ça tombe drôlement bien, parce que quitte à défendre ardemment une partie de la population pour avoir ses tits bulletins, autant que ça soit pas 5% de la population et qu'on se retrouve avec le score du Parti des Travailleurs.

Et ça pense quoi une classe moyenne ?

Elles regroupent trois valeurs sociologiques :

  • Elles vivent de leur travail, et donc ni de leurs rentes, ni de l’assistanat ;
  • Elles aspirent à posséder un logement ;
  • Elles considèrent que l’idée que leurs enfants aient un meilleur avenir qu’elles est fondamentale.

Bah oui, c'est bien connu, les pauvres, ça se contrefout de payer un loyer à un proprio plus riche qu'eux, et ça se contrefout aussi de ce que va bien pouvoir devenir sa (nombreuse) progéniture.

Et ça gagne combien une classe moyenne ?

En terme de revenus, les classes moyennes se situent entre 1500 et 6000 euros nets par foyer (un couple dont chacun des membres touche 2000 euros nets appartient donc à la classe moyenne).

Si je vis dans un couple avec deux personnes qui travaillent, je suis dans les classes moyennes si les revenus des deux personnes sont situées entre 750 euros mensuels par personne (ce qui est le cas de 100% des salariés à plein temps, nous apprend l'observatoire des inégalités) et 3000 euros nets mensuels par personne (ce qui est le cas de 97% des salariés à plein temps). Effectivement, c'est large.

La vision de la société selon Monsieur Wauquiez, ça se divise donc en trois :

  • les assistés (pas les pauvres, nuance), c'est-à-dire les chômeurs, les RSAistes, et tous les profiteurs du même genre, d'un côté ;
  • une poignée de riches, ceux qui vivent de leurs rentes, de l'autre ;
  • et au milieu, ignorée, «sans voix», écrasée, en lutte pour sa survie, la pauvre classe moyenne.

C'est simple, en fait.

Évidemment, si tu poses la question à l'INSEE, ils risquent de ne pas être complètement d'accord (mais bon, ce ne serait pas la première du genre de la part de ce nid de gauchistes). Par exemple, si tu regardes leur nomenclature des professions, il y a une magnifique catégorie professions intermédiaires, dans laquelle tu retrouves les techniciens, les contremaîtres, les instituteurs, et beaucoup d'autres. Cette catégorie représentait environ 25% de la population active en 2008. Alors bien sûr ce serait un peu restrictif de limiter les classes moyennes à ces seules professions intermédiaires, mais les sociologues et autres statisticiens ont quand même pris l'habitude, par exemple, de plutôt regrouper les employés (29% des actifs) et les ouvriers (23%) dans la catégorie «classes populaires».

Mais bon, c'est tellement plus simple d'imaginer que tous ces gens-là ne sont qu'un seul et même groupe, uni par les même objectifs, de l'ouvrier sur sa chaîne au directeur des ressources humaines, à savoir lutter contre une poignée de méchants rentiers vivant en Suisse et une foule de profiteurs fainéants abusant allègrement de leur chômage où qu'on peut être malade sans jour de carence.

Rien de bien étonnant dans tout cela venant d'un membre de l'UMP qui a évidemment et objectivement tout intérêt à promouvoir cette vision du monde, tout à son avantage. Ce qui est plus embêtant c'est la manière dont cette vision du monde se répand actuellement dans les médias, à grands coups de mesures d'austérité qui «touchent avant tout les classes moyennes».

Et ceux qui sont effacés, dans tout cela, les véritables «sans voix oubliés», ce ne sont pas les classes moyennes, mais bien les classes populaires, ouvriers, employés, rendus presque totalement invisibles depuis des années, et les «pauvres», transformés comme d'habitude en assistés profiteurs.

mardi 20 septembre 2011

el-get, un gestionnaire de script/package/extension pour Emacs

Un des aspects parfois fastidieux d'Emacs est la gestion de tous les scripts et extensions non inclus dans la distribution de base, qu'on récupère deci-delà et dont il faut gérer les version, les mises à jour, l'inclusion dans son .emacs, etc.

Pour remédier à ce problème, différents scripts existent, comme Auto Install, plutôt centré sur les scripts hébergés sur EmacsWiki, ELPA et l'extension package, et bien d'autres

Or je viens de découvrir grâce à un retweet de Julien Danjou un projet que je ne connaissais pas : el-get. Et il s'avère que ce système est tout simplement génial, et que j'y ai du coup migré dans la foulée la gestion de la totalité de mes scripts Emacs.

Pour le dire vite, el-get permet d'installer des scripts et extensions depuis quasiment toutes les sources imaginables (git, url, fichier, emacswiki, elpa, etc.), automatise leur installation, ajoute automatiquement les require et autres directives qui vont bien, et permet une mise à jour et une synchronisation très simple des extensions installées.

Installation

L'installation d'el-get se fait en ajoutant les lignes suivantes dans son .emacs et en les exécutant :

(add-to-list 'load-path "~/.emacs.d/el-get/el-get")

(unless (require 'el-get nil t)
  (url-retrieve
   "https://raw.github.com/dimitri/el-get/master/el-get-install.el"
   (lambda (s)
     (end-of-buffer)
     (eval-print-last-sexp))))

Ces instructions vérifient qu'el-get est déjà installé et, sinon, le télécharge via git et l'installe dans ~/.emacs.d/el-get/el-get.

Note : en cas de message d'erreur lié à la variable el-get-verbose, ajouter la ligne (setq el-get-verbose t) dans son .emacs peut suffire à résoudre le problème.

Utilisation interactive

el-get est fourni avec un certain nombre de «recettes» (recipes) qui décrivent l'installation d'un grand nombre d'extensions.

Imaginons que nous souhaitons installer rainbow-mode par exemple. Rien de plus simple. Il suffit de faire M-x el-get-install, de saisir rainbow-mode au prompt, et de laisser el-get faire le boulot, c'est à dire :

  • télécharger les fichiers nécessaires
  • les installer dans ~/.emacs/el-get
  • byte-compiler les fichiers
  • installer et exécuter automatiquement les require et autre autoloads nécessaires à l'utilisation de l'extension
  • et, en cadeau bonux, il fait tout ça de manière asynchrone (vous pouvez continuer à utiliser Emacs pendant ce temps) et vous prévient qu'il a fini avec une jolie notification !

Une fois l'opération effectuée, même pas besoin d'éditer son .emacs, l'extension est immédiatement disponible et un M-x rainbow-mode marche immédiatement.

Le plus fort, c'est que ça fonctionne pour des extensions de petite taille, mais aussi pour des mastodontes nécessitant dépendances et compilations, comme org-mode ou nXhtml !

Vous avez testé une extension et vous ne souhaitez pas la conserver ? Hop, el-get-remove. Vous souhaitez mettre à jour l'une d'entre elles ? Hop, el-get-update. Etc., etc.

Installation depuis EmacsWiki

Vous souhaitez installer un fichier hébergé sur EmacsWiki ? Pas de problème, il suffit de faire un petit M-x el-get-emacswiki-refresh, d'attendre la jolie notification, et à partir de là l'intégralité des fichiers hébergés sur EmacsWiki sont automatiquement disponibles et installables avec el-get-install !

Sauvegarde et synchronisation de la liste des extensions

Jusqu'à présent je gérais mes différents fichiers de configuration emacs dans un dépôt git, qui me permettait à la fois de garder l'historique et de synchroniser entre différentes machines. Là où ça devient plus compliqué, c'est quand on installe des extensions elles-mêmes sous git (problèmes de conflits pour des dépôts inclus dans des dépôts, même si git sait gérer ça très bien) ou sous d'autres gestionnaires de version.

el-get permet de gérer cela de manière très élégantes : il suffit de déclarer dans son .emacs la liste des extensions utilisées pour qu'elles soient automatiquement vérifiées au démarrage et installées si nécessaire.

Par exemple, voici ce que j'ai dans mon .emacs :

(setq my:el-get-packages
      '(xml-rpc-el
        yasnippet
        org-mode
        anything
        auto-dictionnary
        autopair
        calfw
        coffee-mode
        color-theme
        dired+
        edit-server
        fixme-mode
        flymake-ruby
        gist
        google-maps
        js2-mode
        nxhtml
        org2blog
        rainbow-mode
        r-autoyas
        rvm
        switch-window
        sr-speedbar
        typopunct
        ))

(el-get 'sync my:el-get-packages)

La variable my:el-get-packages contient la liste des extensions utilisées, et la fonction (el get 'sync) va automatiquement vérifier que toutes les extensions spécifiées sont installées sur le système. Et si ça n'est pas le cas, elle les installe.

Donc, plus besoin d'enregistrer les fichiers des extensions proprement dites dans le dépôt git de sa config emacs, il suffit de spécifier leur liste dans son .emacs et el-get se charge du reste.

Ajouter ses propres recettes

Il peut arriver qu'une extension ne soit disponible ni sur EmacsWiki ni parmi les recettes fournies. Dans ce cas il est possible et assez simple de créer sa propre recette.

Prenons par exemple le fichier pwsafe.el, qui est une interface entre Emacs et pwsafe. Celui-ci n'est disponible qu'en téléchargement direct depuis le site de son auteur.

La «recette» d'installation correspondante est très simple :

(:name pwsafe
       :description "Emacs interface to pwsafe, by Stefan Reichoer"
       :type http
       :url "http://www.xsteve.at/prg/emacs/pwsafe.el")

Dans le cas du thème color-theme-tangotango, hébergé sur GtiHub, c'est pas plus compliqué :

(:name color-theme-tangotango
       :description "Another color theme based on the Tango palette."
       :type git
       :url "https://github.com/juba/color-theme-tangotango.git")

Pour ajouter une recette à el-get, on peut l'ajouter directement dans son .emacs :

(setq my:el-get-packages
      '(xml-rpc-el
        yasnippet
        org-mode
        […]
        ))

(setq el-get-sources
        '((:name pwsafe
               :description "Emacs interface to pwsafe, by Stefan Reichoer"
               :type http
               :url "http://www.xsteve.at/prg/emacs/pwsafe.el")))

(setq my-packages
      (append
       my:el-get-packages
       (mapcar 'el-get-source-name el-get-sources)))

(el-get 'sync my-packages)

Aller plus loin

Pour avoir un aperçu plus complet des fonctionnalités d'el-get, l'idéal est de consulter le README sur GitHub.

jeudi 15 septembre 2011

Une fonction Emacs qu'elle est utile

Un des trucs que j'adore sous org-mode, c'est la possibilité de déplacer des éléments (items de listes, titres, sections, etc.) avec M-haut et M-bas.

J'ai réalisé ce matin que je passais quand même un certain temps, lors de l'édition de fichiers, à enchaîner les C-k et C-y pour déplacer des lignes entières. Ça serait-y pas plus pratique de pouvoir utiliser M-haut et M-bas partout pour déplacer les lignes de la même manière que sous org-mode ?

Un petit tour sur EmacsWiki, et voilà :

(defun move-line (n)
  "Move the current line up or down by N lines."
  (interactive "p")
  (setq col (current-column))
  (beginning-of-line) (setq start (point))
  (end-of-line) (forward-char) (setq end (point))
  (let ((line-text (delete-and-extract-region start end)))
    (forward-line n)
    (insert line-text)
    ;; restore point to original column in moved line
    (forward-line -1)
    (forward-char col)))

(defun move-line-up (n)
  "Move the current line up by N lines."
  (interactive "p")
  (move-line (if (null n) -1 (- n))))

(defun move-line-down (n)
  "Move the current line down by N lines."
  (interactive "p")
  (move-line (if (null n) 1 n)))

(global-set-key (kbd "M-<up>") 'move-line-up)
(global-set-key (kbd "M-<down>") 'move-line-down)

On rajoute ça à son .emacs, et boudiou que c'est pratique !

mercredi 14 septembre 2011

How to limit Crashplan memory usage

One of the downside of the CrashPlan backup software is that, as a java application, it can use quite a lot of memory.

There's a simple way to limit this amount of memory, though. You just have to go into your Crashplan installation folder, (/opt/crashplan/ for me) and then edit the bin/run.conf file from :

SRV_JAVA_OPTS="-Dfile.encoding=UTF-8 -Dapp=CrashPlanService -DappBaseName=CrashPlan -Xms20m -Xmx512m -Djava.net.preferIPv4Stack=true -Dsun.net.inetaddr.ttl=300 -Dnetworkaddress.cache.ttl=300 -Dsun.net.inetaddr.negative.ttl=0 -Dnetworkaddress.cache.negative.ttl=0"
GUI_JAVA_OPTS="-Dfile.encoding=UTF-8 -Dapp=CrashPlanDesktop -DappBaseName=CrashPlan -Xms20m -Xmx512m -Djava.net.preferIPv4Stack=true -Dsun.net.inetaddr.ttl=300 -Dnetworkaddress.cache.ttl=300 -Dsun.net.inetaddr.negative.ttl=0 -Dnetworkaddress.cache.negative.ttl=0"

Then change the -Xmx512m argument on the first line (which is the maximum amount of memory the Crashplan service can use) to a lower value, for example :

SRV_JAVA_OPTS="-Dfile.encoding=UTF-8 -Dapp=CrashPlanService -DappBaseName=CrashPlan -Xms20m -Xmx100m -Djava.net.preferIPv4Stack=true -Dsun.net.inetaddr.ttl=300 -Dnetworkaddress.cache.ttl=300 -Dsun.net.inetaddr.negative.ttl=0 -Dnetworkaddress.cache.negative.ttl=0"
GUI_JAVA_OPTS="-Dfile.encoding=UTF-8 -Dapp=CrashPlanDesktop -DappBaseName=CrashPlan -Xms20m -Xmx512m -Djava.net.preferIPv4Stack=true -Dsun.net.inetaddr.ttl=300 -Dnetworkaddress.cache.ttl=300 -Dsun.net.inetaddr.negative.ttl=0 -Dnetworkaddress.cache.negative.ttl=0"

And then restart the Crashplan engine.

vendredi 29 juillet 2011

Utiliser les styles KDE pour les applis KDE/Qt sous Gnome

Depuis une récente mise à jour de Debian, mes applications KDE/Qt sous Gnome se sont mises à utiliser un thème le plus proche possible de mon thème GTK en usage. C'est bien pour l'uniformisation, mais le résultat était très moche.

J'ai donc essayé de remettre en place le thème Oxygen utilisé jusque-là, mais celui-ci n'apparaissait pas dans la liste des styles possibles de qtconfig.

La solution se trouve sur la page dédiée à KDE du wiki d'ArchLinux : depuis la version 4.6.1 de KDE il faut désormais lui indiquer où se trouvent les styles. Pour cela, une petite ligne supplémentaire dans son ~/.bashrc suffit :

export QT_PLUGIN_PATH=$HOME/.kde4/lib/kde4/plugins/:/usr/lib/kde4/plugins/

Il n'y a plus qu'à sélectionner le thème de son choix dans qtconfig et normalement ça roule.

jeudi 30 juin 2011

How to use CrashPlan with an encrypted home folder

I’m currently trying the CrashPlan online backup service, and I’m quite happy with it. The only problem I ran into is for two computers with encrypted home directories using ecryptfs.

The problem is that when the crashplan engine starts at boot time, the home folder is empty until the user has logged in. This seems to cause problems to crashplan : fortunately it doesn’t delete the corresponding backup data, but it seems it can’t detect changes in data in this home even after it is mounted unencrypted.

After a short answer from support, I’ve tried to use a quite dirty way to solve the problem : manually modify the crashplan init script to delay its startup until the user is logged in.

So the /etc/init.d/crashplan file has been modified by adding the following to the start section. Of course you’ve got to change /home/foo/bin with a directory or file that exists in your home :

case "$1" in
start)
while [ ! -e /home/foo/bin ]; do
sleep 2
done
$SCRIPTNAME start
;;
(…)

Then we have to modify the way the init script is invoked at boot time, because otherwise the sleep 2 instruction will make your boot process hang. So first remove all symlinks to your init script in /etc/rc*.d :

update-rc.d -f crashplan remove

And add the following line to /etc/rc.local :

/etc/init.d/crashplan start &

You could also add kill symlinks but that doesn’t seem mandatory as the default CrashPlan install doesn’t seem to do it.

mercredi 29 juin 2011

Accélérer l'exécution de dpkg, apt-get ou aptitude

Petit conseil si votre dpkg rame, si votre apt-get se traîne comme une vieille chaussette ou si votre aptitude a le dynamisme d'une histoire de Petit ours brun, et si ces ralentissements se produisent lorsque ces programmes lisent leur base de données.

Après quelques recherches sur le Web, il semble que ce ralentissement provient des très nombreux fichiers présents dans /var/lib/dpkg/info et que dpkg et consorts doivent lire de temps en temps. Avec le temps ces fichiers se fragmentent (ils se situent à des endroits dispersés sur votre disque dur) et leur lecture prend de plus en plus de temps.

Une solution peut être d'utiliser le script suivant, donné par gmargo sur un forum ubuntu.

Attention, j'ai utilisé ce script, je n'ai pas eu de problème et j'ai pu constater une amélioration significative des performances de dpkg et apt, mais je ne peux en rien vous garantir qu'il ne va pas corrompre votre base de données de paquets ou autres choses désagréables. Donc utilisez-le à vos risques et périls et faites toutes les sauvegardes nécessaires avant ;-)

Bref, voilà le script :

#!/bin/sh

# Script to reorder the /var/lib/dpkg/info directory to speed up "dpkg -S".
#
# Original by Peter Cordes, from Ubuntu Forums thread
# http://ubuntuforums.org/showthread.php?p=8982470
#
# "Safer" modified version by gmargo 2009-03-17

# Original Code:
# cd
# strace -efile -o dpkg.tr dpkg -S /bin/ls
# cd /var/lib/dpkg
# mkdir info.new
# grep '^open' ~/dpkg.tr | sed -r '/dpkg\/info/sX.*"(.*)".*X\1Xp' -n | xargs sudo cp -a -t info.new 
# # cmd line length limits prevent info/*.  I could have used rsync -au info/ info.new
# sudo cp -iau info/[a-k]* info.new/
# sudo cp -iau info/[l]* info.new/
# sudo cp -iau info/[m-z]* info.new/
# diff -ur info info.new/
# sudo rm -rf info
# sudo mv info.new info
# 
# sync
# echo 3 | sudo tee /proc/sys/vm/drop_caches
# time dpkg -S /bin/ls


# Modified code:

ORIGINAL=/var/lib/dpkg/info
NEW=/var/lib/dpkg/info.new
BACKUP=/var/lib/dpkg/info.saved.$(date "+%Y%m%d_%H%M%S")

#------------------------------
# You must be root or use sudo.
#------------------------------
if [ `id -u` -ne 0 ] ; then
    echo "ERROR: You must be root for this to work!"
    exit 1
fi

if [ -e "$NEW" ]; then
    echo "Remove $NEW directory first."
    exit 1
fi

echo "Time to perform search for package that provides ls, before optimization:"
sync
echo 3 > /proc/sys/vm/drop_caches
time dpkg -S /bin/ls

mkdir "$NEW"
rc=$? ; if [ $rc -ne 0 ] ; then echo "ERROR: mkdir $NEW failed rc=$rc" ; exit 2 ; fi
chmod 755 "$NEW"

echo "Optimize:"
strace -efile -o /tmp/dpkg.tr.$$ dpkg -S /bin/ls >/dev/null
grep '^open' /tmp/dpkg.tr.$$ | sed -r '/dpkg\/info/sX.*"(.*)".*X\1Xp' -n | xargs cp -p -t "$NEW"
find /var/lib/dpkg/info -type f -print | xargs cp -pu -t "$NEW"
rm -f /tmp/dpkg.tr.$$

#--------------------------------------------------
# Rename old info directory.
# DO NOT DELETE UNTIL YOU ARE CONVINCED dpkg WORKS.
#--------------------------------------------------
echo "Create backup:"
if [ -e "$BACKUP" ]; then
    echo "Backup directory $BACKUP already exists."
    exit 1
fi
mv "$ORIGINAL" "$BACKUP"
rc=$? ; if [ $rc -ne 0 ] ; then echo "ERROR: mv $ORIGINAL $BACKUP failed rc=$rc" ; exit 2 ; fi

mv "$NEW" "$ORIGINAL"
rc=$? ; if [ $rc -ne 0 ] ; then echo "ERROR: mv $NEW $ORIGINAL failed rc=$rc" ; exit 2 ; fi

echo "Dpkg search time after optimization:"
sync
echo 3 > /proc/sys/vm/drop_caches
time dpkg -S /bin/ls

mercredi 15 juin 2011

IOPS, une nouvelle organisation internationale pour une société «participaliste»

Zcommunications, site Web communautaire animé notamment par Michael Albert et auquel participent Noam Chomsky, Robert Fisk, Gilbert Achcar, Serge Halimi et beaucoup beaucoup d'autres, avait lancé il y a quelques temps un questionnaire en ligne au sujet de la création d'une nouvelle organisation internationale pour promouvoir le changement social au sens large.

Suite aux résultats positifs du questionnaire et d'une première collecte de fonds, un comité intérimaire a été créé pour poser les bases, dans les mois qui viennent, de cette nouvelle organisation.

Cette organisation, baptisée IOPS (International Organization for a Participatory Society) repose pour l'instant sur un texte descriptif initial qui essaie de définir les grandes lignes de ses objectifs et de son fonctionnement. Il s'appuie pour partie sur le concept d'«économie participaliste» élaboré par Michael Albert (pour une description française, voir l'ouvrage Après le capitalisme chez Agone) mais va bien au-delà. Ce texte n'est qu'une ébauche qui sera complétée, affinée, mise à jour au fur et à mesure du processus de création de la nouvelle organisation.

Nous venons de terminer de traduire ce texte fondateur en français, il a été mis en ligne il y a peu sur la page d'accueil de Znet (menu de gauche, lien Aims - French). Vous trouverez le texte complet ci-dessous.

N'hésitez pas à faire circuler, en attendant la mise en place prochaine d'un site Web qui devrait aider à la mise en place concrète de cette nouvelle organisation.


Une nouvelle organisation

Suite aux résultats du sondage sur une nouvelle organisation, à la réussite de notre première collecte de fonds, et aux premières suggestions émises par la comité consultatif intérimaire, nous lançons les trois étapes clés pour la mise en place de notre organisation. Ces étapes sont :

(1) Mettre en place une plateforme Web globale pour l'ensemble de l'organisation et qui comprend des sous-sites pour les branches et les sections locales

(2) Recruter de nouveaux membres et aider les membres existants à créer et développer collectivement des branches et des sections locales et nationales

(3) Préparer une convention pour établir la définition de l'organisation.

Quand le site Web de l'organisation sera fonctionnel, nous mettrons en place une organisation intérimaire, qui comptera initialement environ 2000 à 3000 membres. Ces membres initiaux faciliteront une organisation depuis la base dans diverses villes de par le monde et la création de sections au niveau local et de branches au niveau national. En fait, ce travail local a déjà commencé et dans certains cas progresse de façon admirable.

Le site de la nouvelle organisation ne se contentera pas de présenter et de publier des contenus de la nouvelle organisation internationale, mais comprendra également des sous-sites par pays et par villes disposant d'une organisation, chacun sous le contrôle de leurs membres respectifs. Chaque sous-site sera à la fois autonome et étroitement lié aux autres pour les questions d'ordre général, le partage d'informations, etc.

La plateforme Web devra être facile d'utilisation avec des fonctionnalités puissantes d'échanges et de mise en réseau, incluant notamment des possibilités d'explorer et de débattre de règles et de questions organisationnelles à tous les niveaux, des façons de voter à tous les niveaux, ainsi que des outils facilitant la collecte de fonds. Elle sera par la suite enrichie d'autres fonctionnalités selon les demandes des membres.

D'ici la fin de l'été, le site de la nouvelle organisation devrait pouvoir accueillir les membres et gérer leurs différentes fonctions, permettant de développer l'organisation depuis sa base tout en établissant une convention fondatrice se basant sur la description mise en place pour le sondage ainsi que sur les idées du comité consultatif intérimaire.

Lorsque l'organisation intérimaire sera en place, les votes des membres guideront la mise en place d'une convention pour une organisation autogérée, transparente, internationale, issue de sa base, fondée sur des branches nationales et des sections locales à la fois autonomes et étroitement liées, le tout permettant d'impulser et de soutenir un activisme oeuvrant pour un monde nouveau aux niveaux local, national et international.

Comité consultatif intérimaire

Ezequiel Adamovsky - Argentine, Michael Albert - US, Stanley Aronowitz - US, Elaine Bernard - US/Canada, Patrick Bond - Afrique du Sud, Jason Chrysostomou - UK, Noam Chomsky - US, John Cronan - US, Ben Dangl - US, Denitsa Dimitrova - UK/Bulgarie, Mark Evans - UK, Ann Ferguson - US, Bill Fletcher - US, Justin George - Australie, Eva Gollinger - Venezuela, David Graeber - US/UK, Andrej Gubacic - US/Balkans, David Harvey - US, Bruno Jantti - Finlande, Antti Jauhiainen - Finlande, Pat Korte - US, Yoann Le Guen - Pays de Galles, Mandisi Majavu - Afrique du Sud, Yotam Marom - US, David Marty - Espagne, Trever Ngwane - Afrique du Sud, Pablo Ortellado - Brazil, Harpreet Paul - UK, Cynthia Peters - US, John Pilger - UK, Justin Podur - Canada, Vijay Prashad - US, Nikos Raptis - Grèce, Paulo Rodriguez - Belgique, Anders Sandstrom - Suède, Boaventua Santos - Portugal, Lydia Sargent - US, Steve Shalom - US, Uruj Sheikh - US, Chris Spannos - US, Paul Street - US, Emma Tarver - US, Fernando Vegas - Venezuela, Marie Trigona - Argentine, Chico Whitacker- Brésil, Gregory Wilpert - US, Florian Zollmann - UK/Allemagne

Description des principes d'organisation guidant les décisions intérimaires

Les principales priorités de l'organisation sont :

  • traiter en priorité des questions économiques, des inégalités sociales, des questions politiques, de la lutte contre le racisme, des questions de genre et de parenté, de l'écologie et des relations internationales, sans en privilégier aucune par rapport aux autres.
  • chercher à dépasser le capitalisme, le racisme, le sexisme et l'autoritarisme, y compris l'économie de marché et le socialisme de planification centralisée du XXe siècle.
  • explorer de manière ouverte et encourager des perspectives à long terme pour inspirer et orienter l'activité présente.
  • rejeter la recherche de propositions trop détaillées qui dépasseraient les besoins et les connaissances actuelles du mouvement.
  • considérer le programme du mouvement comme dépendant largement du lieu et de l'époque, et par conséquent mettre continuellement à jour ses analyses, perspectives et stratégies à la lumière d'idées ou de faits nouveaux.

Perspectives d'engagement

Politiques et gouvernementales

L'organisation recherche un nouveau type de gouvernement et d'exercice du pouvoir qui :

  • aide l'ensemble des citoyennes et citoyens à débattre et délibérer de façon suffisante, permettant ainsi une participation réelle aux prises de décision.
  • utilise des mécanismes transparents pour mettre en oeuvre et évaluer les décisions prises.
  • donne à chaque citoyen pour chaque décision un poids directement proportionnel aux conséquences que celle-ci pourra avoir sur eux.
  • utilise tous les moyens disponibles pour atteindre l'autogestion : assemblées, conseils, participation directe, représentation ou délégation, consensus, systèmes de vote à la majorité ou selon d'autres algorithmes.
  • offre le maximum de libertés civiques, ce qui comprend notamment les libertés d'expression, de la presse, de religion, de réunion et d'organisation de partis politiques.
  • facilite et protège la dissidence ainsi que les idées et mouvements contestataires.
  • promouvoit la diversité pour que les individus et les groupes puissent poursuivre leurs propres objectifs sans empiéter sur les droits des autres individus et groupes.
  • régle les conflits et les violations des lois et réglements de manière juste, pacifique et constructive en recherchant à la fois la justice et la réhabilitation.
  • soutient l'ensemble de ceux qui contribuent à résoudre des problèmes et à explorer de nouvelles possibilités pour garantir l'absence de hiérarchies politiques qui privilégieraient certains individus par rapport à d'autres.
Économique

L'organisation recherche un nouveau type d'économie de telle sorte que :

  • aucun individu ou groupe ne peut posséder des ressources ou des moyens de production, afin que cette propriété ne puisse pas affecter le pouvoir de décision ou les revenus de quiconque.
  • les personnes qui travaillent plus longtemps, plus durement ou dans des conditions pénibles à des tâches socialement utiles (ce qui inclut l'éducation et la formation) reçoivent un revenu proportionnel à l'effort ainsi déployé. Aucun revenu ne peut être lié à la propriété, au pouvoir de négociation, ou à la valeur des biens ou services produits par leur travail.
  • ceux qui ne peuvent pas travailler reçoivent un revenu.
  • les travailleurs ont autant que possible leur voix dans les prises de décision, à proportion des effets que ces décisions auront sur eux. Ces décisions peuvent parfois être prises à la majorité, parfois au consensus, ou par d'autres méthodes.
  • chacun profite de conditions de travail propices à être suffisament informé et sûr de soi pour participer de manière effective aux prises de décision. Ceci implique la mise en place d'une nouvelle organisation du travail qui permette à chacun d'avoir la même part d'activités les plus gratifiantes et autonomisantes. Ceci implique du même coup le rejet d'une division du travail semblable à celle d'aujourd'hui, où environ un cinquième des travailleurs bénéficient des travaux les plus gratifiants pendant que les 80% restant sont cantonnés à des activités routinières, répétitives et gérées par d'autres.
  • la répartition des ressources se fait à travers une négociation coopérative et décentralisée portant sur les biens et services produits et consommés. Cette négociation peut se faire à travers des conseils de travailleurs et de consommateurs ou par tout autre méthode appropriée. Dans aucun cas il n'y aura de compétition à travers le marché ni de planification centralisée et imposée.
Genre et relations familiales

L'organisation recherche un nouveau système de rapports de parenté et de genre qui :

  • ne privilégie aucune structure familiale par rapport à d'autres, mais soutient au contraire activement tous les types de familles qui soient par ailleurs en accord avec les autres normes et pratiques sociales.
  • favorise le bien-être des enfants et affirme la responsabilité de la société sur l'ensemble de ses enfants. Ceci implique la reconnaissance et l'affirmation du droit des types de famille différents à avoir des enfants, à deleur apporter de l'amour et le sentiment d'appartenance et d'enracinement dont ils ont besoin.
  • minimise ou élimine les droits liés à l'âge, en préférant des moyens non arbitraires pour déterminer si un individu est suffisamment jeune ou vieux pour participer à la vie économique ou politique, prendre part à certaines activités ou bénéficier de droits ou privilèges.
  • respecte le mariage et autres relations durables entre adultes en tant que pratiques religieuses, culturelles ou sociales, mais rejette le mariage comme moyen d'obtenir un statut social ou des avantages financiers.
  • considère le soin aux personnes comme une activité importante et valorisée, fait en sorte que celle-ci fasse partie de la responsabilité sociale de chaque citoyen et citoyenne et met en oeuvre les moyens nécessaires pour assurer une répartition équitable des tâches et des bénéfices.
  • affirme la diversité des formes de plaisir sexuel, d'identité personnelle et de relations intimes, tout en s'assurant que chacun respecte l'autonomie, l'humanité et les droits des autres.
  • fournit une éducation à la sexualité variée et épanouissante et interdit légalement toute forme de relation sexuelle non consentie.
Culture et communautés

L'organisation recherche un nouveau système de relations entre les cultures et les communautés qui :

  • garantit que chacun et chacune peut avoir des identités sociales et culturelles multiples, fournit à tous et à toutes les lieux et ressources nécessaires pour exprimer leurs diverses identités tout en reconnaissant que l'identité la plus importante pour une personne en un instant donné dépend de la situation et de l'appréciation de cette personne.
  • reconnaît explicitement que les droits et les valeurs existent indépendamment des identités culturelles, de manière à ce que chaque personne mérite équité, solidarité, liberté et autonomie. Si la société garantit le droit de chacun à s'affilier librement et encourage la diversité, ses valeurs centrales sont considérées comme universelles.
  • garantit un libre droit d'entrée et de sortie de toute communauté culturelle, et affirme que les communautés dont on peut entrer et sortir librement sont autonomes et gérées par leurs membres tant que leur fonctionnement et leurs actions ne sont pas en conflit avec les lois en vigueur.
International

L'organisation vise à mettre en place de nouvelles institutions internationalistes régionales et globales qui :

  • mettent fin à toutes les formes d'impérialisme : colonialisme, néo-colonialisme, néo-libéralisme, etc.
  • diminuent constamment les disparités économiques entre les pays
  • protègent les modèles culturels et sociaux propres à chaque pays de toute violation extérieure.
  • facilitent le développement de relations internationales selon le désir des peuples, et remplace donc la mondialisation des marchés et des multinationales par une mondialisation internationaliste.
Écologique

L'organisation recherche de nouvelles relations écologiques qui :

  • prennent en compte l'ensemble des coûts et bienfaits écologiques, sociaux et individuels des choix économiques et sociaux à court et à long terme de manière à ce que les populations futures puissent prendre des décisions informées au sujet des volumes de production et de consommation, de la durée du travail, de l'indépendance et de l'auto-suffisance, de la production et de l'usage de l'énergie, de l'agriculture, de la pollution, des politiques climatiques, de la conservation de l'environnement et de tout autres objectifs ou activités dans le cadre des décisions prises librement pour les politiques futures
  • encourage la prise de conscience au sujet des relations et des responsabilités écologiques afin de préparer les futurs citoyennes et citoyens aux décisions politiques à prendre concernant les droits des animaux, le végétarisme, ou d'autres questions qui dépassent celles du développement soutenable ou de l'agriculture, en accord avec leurs préférences écologiques et les programmes économiques et sociaux d'ordre plus général.

Engagements concernant l'organisation et son programme

Principes généraux d'action

Le programme général de l'organisation, qui sera bien sûr régulièrement mis à jour et adapté, devra cependant toujours :

  • incorporer des éléments pour un changement de long terme dans ses projets actuels concernant les classes sociales, le racisme, le sexisme et les relations de pouvoir, à la fois par la manière dont les membres agissent et par la mise en place active d'institutions pouvant être présentées comme des alternatives libératrices par rapport aux institutions existantes.
  • chercher à augmenter le nombre de ses membres parmi les classes, nationalités et genres qu'elle entend soutenir.
  • rechercher échanges et unité avec des publics bien plus larges que ses seuls membres, notamment en attirant et en autonomisant les membres les plus jeunes et en construisant et soutenant différentes luttes et mouvements sociaux.
  • rechercher des changements sociaux dont la population peut profiter immédiatement, tout en faisant en sorte, à travers les objectifs visés et atteints ainsi que les modes d'organisation, que celle-ci soit mieux placée pour continuer à lutter pour obtenir davantage.
  • mutualiser les efforts, les ressources et les expériences entre les pays, tout en reconnaissant que les stratégies les plus appropriées sont souvent différentes selon les lieux.
  • rechercher des changements à court terme à travers ses actions et ses programmes et par son soutien à des projets et des mouvements plus larges, selon les décisions des membres concernés aux niveaux international, national et local. Ceci implique notamment de traiter les questions liées au réchauffement climatique, au contrôle de l'armement, à la guerre et à la paix, au volume et à la nature des biens et services produits, à l'agriculture, à l'éducation, à la santé, à la répartition des richesses, à la durée du travail, aux inégalités de genre, au racisme, aux médias, aux lois et législations, etc., selon les choix des membres.
  • fournir un soutien financier, légal, matériel et émotionnel à ses membres pour qu'ils puissent participer autant qu'ils le souhaitent et surmonter les difficultés d'une participation à des actions radicales.
  • améliorer de manière significative les conditions de vie de ses membres, les aider à améliorer leur estime de soi, leurs connaissances, leurs compétences, leur confiance en soi, leur santé mentale, physique, sexuelle et spirituelle, et même leurs liens sociaux et leurs loisirs.
  • développer, débattre, diffuser et promouvoir des informations, analyses, visions et stratégies véridiques entre ses membres et dans le reste de la société. Ceci inclut le développement et le soutien à des médias alternatifs aussi bien qu' à des modes de communication directs, en face à face.
  • utiliser actions d'éducation, manifestations, démonstrations, boycotts, grèves et actions directes pour obtenir des changements positifs et construire des mouvements.
  • n'accepter l'utilisation de la violence que comme un recours extrême et réellement justifié, et cultiver une attitude résolument non-violente.
  • évaluer la pertinence de s'engager dans des élections au cas par cas, et cultiver une attitude extrêmement prudente envers les processus électoraux.
Structure et fonctionnement

La structure et le fonctionnement de l'organisation, qui seront régulièrement adaptés et mis à jour, devront cependant toujours :

  • rechercher à être en interne autogérés et sans classe. En particulier, ils ne devront pas permettre qu'une minorité ayant davantage de compétences, d'informations et de confiance en elle puisse former une hiérarchie formelle ou informelle dotée d'un pouvoir de décision et reléguant les membres moins bien préparés à une attitude d'obéissance et/ou à des activités de routine.
  • s'efforcer de mettre en oeuvre la règle d'autogestion qui veut que "la voix de chacun a de l’impact sur une décision à proportion de ce qu’il sera affecté par cette décision".
  • garantir à ses membres le droit d'organiser des "courants" contestataires ou dissidents et assurer à ces "courants" le plein accès au débat démocratique.
  • se réjouir des débats internes, et laisser autant de place que possible aux idées contestataires pour qu'elles puissent exister et être évaluées au même titre que les idées les plus répandues.
  • respecter la diversité, de manière à ce que les sections nationales, régionales et locales puissent s'adapter à leur environnement et mettre en place le programme qu'elles auront elles-mêmes choisi, tant que leurs choix ne sont pas en conflit avec les principes et objectifs partagés au sein de l'organisation ou avec les actions et préoccupations d'autres groupes.
  • fournir de nombreuses opportunités aux membres de participer à la prise de décision sur le fonctionnement de l'organisation. Ceci comprend notamment des délibérations collectives pour parvenir aux décisions les plus judicieuses, tout en mettant en oeuvre des mécanismes pour s'assurer que ces décisions ont été prises de manière appropriée.
  • assurer une grande transparence de toutes les actions menées par des personnes élues ou déléguées. Le fait de maintenir des actions ou décisions secrètes, par exemple pour éviter la répression, devra être dûment justifié.
  • fournir un mécanisme permettant de destituer un représentant dont les membres jugeraient qu'il ne les représente pas de manière adéquate.
  • fournir des moyens de résoudre les conflits internes de manière juste, pacifique et constructive.
  • répartir les tâches les plus importantes et celles plus routinières de manière à s'assurer que personne ne peut contrôler l'organisation grâce à un monopole sur certaines informations ou à un pouvoir de décision quotidien.
  • s'attendre à ce que les membres participent activement à la vie de l'organisation, qu'ils en assument la responsabilité collective et participent aux actions de manière unifiée.
  • inclure l'ensemble des membres dans la construction de propositions, les débats et la prise de décision, et considèrer tout manque de participation comme un problème important à gérer en priorité.
  • offrir des structures internes facilitant la participation de tous. Ceci comprend, autant que possible, des possibilités de gardes d'enfants durant les réunions et les événements, la recherche de moyens pour atteindre ceux qui sont occupés par des activités domestiques ou par des emplois du temps professionnels chargés.
  • surveiller et s'occuper de toute manifestation interne éventuelle de sexisme, racisme, homophobie ou racisme de classe, et offrir dans les différents projets des rôles adaptés à des personnes se trouvant dans des situations différentes.

lundi 16 mai 2011

Les hommes de ménage noirs sont sous le choc

Les faits présumés sont désormais connus. Samedi dernier, en milieu de journée, Raymond F., homme de ménage de 32 ans d'origine africaine travaillant dans un grand hôtel parisien, entre dans la chambre numéro 506 pour procéder à son nettoyage. C'est à ce moment-là qu'une riche sexagénaire américaine, pensant être seule dans sa suite, sort nue de la salle de bains. D'après elle, Raymond F. aurait alors fermé la porte, l'aurait forcée à pratiquer une fellation et aurait tenté de la violer avant qu'elle ne parvienne à s'enfuir, sous le choc.

La présomption d'innocence incite évidemment à la prudence, à la décence et à la plus grande retenue. La justice doit faire son travail afin de rétablir la vérité des faits et de leur déroulement. Les premières réactions face à ce drame ne se sont cependant pas faites attendre.

L'une des collègues de travail de Raymond F. a tout d'abord affirmé : «ma pensée en cet instant va à sa famille, à ses proches et aussi à l'homme qui traverse cette épreuve» 1. Un autre affirme «je pense d'abord à sa famille, et au FC Poissy-les-Ouilles», 2 club de football dont Raymond F. est actuellement président.

Nombreux sont ceux qui expriment des doutes sur la version des faits de la victime. Un proche explique ainsi que «l'intelligence reconnue par tous [de Raymond F.] ne paraît pas compatible avec le fait de séquestrer une sexagénaire pour la violer» 3, et d'autres insistent sur le fait que Raymond F., beau garçon et grand séducteur, aurait sans problème pu trouver meilleur parti et ne se serait jamais jeté sur une sexagénaire.

Certains insinuent que la victime aurait pu agir pour obtenir des compensations financières. Il serait d'ailleurs «aisé de piéger une personnalité aussi peu résistante aux attraits de la gent féminine que Raymond F.» 4. D'autres vont plus loin en rappelant «qu'on avait promis [à Raymond F.] le feu nucléaire dès qu'il ferait ses premiers pas de candidat» à la présidence du FC Poissy-les-Ouilles 5.

Deux ministres ont souhaité communiquer sur cette affaire en affirmant qu'«en plus de la victime présumée, la sexagénaire, il y a une victime avérée, c'est la France» 6 ou que, de même, «il y a une victime évidente, c'est l'image de la France» 7.

Les images de Raymond F. sortant menotté du commissariat ont également suscité de nombreuses réactions, comme par exemple cette autre collègue de travail, qui a «trouvé cette image d'une brutalité, d'une violence, d'une cruauté inouies» 8.

Enfin, la presse nationale s'est attelée à son devoir de toujours, informer et découvrir la vérité des faits. Non sans un certain humour, comme ce journal titrant «Raymond F. dans de sales draps» ou affichant en une : «La débandade» 9. D'autres journaux n'ont reculé devant aucune enquête de terrain, permettant de recueillir d'importants témoignages comme cette description de la victime présumée : «Le voiturier m'a dit que cette sexagénaire était très jolie, qu'elle avait de gros seins et de belles fesses» 10.

vendredi 15 avril 2011

Envoi de mail automatisé en cas d'erreur suite à un git pull

J'utilise git pour différentes choses au quotidien, mais en particulier pour synchroniser divers fichiers entre différentes machines (fichiers de conf, fichiers org, etc.).

Pour cela j'ai un scipt shell très simple qui se lance à chaque démarrage ou extinction de la machine et qui effectue une série de git pull / git push. Un truc du genre :

echo "-> Syncing ~"
cd /home/julien
git pull
git add .
git commit -a -m  "Maj auto home" 
git push 

Le problème avec cette méthode est que je ne regarde pas sytématiquement la sortie de ce script, et que je peux donc passer à côté de messages d'erreur me signalant des conflits non résolus suite à un merge automatique. Je cherchais donc un moyen d'être averti par mail si ce type d'erreur se produit.

Suite à une question sur StackOverflow, j'ai pu voir qu'il ne semble pas y avoir de hook dans git pour ce type de cas de figure. Je me suis donc rabattu sur le code de retour de git pull.

Ce qui donne en gros le code suivant :

echo "-> Syncing ~"
cd /home/julien
git pull 2> /tmp/git_pull_output.txt
if [ $? != 0 ]
then mail -s "[git] Git pull failed for home" julien < /tmp/git_pull_output.txt 
fi

Maintenant j'attends d'avoir un vrai conflit pour voir si ça marche… :-)

lundi 17 janvier 2011

Modifier la hauteur de la «addon bar» sous Firefox 4

Depuis la beta 8 de Firefox 4, la barre de statut a été remplacé par une «barre de modules» (addon bar). L’argument était de fournir un espace plus configurable avec possibilité d’y placer n’importe quel bouton ou widget.

Un comportement qui m’a dérangé avec cette nouveauté est l’affichage de l’url des liens survolés dans la barre d’adresse à la place de la barre de statut : je ne suis pas arrivé à m’y faire, même au bout de plusieurs semaines. La solution s’appelle Status-4-evar, une extension permettant de retrouver le fonctionnement «classique» de la barre de statut :

https://addons.mozilla.org/en-US/firefox/addon/235283/

Un autre petit problème était la hauteur de cette nouvelle barre, plus importante que précédemment, gâchant inutilement un espace vertical parfois précieux. Ceci peut se régler facilement en éditant son fichier userChrome.css (celui-ci se trouve dans le répertoire ~/.mozilla/firefox/<blahblah>.default/chrome/) et en y ajoutant :

#addon-bar {
padding: 1px !important;
height: 25px !important;
}

lundi 3 janvier 2011

How to post on a dotclear blog with org-mode

I just discovered a very great tool called org2blog that allows to post articles to a Wordpress blog directly from Emacs’ org-mode :

https://github.com/punchagan/org2blog

You just have to set up org2blog with the xmlrpc interface of your blog, and then you can create a new org-mode buffer which will be automatically exported to html and then published to your blog.

Some very great features :

  • HTML export, source code highlighting, org-babel, etc. are fully supported out of the box !
  • you can use an existing org-mode buffer or create a new one to post your article
  • thanks to the embedded post id in the org-mode buffer, you can edit and update an already posted article
  • categories and tags are supported as CATEGORY and TAGS buffer properties, and it even features autocompletion !

You can even post some images directly form your org-file :

/public/_____________20110104_org2mode.jpg

And, finally, I also discovered that org2blog fully supports Dotclear via it’s xml-rpc interface. So I think I know how I will post content on this blog now.

And, finally, just a little proof that org-babel works :

x <- rnorm(100)
summary(x)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
-1.9840 -0.5460  0.1608  0.1768  0.8476  2.2070 

jeudi 30 décembre 2010

Ce blog est désormais accessible en nozav.42 !

Pour tester et soutenir l’expérience 42, ce blog est désormais accessible via l’adresse :

…si bien sûr votre système a été configuré pour résoudre ce nouveau TLD alternatif.

Pour savoir comment faire (c’est pas forcément trivial, le plus simple est sans doute d’utiliser les DNS fournis par Geeknode), comprendre le projet, voire enregistrer votre propre nom de domaine en .42, c’est là :

vendredi 12 novembre 2010

Console graphique avec grub2 sous Debian

Le passage à grub2 sous Debian a entraîné quelques changements dans la configuration du bootloader, et notamment si on souhaite obtenir une console graphique au moment du boot et pas seulement 25 lignes et 80 colonnes de texte.

À noter que l’ancienne méthode fonctionne toujours, à savoir passer un argument supplémentaire du type vga=788 dans les paramètres du noyau, mais ça n’est plus la méthode recommandée.

Si on regarde dans le fichier /etc/default/grub, on constate la présence d’un paramètre GRUB_GFXMODE qui permet de spécifier une résolution pour les consoles graphiques. Celui-ci fonctionne pour l’invite de grub (celle où vous pouvez choisir quel noyau booter), mais n’est pas prise en compte pour la console qui s’affiche ensuite. Pour cela il manque en effet un paramètre, que nous pouvons ajouter à l’aide de la ligne suivante dans /etc/default/grub :

GRUB_GFXPAYLOAD_LINUX=keep

Mettez ensuite à jour votre grub :

$ sudo update-grub

Et voilà ! Vous devriez normalement avoir une jolie console graphique au prochain démarrage.

En guise de complément, on pourra aussi noter que :

  • on peut configurer la police de la console graphique et sa taille en modifiant les paramètres FONTFACE et FONTSIZE du fichier /etc/default/console-setup.
  • si vous ne savez pas quelle résolution indiquer dans GRUB_GFXMODE, vous pouvez ouvrir une console grub en tapant sur c à l’invite de grub et tapez ensuite la commande vbeinfo, qui liste les modes graphiques supportés par votre système.

lundi 30 août 2010

How to automatically generate timelines that can be split between several pages

I recently wanted to create a PDF timeline that could be automatically split between several A4 pages for later cutting and pasting. After a bit of LaTeX and Ruby I finally came out with a little timeline-generator script :

http://github.com/juba/timeline-generator

The principle is quite simple : you specify several parameters in a config file such as the start and end dates, the number of A4 sheets, the sheets orientation, etc., and the script generates two PDF files : one with your timeline on one big page, and another with the same timeline split between the given number of A4 pages. To make cut-and-pasting easier, the second file includes crop marks and a small overlapping between pages.

To take a look at what the generated files look like :

The title, months names and number formatting are in french, but english is also supported.

Optionally, a calendar scale (days and months of year) and a time of day scale (hours and minutes) can be added at the bottom of the timeline. The idea is to allow some comparisons such as «if the 0 to 2010 timeline was a day, the World War II would have taken place between 23h09 and 23h14. If it was a year, it would have happened between December 18th and December 20th».

If you have access to a functional installation of Ruby and PDFLaTeX, the script should be quite easy to use. Everything is explained in the README file on GitHub.

But if you are interested by this type of timeline, don’t hesitate to drop me a mail or a comment with the main parameters (start and end date, number of sheets…), and I’ll generate and send you back the PDF files.

Générer automatiquement des frises chronologiques sur plusieurs pages

Je me suis récemment amusé à essayer de fabriquer des frises chronologiques avec l’idée de les imprimer sur plusieurs pages A4 pouvant être découpées et réassemblées par la suite. Comme je ne voulais pas faire ça à la main et avoir quelque chose de réutilisable, j’ai mélangé un peu de Ruby et de LaTeX, ce qui a donné un script automatique de génération de chronologies :

http://github.com/juba/timeline-generator

Le principe est assez simple : vous indiquez dans un fichier de configuration différents paramètres, dont évidemment la date de départ, la date de fin, le nombre de feuilles A4, leur orientation, etc., etc. (quasiment tous les aspects de mise en page sont configurables), et le script vous génère deux fichiers PDF : l’un avec votre frise chronologique sur une seule grande page, et l’autre découpée en autant de feuilles A4 que désiré. Avec en plus, si c’est pas le bonheur, des marques pour la découpe et un petit recouvrement d’une page sur l’autre pour faciliter l’assemblage.

Pour avoir un aperçu du résultat :

Vous remarquerez au bas de la chronologie une petite originalité : la présence d’un axe représentant les jours et mois de l’année, et d’un autre représentant les heures de la journée. L’idée est de pouvoir effectuer des comparaisons du genre «si la période de 0 à 2010 était une journée, la seconde guerre mondiale aurait lieu entre 23h09 et 23h14. Si c’était une année, elle aurait eu lieu entre le 18 et le 20 décembre». Je ne sais pas encore si c’est une bonne idée ou si c’est plus perturbant qu’autre chose, mais en tous cas on peut supprimer ces “extras” dans le fichier de configuration.

Si vous avez une installation fonctionnelle de Ruby et PDFLaTeX sur votre machine, ça devrait être assez simple à faire tourner, les explications sont données dans le fichier README sur Github (en anglais).

Dans le cas contraire, si vous êtes intéressé par une chronologie de ce type, n’hésitez pas à m’envoyer un mail avec les principaux paramètres (date de départ, date de fin, nombre de pages…) et je vous renverrai le résultat.

Bon, reste plus qu’à trouver un mur pour afficher tout ça, maintenant… :-)

- page 1 de 10