Wednesday, May 19, 2010

Gource et Dokuwiki : en couleur

ça y est suite aux différentes demandes, je viens d'ajouter la coloration de la représentation Gource. Vous pouvez donc télécharger la nouvelle version.

#!/bin/python

"""
This program parse logs of a dokuwiki
and tranform them for gource (a log viewer)
http://code.google.com/p/gource/

developped by WolverineX02
site : http://wolverinex02.blogspot.com

"""
import glob
import os.path
import getopt
import sys
import re

WHITE = "11FFAA"
GREEN = "00F000"
vector = (1,10,100)
start_page_name = "start"

def RGBToHTMLColor(rgb_tuple):
    """ convert an (R, G, B) tuple to #RRGGBB """
    hexcolor = '#%02x%02x%02x' % rgb_tuple
    # that's it! '%02x' means zero-padded, 2-digit hex values
    return hexcolor

def HTMLColorToRGB(colorstring):
    """ convert #RRGGBB to an (R, G, B) tuple """
    colorstring = colorstring.strip()
    if colorstring[0] == '#': colorstring = colorstring[1:]
    if len(colorstring) != 6:
        raise ValueError, "input #%s is not in #RRGGBB format" % colorstring
    r, g, b = colorstring[:2], colorstring[2:4], colorstring[4:]
    r, g, b = [int(n, 16) for n in (r, g, b)]
    return (r, g, b)

def colormodify(colorstring):
    rgb_tuple = HTMLColorToRGB(colorstring)
    r, g, b = (rgb_tuple[0]+vector[0]) % 255,(rgb_tuple[1]+vector[1]) % 255,(rgb_tuple[2]+vector[2]) % 255
    return RGBToHTMLColor((r, g, b))

def listdirectory(path,color):
    l = glob.glob(path+"/*")
    for i in l:
        if os.path.isdir(i):
                listdirectory(i,colormodify(color))
        else:
                readfile(i,color)

def listdirectory2(path):
    """list all the files like *.changes,
       read them and output them in gource's log syntax
    """
    for root, dirs, files in os.walk(path):
        for i in files:
            if  (re.search('\.changes$', i)):
                fichier = os.path.join(root, i)
                readfile(fichier,GREEN)

def readfile(fichier,color):
    """read the file and output for each line of this
       file a log line for Gource
    """

    myfile = open(fichier, 'r')
    for line in myfile.readlines():
        mots = line.split('\t')
        if len(mots)>=6:
            resultat = mots[0] + "|"
            if mots[4] == '':
                mots[4]  = 'Anonymous'
            resultat += mots[4] + "|"
            resultat += translate(mots[2]) + "|"
            resultat += mots[3].replace(':', '/')
            if mots[3].rfind(start_page_name) == len(mots[3])-len(start_page_name):
                resultat += "|" + color
            else:
                resultat += "|" + colormodify(color)
            print resultat
    myfile.close()


def translate(mot):
    """translate the dokuwiki vocabulary to the gource one
       C (also cc and sc from discussion plugin) ->A
       E (also ec from discussion plugin) -> M
       D (also dc and hc from discssion plugin) -> D
       other -> M
    """
    if mot.upper == "C" or mot == 'cc' or mot == 'sc':
        return "A"
    elif mot.upper == "E" or mot == 'ec':
        return "M"
    elif mot.upper == "D" or mot == 'dc' or mot == 'hc':
        return "D"
    else:
        return "M"

def main(argv):
    """principal function
    """
    try:
        opts, args = getopt.getopt(argv, "hd:", ["help", "dokuwiki="])
    except getopt.GetoptError:
        usage()
        sys.exit(2)
    for opt, arg in opts:
        if opt in ("-h","--help"):
            usage()
            sys.exit()
        elif opt in ("-d","--dokuwiki"):
            print listdirectory(arg,WHITE)


def usage():
    """this function will display how to use this script
    """
    print "This script will output change logs of a dokuwiki"
    print "in a friendly way for gource"
    print "how to use it :"
    print "python gourcedoku.py -d ~/Sites/MyDokuwiki/ | sort > dokusort.log"
    print "and then :"
    print "gource --log-format custom dokusort.log --stop-position 1.0 \ "
    print "--stop-on-idle --file-idle-time 10000000"
    print "---"
    print "-h : help "
    print "-d : meta directory of your dokuwiki"

if __name__ == "__main__":
    main(sys.argv[1:])

Tuesday, June 03, 2008

Wikicalc : le premier tableur collaboratif OpenSource

Comme je l'ai indiqué dans mon dernier poste : WikiCalc est un tableur collaboratif fonctionnant sur le principe du wiki. Il est complètement écrit en perl. Pour l'installer, rien de plus simple, il suffit de commencer par installer les outils nécessaires sur sa bonne vieille Debian :
apt-get install apache2 libapache2-mod-perl2
Puis de télécharger les sources : wikicalc-1-0.tar.gz. Ensuite peut commencer l'installation proprement dite :
cd /var/www
tar xvzf wikicalc-1-0.tar.gz
ln -s wikicalc-1-0 wikicalc

Reste encore à rendre Wikicalc accessible depuis votre serveur Web : par rapport à la configurationi par défaut, il suffit d'y ajouter :



NameVirtualHost *
<VirtualHost *>
ServerAdmin webmaster@localhost

DocumentRoot /var/www/wikicalc/
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/wikicalc/>
Options Indexes FollowSymLinks MultiViews ExecCGI
AddHandler cgi-script .cgi .pl
AllowOverride None
Order allow,deny
allow from all
</Directory>
</VirtualHost>



On charge le module perl :
a2enmod perl
/etc/init.d/apache2 restart

Pour finir l'installation, rendez-vous sur http://wikicalc.monsite.com/wikicalccgi.pl et suivez les instructions....

Maintenant à vous de jouer

Connaissez-vous Dan Bricklin ???

Cet homme s'appelle Dan Bricklin, il a écrit le programme Visicalc. Comment ça vous ne connaissez pas Visicalc ??? Eh bien, c'est l'ancêtre d'Excel ou de Calc (OpenOffice)... Mais contrairement à Bill, Dan a préféré ne pas copyrighter son oeuvre... Merci Dan ;-)

Pourquoi vous parler de Dan Bricklin ? Simplement parce qu'il est en train de développer un super outil, toujours dans la même optique : un tableur collaboratif nommé Wikicalc. Je l'utilise pour les notes de nos élèves et y reporter les notes avec mes collègues... Adieu les tableaux Excels qu'on ne peut ouvrir qu'en lecture seule parce que votre collègue l'a modifié le matin mais a oublié de le fermer... En plus cet outil a le bon goût d'être Open Source et de reposer sur Perl (un langage que j'adore donc je le souligne ;-) J'espère que beaucoup d'autres personnes vont participer au développement de cet outil, qui je l'espère va concurrencer et peut être remplacer Google Docs... Révons d'un monde totalement Open Source ;-) Amusez-vous bien avec ce nouvel outil promis je l'espère à un grand avenir

Thursday, February 15, 2007

Sony Ericsson w810i et Linux

Malgré tous les problèmes que j'ai pu avoir pour arrêter mon abonnement téléphonique chez Orange twisted, je suis tout de même retourné chez eux pour mon nouvel abonnement
biggrin, ce ne sont pas les plus pourris lol, mon choix c'est peut être porté un peu vite sur le Sony Ericsson w810i wink, j'aurais du vérifier la compatibilité de ce téléphone avec Linux... En effet j'aimerais pouvoir le synchroniser avec Kontact razz, notamment le calendrier, le To-Do et la liste des contacts... Si comme moi vous avez de gros doigts: les clavier des téléphone portable doit être pour vous aussi un cauchemar rolleyes

Le bon point du Sony Ericsson w810i est qu'il est fourni avec un cable USB pour le connecter avec votre PC, quand il se connecte, deux modes sont disponibles:
  1. Transfert de fichier
  2. Mode téléphone
Le mode "Transfert de fichier" vous permet simplement de transférer des données de votre téléphone portable vers Linux. Mais j'ai du mal à faire l'inverse... sad Le mode téléphone peut être utilisé avec Kmobiltools pour voir les contacts, les SMS envoyés et reçu, pour téléphoner et envoyer des SMS. Mais je n'ai toujours pas trouvé l'ultime outil me permettant de synchroniser mon téléphone portable avec mon KDE rolleyes en USB, pour cela je suis en train de tester les logiciels suivant:
  1. Kandy: mouais... ça ne fonctionne pas!
  2. Kmobiletools: fonctionne très bien mais ne répond absolument pas à mon cahier des charges
  3. Wammu/Gammu: interface X très moche mais semble plutôt bien fonctionner quand il ne plante pas
  4. Gnokii: s'utilise en ligne de commande et nécessite de créer soi même un fichier de configuration, c'est normalement ce qu'utilise Kontact mais ça ne fonctionne pas très bien
  5. GCALSYNC: ça s'écarte un peu de ma vision USB et locale, mais ça me permettra au moins de gérer correctement mes rendez-vous.
Pour l'instant je suis réduis à synchroniser mon téléphone sous Windows... et à synchronier Windows avec Linux... autant dire que ce n'est pas la panacée universelle evil mais je cherche et espère bien trouver une solution parfaite

Saturday, December 16, 2006

Mis à jour des clé Debian

Ce matin, en voulant mettre à jour ma Debian, je suis tombé sur ce message cry:
Lecture des listes de paquets... Fait
W: Aucune clé publique n'est disponible pour la/les clé(s) suivante(s) :
A70DAF536070D3A1
W: Aucune clé publique n'est disponible pour la/les clé(s) suivante(s) :
A70DAF536070D3A1
W: Vous pouvez lancer « apt-get update » pour corriger ces problèmes.
Dans ces cas là, deux choses sont envisageables: la version de la clé en mémoire à expire: il vous faut la recharger ou bien le serveur est compromis eek... Dans tous les cas, il vous suffit de recharger la clé pour vous assurer que tout va bien, pour cela en tant que root:
# gpg --recv-key --keyserver wwwkeys.eu.pgp.net A70DAF536070D3A1
gpg: requête de la clé 6070D3A1 du serveur hkp wwwkeys.eu.pgp.net
gpg: /root/.gnupg/trustdb.gpg: base de confiance créée
gpg: clé 6070D3A1: clé publique « Debian Archive Automatic Signing Key (4.0/etch) » importée
gpg: aucune clé de confiance ultime n'a été trouvée
gpg: Quantité totale traitée: 1
gpg: importée: 1
Si vous ne tombez pas sur ce message... C'est qu'il y a un gros problème et que le serveur a été compromis eek ... Ne rigolez pas cela peut arriver même aux meilleurs... Si tout se passe bien comme c'est le cas pour moi, il faut ensuite ajouter la clé au programme apt:
# gpg --export A70DAF536070D3A1 | apt-key add -
OK
on réessaye et tout fonctionne cette fois: youpi razz



Saturday, December 09, 2006

Firefox & Java

Vous est-il déjà arriver sur une page avec un applet java et que vous ne soyez pas capable de le voir... Voici la solution: il suffit d'installer dans un premier temps le java de SUN (sun-java5-jre)
apt-get install sun-java5-jre
le plugin qui va avec... Maintenant allez dans le répertoire des plugins de Firefox:
cd ~/.mozilla/plugins
et il ne suffit plus que de créer un lien symbolique:
ln -sfn /usr/lib/jvm/java-1.5.0-sun/jre/plugin/i386/ns7/libjavaplugin_oji.so ./
ça y est le tour est joué: amusez vous bien

Freemind & Debian

Freemind est une application java, permettant de créer facilement des cartes cognitives. Freemind est publié sous licence GNU GPL. Il existe donc un paquet sous Debian ;-) Installons le... Mais lorsque vous essayez de lancer Freemind, vous allez vous retrouver avec une erreur du genre:
Exception in thread "main" java.awt.AWTError: Cannot load AWT toolkit: gnu.java.awt.peer.gtk.GtkToolkit at java.awt.Toolkit.getDefaultToolkit(libgcj.so.7) at java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment(libgcj.so.7) at java.awt.Window.(libgcj.so.7) at java.awt.Frame.(libgcj.so.7) at javax.swing.JFrame.(libgcj.so.7) at freemind.main.FreeMind.(FreeMind.java:68) at freemind.main.FreeMind.main(FreeMind.java:500) Caused by: java.lang.ClassNotFoundException: gnu.java.awt.peer.gtk.GtkToolkit at java.lang.Class.forName(libgcj.so.7) at java.lang.Class.forName(libgcj.so.7) at java.awt.Toolkit.getDefaultToolkit(libgcj.so.7) ...6 more zsh: exit 1 freemind
en fait il ne peut charger le toolkit gnu.java.awt.peer.gtk.GtkToolkit, qu'à cela ne tienne: installons le java de SUN: java-1.5.0-sun (jre) soit:
apt-get install sun-java5-jre
Réessayons... Même problème: cela signifie qu'il faut indiquer à Debian où regarder: ajoutons donc ces deux petites lignes:
export PATH=$PATH:/usr/lib/jvm/java-1.5.0-sun/bin
export JAVA_HOME=/usr/lib/jvm/java-1.5.0-sun/
La première indique où regarder pour trouver l'application Java, et l'autre où regarder quand on a démarrer Java pour les librairies et autres... Réessayons: ça marche

Saturday, December 02, 2006

Flash Player 9.0 pour Linux

Youpi, ça y est, je vais enfin pouvoir jouer aux jeux flash et pouvoir profiter entièrement du Web 2.0 basé sur Flex2.0. En plus pour une fois rien de difficile: c'est l'enfance de l'art ;-) il suffit de récupérer le plugin à cette adresse:
http://www.adobe.com/go/fp9_update_b2_installer_linuxplugin
vous le décompressez et il ne suffit plus que de copier libflashplayer.so dans votre répertoire utilisateur des plugins de votre renard préféré (Firefox), ce doit être quelque chose comme: ~/.mozilla/plugins/ ... ça y est redémarrez le renard et en route pour tous les sites en flash (vous pouvez tester un jeu MacDo) And now enjoy ...

Tuesday, November 28, 2006

De l'interêt de l'Open Source

Connaissez vous Retina et Nessus? Ce sont tous les deux des scanners de vulnérabilités, c'est-à-dire que vous leur fournissez une cible et quelques informations sur cette dernière du genre un nom d'utilisateur et son mot de passe... Et ces deux logiciels vous fournissent un rapport sur les vulnérabilités de la cible... Ils sont tous les deux équipés d'un système de mise à jour (au moins tous les jours). Mais la grande différence est que l'un est libre et multi plateforme (Nessus) et que l'autre ne fonctionne que sous Windows et est payant. Je travaille un peu à la consolidation des résultats issus de ces scanners... je peux vous dire que maintenant je sais vraiment pourquoi je préfère l'open source et le logiciel libre! Nessus fonctionne naturellement avec MySQL, qui est parfaitement géré au PHP, qui est lui même parfaitement intégré à Apache... Alors que Retina ne fonctionne qu'avec SQL Server qu travers d'un DSN et d'un ODBC... Après avoir compris cela, il vous faut encore exploiter la base de données avec du PHP, j'ai bien essayé mssql_connect mais visiblement il faut changer les dll ... Je me suis donc tourné vers une solution ODBC avec PHP... Tout ça en local car la simplicité de SQL Server Express 2005 n'est qu'apparente et je n'ai toujours pas réussi à le faire fonctionner correctement en réseau... Mais bon il paraitrait que parce qu'on paye on a un meilleur service après vente... Oui Monsieur à part si la société a sa solution bricolée qu'elle veut vous refourguer contre paiement... Elle n'est pas belle la vie... Alors les personnes qui ne voient pas l'interêt de l'Open Source et des logiciels libres... c'est très certainement qu'ils ne considèrent l'ordinateur que comme une grosse console qui sert de temps en temps à écrire une lettre au Père Noël...