Serialize db.Blob in JSON

For a couple of days, I’ve been playing with google-app-engine. In order to build a JSON-based RESTful service, Google suggests a utility method to transform an object into JSON.

Unfortunately, this does not handle db/Blob entries, and fails with

UnicodeDecodeError: 'utf8' codec can't decode byte 0x89 in position 0: invalid start byte

(I have a png image in my blob).

After struggling with it, I eventually found the fix (also posted on stackoverflow)
Lire la suite

Un vrai plaisir de développer en Python

J’avais tendance à sortir des débats sur le choix du langage de programmation en me disant qu’il s’agit principalement d’un phénomène de mode, et qu’après tout, c’est l’algorithme implémenté qui compte. J’avais tort.

Car le langage est plus ou moins lisible, et cela impacte directement la qualilté de l’implémentation. Quand le code est pourri par la lourdeur de la création de variables ou de la syntaxe des structures de contrôle (boucles for et exécution conditionnelle if), c’est tout l’algorithme qui en souffre.

Il ne faut pas négliger non plus le plaisir de programmer. Un langage sympa donne envie de faire des choses.

Et en ce moment, j’ai retrouvé un vrai plaisir avec python. Par exemple, si j’ai une hashmap mot -> nombre (ça peut être un compteur d’occurence de mots) et récupérer uniquement les nombres pairs, je ne peux plus supporter la lourdeur de JavaTM


Map<String, Integer> dictionary = new HashMap<String, Integer>();
dictionary.put("not", new Integer(1));
dictionary.put("hello", new Integer(2));
dictionary.put("world", new Integer(41));
dictionary.put("AGAIN", new Integer(42));
Map<String, Integer> dictionaryEven=new HashMap<String, Integer>();
for (Map.Entry<String, Integer> entry : map.entrySet()) { 
    if (entry.getValue().intValue() % 2 == 0) {
        dictionaryEven.add(entry.getKey(), entry.getValue());
    }

Et je préfère nettement ce que l’on peut écrire en Python:
[code]
dictionary={"not":1, "hello":2, "world":41, "again":42}
dictionaryEven=dict((k,v) for k,v in dictionary.items() if v%2 == 0)
[/code]