PROJET AUTOBLOG


Sam et Max

source: Sam et Max

⇐ retour index

RSS est une API

mardi 18 décembre 2012 à 16:50

On a prédit la mort de RSS (et Atom que j’assimile ici) 500 fois déjà. C’est un truc de geek, personne l’utilise, gnagnagnagna.

Seulement RSS, ce n’est pas juste le truc qui me permet de faire ma veille informationelle tous les jours en 1 h plutôt que 6. C’est aussi une API standard qui répond aux critères suivants:

Bref, RSS est un formidable outil pour les robots. Quand vous ne savez pas comment donner accès à votre site via une API, commencez par créer un flux RSS. Il en restera toujours quelque chose.

P.S: en écrivant cet article je me dis qu’il faudra peut être que j’écrive un article “Qu’est-ce que RSS et à quoi ça sert” parce que je suis sûr qu’il y a plein de gens à qui ça ne parle pas.

Le bonheur des frameworks

lundi 17 décembre 2012 à 14:37

Traduction un peu adaptée de l’article Why I hate framework de Joel Spolsky

J’ai voulu construire une petite étagère pour y ranger les condiments.

Ayant fait un peu de menuiserie avant, j’avais une bonne idée de ce dont j’avais besoin : un peu de bois et quelques outils de base. Un mètre, une scie, un niveau et un marteau.

D’ailleurs, si je voulais construire toute une maison, j’en aurais besoin également. Du coup je suis allé dans une quincaillerie, et j’ai demandé au vendeur où je pouvais trouver un marteau.

“- Un marteau ?”, me répondit-il. “Plus personne n’achète des marteaux de nos jours vous savez. Ils sont un peu vieux jeu.”

Surpris, je lui demande pourquoi.

- “Et bien, le problème avec les marteaux, c’est qu’il y en a plein de différents types. Des marteaux arrache-clou, des masses, des marteaux de tapissier… Que se passerait-il si vous achetiez un type de marteau et réalisiez que vous avez besoin d’un autre type plus tard ? Vous devriez achetez un autre marteau pour votre prochaine tâche. Il se trouve que la plupart des gens veulent vraiment un seul marteau qui peut être utilisé pour la majorité des tâches qu’ils peuvent rencontrer dans leur vie.”

- “Ça me parait logique. Pouvez-vous me dire où je peux trouver un marteau universel ?”

- “Non, nous ne les vendons plus. Ils sont obsolètes.”

- “Vraiment ? Je pensais que vous veniez de dire que le marteau universel était l’avenir.”

- “Il se trouve que, si vous faites un seul marteau qui puisse être utilisé pour toutes sortes de tâches, il n’est vraiment bon, à aucune d’entre elles. Enfoncer un clou avec une masse n’est pas très efficace. Et pour tuer votre petite amie, rien ne vaut un marteau de tapissier.”

- “C’est clair ! Donc, si plus personne n’achète des marteaux universels, et que vous ne vendez plus de marteaux à l’ancienne, quels marteaux vendez-vous ?”

- “En fait, nous n’en vendons pas.”

- “Alors…”

- “D’après nos recherches, ce dont les gens ont besoin n’est pas un marteau universel du tout. Il vaut toujours mieux avoir le bon marteau pour le bon boulot. Donc, nous avons commencé à vendre des fabriques de marteau, capable de produire n’importe quel marteau qui pourrait vous intéresser. Tout ce dont vous avez besoin est de remplir la fabrique de travailleurs, lancer la machinerie, acheter les matériaux de base, payer les charges et hop, vous avez *exactement* le type de marteau dont vous avez besoin en un clin d’œil.”

- “Mais je ne veux pas acheter une fabrique de marteaux…”

- “Parfait. Car nous n’en vendons plus.”

- “Attendez, vous venez de me dire que…”

- “Nous avons découvert que la plupart des gens n’ont pas besoin d’une fabrique complète de marteaux. Certains, par exemple, n’auront jamais besoin d’un marteau de tapissier. (Peut être qu’ils n’ont pas d’ex. Ou peut être qu’ils les ont tué avec des pics à glace.). Donc il n’y a aucune raison pour quelqu’un d’acheter une fabrique de marteaux pour tous les types de marteaux.”

- “Oui, c’est sûr.”

- “Donc, à la place, on a commencé à vendre les plans de constructions de la fabrique de marteaux, afin que nos clients puissent construire leurs propres fabriques, complètement personnalisées pour produire uniquement les types de marteaux dont ils ont besoin.”

- “Laissez-moi deviner. Vous ne les vendez plus.”

- “Non. Bien entendu. Il se trouve que les gens ne veulent pas construire toute une fabrique juste pour faire quelques marteaux. Laissez la construction des fabriques aux experts de construction de fabriques, c’est ce que je dis toujours !!”

- “Et je vous approuve sur ce point.”

- “Et oui. Donc nous avons arrêté de vendre ces plans et nous avons commencé à vendre des fabriques de fabriques de marteaux. Chacune d’elle est construite par nos experts dans le business de fabrique de fabrique de marteaux, afin que vous n’ayez pas à vous inquiéter des détails triviaux de la construction d’une fabrique. Malgré cela, vous avez tous les bénéfices d’avoir votre propre fabrique personnalisée, produisant vos propres marteaux personnalisés, collant à vos designs spécifiques en matière de marteau.”

- “Heu, ça ne me semble pas vraiment…”

- “Je sais ce que vous allez dire !! … et nous ne les vendons d’ailleurs plus. Apparemment, peu de gens achetaient ces fabriques de fabrique de marteaux, donc nous avons trouvé une solution à ce problème.”

- “Hum.”

- “Nous avons pris le temps de faire le bilan de notre infrastructure technique, et nous avons déterminé que les gens développaient une frustration à avoir à gérer et opérer une fabrique de fabrique de marteaux, tout comme la fabrique qu’elle produisait. Ce genre de contrainte additionnelle peut se révéler fastidieux quand vous vous retrouvez dans un scénario où vous utilisez également une fabrique de fabrique de mètres, une fabrique de fabrique de scies et une fabrique de fabrique de niveaux. Sans compter un conglomérat de transformation du bois. Nous avons objectivement évalué la situation, et déterminé que c’était trop complexe pour quelqu’un qui voulait juste créer une étagère pour condiments”.

- “Non, sans blague ?”

- “Du coup cette semaine, nous mettons sur le marché une fabrique de fabrique de fabrique de création d’outils en tout genre, pour qu’ainsi vos différentes fabriques de fabrique à outils puissent être créées à partir d’une seule fabrique unifiée. La fabrique de fabrique de fabrique produira uniquement la fabrique de fabrique dont vous avez réellement besoin, et ainsi ces fabriques de fabrique produiront une seule fabrique basée sur vos spécifications d’outils personnalisés. Vous aurez *exactement* le marteau dont vous avez besoin, et exactement le bon mètre pour votre tâche, juste en appuyant sur un bouton (même si vous aurez probablement quelques fichiers de configuration pour que tout fonctionne selon vos attentes).

- “Donc, vous n’avez pas de marteaux ? Pas du tout ?”

- “Non. Si vous voulez vraiment une étagère à condiments de haute qualité, de standard industriel, vous avez vraiment besoin de quelque chose de plus sophistiqué qu’un simple marteau acheté à la quincaillerie du coin.”

- “Ok… Bon. Il faut ce qu’il faut. Si c’est comme ça qu’on fait maintenant, il faut bien que je m’y mette.”

- “Excellent !!”

- “Ça vient avec une documentation, pas vrai ?”

Personnalisez le démarrage d’iPython

dimanche 16 décembre 2012 à 14:14

iPython, c’est bon. Et ça peut être encore meilleur.

Avant on ajoutait un peu de sel à notre super shell en éditant les fichiers .ipython/ipythonrc et .ipython/ipy_user_conf.py. Mais ça c’était avant.

Maintenant on fait :

$ ipython profile create

Ce qui va créer un fichier ~/.config/ipython/profile_default/ipython_config.py (et ipython_qtconsole_config.py si vous avez installé la version qt).

Il ne vous reste plus qu’à éditer ce fichier pour personnaliser le démarrage de iPython.

Executer du code au démarrage

N’importe quelle ligne de code Python ou de commande magique (les trucs qui commencent pas ‘%’ qui ne fonctionnent que dans iPython) !

Très utile pour les imports par exemple. Voici ce que je fais moi au démarrage :

c.TerminalIPythonApp.exec_lines = [
'%doctest_mode',
'import os, sys, re, json',
'from datetime import datetime, timedelta',
'''
try:
    from path import path
except ImportError:
    pass
''',
'''
try:
    import requests
except ImportError:
    pass
''',
'''
try:
    from batbelt.structs import *
    from batbelt.objects import attr
    from batbelt.strings import slugify, normalize, json_dumps, json_loads
except ImportError:
    pass
'''
]

Du coup j’ai quasiment jamais besoin d’importer un truc, car ce que j’utilise le plus est déjà là. %doctest_mode me permet de coller des docstrings sans me fouler.

Programmation graphique

iPython possède une boucle principale. Les toolkits graphiques aussi. Si vous faites vos essais du code du second dans le premier, ça va bloquer. Heureusement on peut demander à iPython d’intégrer la main loop d’un des toolkits graphiques les plus célèbres en choisissant parmi : ‘qt’, ‘wx’, ‘gtk’, ‘glut’, ‘pyglet’ et ‘osx’ et en settant :

c.TerminalIPythonApp.gui = 'qt'

Virer le header

Quand on lance le shell, il vous raconte sa vie. Pour lui dire de fermer sa gueule :

c.TerminalIPythonApp.display_banner = False

Lancer un script complet

Bon, ça c’est si vous avez de gros besoins…

c.TerminalIPythonApp.file_to_run = '/path/to/script.py'

Sauter la confirmation à la fermeture

Oui, je suis sûr te vouloir te fermer connard ! Tu crois que j’ai appuyé sur Ctrl + d par erreur en éternuant ?

c.TerminalInteractiveShell.confirm_exit = False

Choisir son éditeur externe

Si vous tapez %edit dans iPython, il ouvre un éditeur. Vous tapez votre code, vous sauvegardez, vous fermez. Et iPython récupère le code et l’éxécute. Par défault il utilise VI. On peut faire mieux.

c.TerminalInteractiveShell.editor = '/chemin/vers/sublime-text -w'

Mettre la capote sans casser l’ambiance

samedi 15 décembre 2012 à 23:14

Preuve que mine de rien la prévention (et la répression :-p) et la communication ça marche pas trop mal, les gens fument moins, mettent la ceinture de sécurité et de plus en plus souvent la capota.

Mais bon, c’est toujours relou et peut casser le rythme, alors voici quelques astuces pour mettre un préservatif sans transformer l’étreinte en astreinte.

Mets la moi !

Non ce n’est pas elle qui va dire ça, mais vous.

Après avoir joué un peu, tendez-lui le préservatif en lui demandant de vous la mettre. Un petit sourire en coin en prime ne peut pas faire de mal.

Avantages :

Désavantages :

Surprise !

Enfilez là avant de commencer. Ceci ne marche bien entendu que si vous savez précisément que vous allez vous envoyer en l’air, et que vous avez un moment discretos une ou deux minutes avant l’action. Pas évident donc.

Avantages :

Désavantages :

Chat(te)-bite

Un bon cuni calé dans les préliminaires, et pendant ce temps on s’habille le zguege. Largement ma technique préférée, mais demande pas mal de pratique.

Avantages :

Désavantages :

Par derrière

Un bon massage du dos est une excellente introduction à la levrette, et vous avez tout le temps pour pour enfiler le k-way au cyclope.

Avantages :

Désavantages :

A la bourrine

Vous comptez sur l’excitation du moment, vous la jouez naturel, et vous faites ça bien ouvertement, vite fait. C’est ce que la plupart des gens font.

Avantages :

Désavantages :

Sinon, pour les fêtes le roi de la capote fait des promos mais il n’a plus son fameux modèle Kartouche. Snif.

Convertir du binaire en ASCII et vice versa en Python

vendredi 14 décembre 2012 à 17:18

Exercice le plus inutile du monde, puisque les usages actuels réels sont des plus limités. Tout au plus cela vous permettra de lire la colonne de droite de paulds.

>>> import binascii
>>> bin(int(binascii.hexlify('Sam & Max'), 16))[2:]
'10100110110000101101101001000000010011000100000010011010110000101111000'

Et l’inverse:

>>> binascii.unhexlify('%x' % int('0b' + '10100110110000101101101001000000010011000100000010011010110000101111000', 2))
'Sam & Max'

Voilà, Voilà.

Non, ça ne sert à rien non.

Bon, sinon pour faire du remplissage : en écrivant cet article, j’ai remarqué que tout le formatting du code se faisait avec des balises <pre> qui rendait tout plus beau, et je me suis dit “le bonheur est dans les <pre>.

Ouai j’avais pas d’inspiration ce matin.