Parsing JSON en Python

Laisser un commentaire

Sur de vieux serveurs où l’on ne peut plus installer de packages (c’est du vécu, pas plus tard qu’hier) ou si l’on souhaite limiter le nombre de bibliothèques Python à installer, on peut parser simplement du JSON avec le bout de code suivant :

def parse_json(expression):
    try:
        return eval(expression, {}, {'null': None, 'true': True, 'false': False})
    except Exception, e:
        raise Exception("Error evaluating expression '%s': %s" % (expression, e))

Bien sûr, cela ne vaut une bibliothèque dédiée, mais ça aide…

Décorateur Django pour accès super user

Laisser un commentaire

Il est souvent pratique de n’autoriser l’accès à une méthode d’une vue Django qu’aux seuls super utilisateurs. Pour ce faire, on pourra utiliser le décorateur suivant :

    def super_user(function):
        """Decorator to grant access to super user only."""
        def decorator(request):
            if not request.user.is_superuser:
                raise PermissionDenied("Must be superuser to get configuration")
            return function(request)
        return decorator

Ainsi, la fonction foo() d’une vue ne sera accessible qu’à un super utilisateur si on la décore avec la fonction super_user :

    @super_user
    def foo():
        pass

Enjoy!

Lister les projets d’un repository CVS

Laisser un commentaire

cvs -d :ext:foo@rubyforge.org:/var/cvs/bar rdiff -s -D "1/1/2037"

Requête HTTP en Python

Laisser un commentaire

J’ai eu aujourd’hui besoin de réaliser des requêtes HTTP en Python en contrôlant finement tous les paramètres de la requête (URL bien sûr, mais aussi la méthode, les en-têtes et le corps) et les valeurs de retour (le statut, le message, le corps et les en-têtes). N’ayant rien trouvé répondant à mon besoin, j’ai dû développer ma propre fonction qui pourrait se rendre utile à l’occasion :

import httplib

def http_request(host, path='/', method='GET', body=None, headers={}):
    connection = httplib.HTTPConnection(host)
    connection.request(method, path, body, headers)
    response = connection.getresponse()
    headers = {}
    pairs = response.getheaders()
    if pairs:
        for pair in pairs:
            headers[pair[0]] = pair[1]
    return {'body': response.read(),
        'status': response.status,
        'headers': headers,
        'message': response.reason}

# exemple de requête à Google
response = http_request('google.com')
print "%s %s" % (response['status'], response['message'])
print "Location: %s" % response['headers']['location']

Ce qui donne :

301 Moved Permanently
Location: http://www.google.com/

On lui passe l’hôte et le port à appeler (par exemple foo:8080), le chemin de l’URL (comme /index.html), la méthode (GET, POST, PUT, DELETE ou autre), le corps et les en-têtes (sous la forme d’un dictionnaire). La méthode renvoie un dictionnaire qui contient les entrées body, status, headers et message.

Enjoy!

Une 2CV au prix d’une Ferrari ?

Laisser un commentaire

Mon joli MacBook Pro a flanché ce soir : la machine a commencé par planter de temps en temps, puis sont apparus des artefacts graphiques, et maintenant elle plante systématiquement au bout de cinq minutes.

Je me suis renseigné sur le net et il semble que ce problème soit connu : les cartes graphiques des MacBook Pro de 2007 équipés d’une ATI XT1600 finissent par griller. Le problème c’est qu’Apple ne veut pas reconnaître le soucis et demande un prix exorbitant pour changer la carte mère.

Quand on achète une machine à 2500 €, on s’attend à ce que le hardware soit irréprochable et que la machine dure plus de trois ans ! Or, d’après certains contributeurs des forums, ce problème pourrait être dû à un assemblage de mauvaise qualité de la carte graphique (pâte thermique mal appliquée ou même bouts de scotch obstruant les évents d’aération).

Je commence à me demander si je n’aurais pas acheté une 2CV au prix d’une Ferrari !

Si ce problème n’est pas résolu dans de bonnes conditions, je crois que ce MacBook risque d’être la dernière machine Apple que j’aurai acheté.

Taxinomie des pathologies des informaticiens

5 commentaires

Depuis quelques temps au boulot, j’ai l’impression de me trouver dans un asile d’aliénés : un Napoléon en réunion, un Jésus en séminaire, un Hitler à la pause café. Je réalise que le petit monde de l’informatique est rempli d’illuminés de toutes sortes dont voici une rapide taxinomie :

L’AGILISTE

Ces gens pensent que leur méthode de travail va rendre les développeurs, les clients et les chefs heureux. La mise en pratique aveugle de l’agilité conduit souvent à l’exacte contraire : les développeurs passent leur temps en réunion, les chefs attendent leur démo et le client se tire.
Leitmotiv : le client n’est pas agile.

L’ORIENTÉ OBJET

Pour lui, tout doit être objet. Le moindre bout de code doit comporter au moins une classe, sinon c’est l’excommunication. Le mot script est pour eux une insulte et en écrire est dégoutant. J’aime prendre un malin plaisir à les outrer en leur disant « qui a dit que tout devait être objet ? ».
Leitmotiv : ce n’est pas objet !

LE RESTFOUL

Il pense que HTTP, protocole de transfert pour l’hyper-texte écrit dans les années 90, est parfaitement adapté pour effectuer du RPC sur HTTP et n’en démord pas. Il est l’ennemi juré de SOAP et en tire une certaine aura, à raison.
Leitmotiv : au début, il y avait quatre verbes : GET, POST, PUT et DELETE.

LE PATTERNISTE

Pour lui tout est pattern. Et si ça ne l’est pas, il faut en inventer une ! Ainsi, il y a des gens qui inventent des patterns tous les jours et des sites qui répertorient leurs précieuses créations.
Leitmotiv : tu connais la pattern de la mouche qui zozotte ?

LE FOU DE JAVA

Son dieu est James Gosling qui l’a sauvé des affres du C++. Java devrait être partout, du serveur au téléphone mobile. D’ailleurs, Java est bien plus qu’un langage, c’est une plateforme. De plus, c’est le standard, ne pas choisir Java, c’est un peu punk ! Si vous voulez l’énerver, parlez lui des performances de Java, effet garanti.
Leitmotiv : write once, run everywhere !

L’ADORATEUR DES EJB

Pour lui, des gens doivent écrire des composants, assemblés en belles et grandes applications par un deuxième larron et configurées par un troisième. Le tout doit tourner dans de gros serveurs Oracle sur du matos Sun. Inutile de dire que les seuls qui y croient encore sont des employés d’Oracle !
Leitmotiv : il faut écrire au minimum deux interfaces et une implémentation.
Leitmotiv 2 : la prochaine version des EJB, c’est de la balle !

LE FAN DE L’IOC

Ils pensent que faire un new, c’est mal. En lieu et place, ils préfèrent écrire un élément dans un fichier XML de 3000 lignes et injecter le résultat à l’aide d’une annotation. C’est sûr, c’est mieux !
Leitmotiv : on sait jamais, si on change d’implémentation…

LE PROSÉLITE DE MAVEN

Maven est le standard, point. Si on lui dit que Maven est lent, il répond que Maven est le standard. Si on lui dit que Maven ne marche pas, il répond que Maven est le standard. Si on lui dit que Maven vomit sur la console des tonnes d’infos inutiles, il répond que Maven est le standard. Bref, toute discussion est inutile. D’ailleurs Maven a déjà gagné.
Leitmotiv : il faut écrire un plugin pour faire ça !

LE LISPIEN

Lisp est le meilleur langage de programmation. Il a été écrit dans les années 50, mais on n’a jamais fait mieux et on ne fera jamais mieux, et on peut le prouver. C’est peut être vrai, mais on n’a utilisé du Lisp à grande échelle que dans Emacs, alors les Lispiens sont condamnés à arrêter la programmation ou être Richard Stallman (et le poste est déjà pourvu).
Leitmotiv : le code c’est des données et inversement.

L’EXTREME XML

XML c’est cool, il faut en mettre partout, par milliers de lignes. XML c’est sérieux, il y a les DTD, les XSD et les XSLT. En plus, les éléments avec des attributs dedans, c’est joli. De toute manière, vous n’avez pas le choix, c’est ça ou SGML…
Leitmotiv : comment ça verbeux ?
Leitmotiv 2 : YAML ? C’est quoi ?

EN GUISE DE CONCLUSION

Tout le monde s’est forcément reconnu dans l’une ou l’autre de ces caricatures. Pour ma part, j’ai été un fou de Java de 1996 à 2004 avant de réaliser que le meilleur spécialiste de Java qui ne connait qu’un seul langage ne sera jamais qu’un mauvais développeur.

Il est clair qu’aucune techno ou méthode n’est un marteau doré qui répond à tous les besoins. Inversement, on a naturellement tendance à promouvoir ce que l’on maitrise.

La solution est évidente : maitriser un maximum de langages et techniques de programmation et les mettre en oeuvre à bon escient. Cela conduit certains (dont je fais partie, et je ne suis pas le seul) à apprendre un nouveau langage chaque année et à essayer de le mettre en oeuvre.

Si cette bonne pratique tombe sous le sens, elle est loin d’être encouragée. J’ai observé à plus d’une occasion que l’on préfère les discours des Ayatollah aux approches pragmatiques basées sur l’expérimentation et les résultats concrets. J’ai presque l’impression que la mise en oeuvre de dogmes passe avant la rentabilité.

Traduction en ligne de commande

Laisser un commentaire

J’ai longtemps cherché un script de traduction à lancer depuis la ligne de commande, sans succès. J’ai donc fini par développer le mien, basé sur l’API Google de traduction :

Usage: traduire.py [-h] [-s source] [-t target] phrase à traduire
-h         Afficher cette page d'aide.
-s source  Langue source (au format ISO 'fr', 'en'.. 'en' par défaut).
-t target  Langue target (au format ISO 'fr', 'en'.. 'fr' par défaut).

On peut télécharger ce script à cette adresse : http://cafebabe.free.fr/arc/traduire.py.

Enjoy!

Ignorer les .pyc dans Netbeans

Laisser un commentaire

Par défaut Netbeans affiche les fichiers .pyc dans l’explorateur de projets. C’est assez énervant et voici comment ignorer ces fichiers : aller dans le menu Tools/Options/Miscellaneous/Files. Dans la ligne File Ignored by the IDE (qui est une expression rationnelle), ajouter à la fin :

|^.+\.pyc$

Attention cependant, je me suis aperçu que cette configuration fait que Netbeans ajoute les fichiers .pyc dans la propriété svn:ignore des répertoires des sources. Ceci est critiquable dans la mesure où SVN ignore ces fichiers par défaut.

Enjoy!

Google temps réel

Laisser un commentaire

Après avoir terminé et publié l’article précédent (à propos des raccourcis clavier de Netbeans), j’ai effectué une recherche avec les mots clefs du texte (netbeans raccourcis clavier azerty) et l’article est arrivé en 4ème position. C’était 3 minutes, montre en main, après avoir publié l’article…

Parfois je me demande comment ils font ! La seule solution me semble être un trigger déclenché par WordPress après publication d’un article pour notifier Google. Quelqu’un aurait des infos ?

Raccourcis clavier sous NetBeans

Un commentaire

Les raccourcis clavier sous NetBeans 6.9 et Linux (Mint dans mon cas) avec un clavier AZERTY ne fonctionnent pas toujours correctement : bien que l’éditeur reconnaisse bien le clavier, il gère les raccourcis comme si notre clavier était un QUERTY. Autrement dit, Ctrl-Z (Undo) est reconnu comme Ctrl-W (fermeture de la fenêtre) et inversement. C’est d’autant plus gênant que l’équipe NetBeans annonce qu’elle ne corrigera pas le bug parcequ’il serait dû à la machine virtuelle Java.

On peut cependant corriger le problème à la main en éditant ses raccourcis clavier (Tools/Options/Keymap), en remplaçant par exemple Ctrl-Z par Ctrl-W pour Undo. Pour bien faire, il faudrait corriger le problème pour tous les raccourcis impliquant les lettres différentes du clavier AZERTY au QWERTY. C’est bien sûr pénible et j’ai développé un script pour automatiser le processus.

Se rendre dans la fenêtre d’édition des raccourcis clavier (Tools/Options/Keymap), ouvrir la fenêtre Manage Profile, cliquer sur le profile à corriger (par exemple Netbeans) et cliquer sur Export. Cela produira un fichier XML à traiter avec le script fix-shortcuts.py de l’archive que l’on trouve ici. Si le fichier exporté est appelé foo.xml, taper en ligne de commande :

python fix-shortcuts.py foo.xml > foo-fixed.xml

Cela enregistrera la version corrigée dans le fichier foo-fixed.xml. Importer alors cette nouvelle configuration dans la même boite de dialogue par laquelle on a réalisé l’exportation. Les problèmes de raccourcis clavier devraient être corrigés.

L’archive propose aussi le fichier Netbeans standard corrigé (sous le nom fixed-netbeans-profile.xml).

Enjoy!

Older Entries