PROJET AUTOBLOG


Sam et Max

source: Sam et Max

⇐ retour index

(Très) Grand listing des libs tierce partie les plus utiles en Python

lundi 26 novembre 2012 à 07:13

Je n’ai pas tout mis, et quand j’ai omis c’est soit par ignorance, soit par choix. Je suis partial et limité :-) Ça m’a quand même pris une bonne partie de mon dimanche de compiler tout ça. Enjoy.

Sujet

Nom de la bibliothèque

Description

Administration système

Outils autour de la ligne de commande

Pexpect

Capture de sortie avancée, mais surtout des facilités pour discuter avec le programme comme si on était un humain devant sa console en train de taper.

Clint

Quelques helpers pour afficher dans un terminal proprement (couleur, indentation, quoting) sans se compliquer la vie.

Sh

Appeler les programmes en lignes de commande comme si c’était des fonctions Python. Fonctionne automaGiquement.

Envoy

Une alternative élégante au module subprocessing qui permet d’appeler d’autres programmes depuis Python.

Pyped

Un petit outil pour pouvoir piper des sorties de commande et les traiter avec des one-liners en Python, comme on fait avec Perl.

Manipuler des fichiers

Grin

Grep sous stéroïde. Utilisable en ligne de commande, ou programmatiquement.

Path.py

Améliore sensiblement l’API de manipulation des fichiers de Python en lui donnant un goût de POO et une certaine élégance.

Watchdog

API multiplateforme pour surveiller les changements dans le système de fichiers (création de dossier, édition, etc) et y réagir.

Manipuler le réseau

Scapy

Un couteau suisse pour le réseau qui clame pouvoir remplacer programmatiquement hping, 85% de nmap, arpspoof, arp-sk, arping, tcpdump, tethereal et p0f. Non testé par l’auteur, mais il a une bonne réputation.

DPKT

Création basique de paquets et gestion primitive de TCP/IP. Vise clairement le hacker qui veut rester proche de l’implémentation.

Paramiko

API de haut niveau pour travailler à travers le protocole SSH.

Interaction avec l’OS

Psutil

Outil multiplateforme qui permet d’obtenir les informations que fournissent ps, top, df, kill, free, lsof, netstat, ifconfig, nice, ionice, iostat, iotop, uptime, pidof, tty, who, taskset et pmap.

Win32

Travailler directement avec l’API COM de Windows. Utile pour contrôler des programmes avec des macros en VB, donner des ordres à MS Office et avoir accès à certains appels que seul le Dieu des DLL connaît. Installable via un .exe.

Env

Une API simple et élégante pour interagir avec les variables d’environnement.

Déploiement

Salt

Salt peut gérer entièrement et rapidement votre infrastructure même si elle compte des milliers de serveurs, à travers des fichiers de conf. Lancement de services, installation de paquets, gestion des dépendances…

Fabric

Fabric a les mêmes objectifs que salt mais l’approche est différente : d’accès plus facile, il vise les déploiements de moyenne taille et utilise des fichiers de code en Python, et non de configuration. Exécuter une installation à distance via SSH automatiquement est sa spécialité.

Fabtools

Collection d’outils pour fabric pour étendre ses fonctionnalités et rajouter, par exemple, la gestion de dépendances des paquets. Encore jeune.

Services

Supervisor

Démarre, arrête et relance gracieusement des services. N’importe quel programme peut être défini comme un service dans un fichier de configuration adapté, et sera daemonisé, monitoré et relancé si besoin en cas de crash. Très utilisé pour gérer les daemons de celery, gunicorn, etc. Un très bon remplacement à tous ces scripts dans /etc/init.d.

Circus

Vise le même but que supervisor, mais gère en plus les sockets. Il peut être réparti sur plusieurs nœuds qui communiquent avec ZeroMQ (qui est donc une dépendance). Le projet est soutenu par Mozilla. Si vous cherchez la simplicité, restez sur supervisor, si vous cherchez la puissance, circus est fait pour vous.

Matériel

PyUSB

Manipuler des périphériques USB depuis Python sous Windows.

PySerial

Manipuler des ports séries depuis Python. Nécessite l’extension JavaComm et ctypes sous Windows.

PyParallel

Manipuler des ports parallèles depuis Python. Nécessite l’extension JavaComm.

Bases de données

SGBD

mysql-python

Malgré le nom inversé, c’est bien ce paquet qu’il faudra installer pour obtenir les drivers MySQL. Nécessite distribute (pip install distribute) et une compilation pour pip avec dépendances.

Psycopg

Adaptateur pour se connecter à une base de données PostgreSQL. Demande une compilation si installé avec pip.

PyODBC

Permet de se connecter aux base de données qui possèdent une interface ODBC, telles que MS Access. Requiert une compilation pour pip.

NoSQL

Codernitydb

Une sorte de SQLite en NoSQL, écrit en pur Python, et fourni avec son propre serveur HTTP optionnel.

PyMongo

Tout ce qu’il faut pour jouer avec MongoDB. Mais nécessite distribute…

Redis

Client pour Redis. Pur Python. Installer Hiredis pour le rendre plus rapide, mais cela demande compilation pour pip.

Couchdb

Client officiel pour CouchDB.

Woosh

Un moteur d’indexation et de recherche de texte écrit en pur Python. Une sorte de SQLite pour moteur de recherche.

ORM

Peewee

Un micro-ORM qui tient dans un fichier, il est néanmoins très capable. Parfait pour un petit script ou un projet desktop.

SQLAlchemy

Probablement l’ORM le plus complet au monde.

Sécurité

PyCryto

La référence du chiffrement en Python pour tous vos besoins autour de AES, Blowfish, SHA, etc. Nécessite une compilation par pip.

Desktop

Ces bibliothèques sont difficiles à installer dans un environnement virtuel. Exceptionnellement, installez-les au niveau de l’OS en utilisant un installer fourni sur le site officiel ou dans les dépôts de votre système, et non avec pip.

Développer une interface graphique

Kivy

Pour le moment très jeune. Permet de développer des UI sur les principaux systèmes d’exploitations et sur Android ainsi que iOS. Gère le multi-touche.

PyGTK

Binding Python des bibliothèques GTK, assez simple à utiliser et très bien intégré au bureau GNOME bien qu’il existe des moyens de porter une application sur d’autres OS. La documentation est globalement moins bonne que celle de PySide/PyQT.

PySide

Portable et très complet, PySide est aussi complètement compatible avec PyQt mais offre une licence plus permissive (LGPL). Le projet est soutenu par Nokia.

wxPython

Très portable, et moins dur à packager que les autres, mais avec une API très proche du C et un manque de widgets modernes.

Développer une interface console

Urwid

Création d’interfaces textuelles avancées dans la lignée de curses, mais avec des widgets supplémentaires, une bonne gestion des couleurs et de l’UTF-8 et une courbe d’apprentissage assez raide.

Localisation

Calcul avancé avec des dates et des périodes

Dateutil

Un complément puissant compatible avec datetime et qui propose en plus un parseur avancé, une gestion des récurrences et des durées relatives.

I18n

Babel

Traduction, localisation, dates naturelles…

Manipuler des devises

Python-money

Des primitives pour effectuer le délicat travail de manipulation des devises.

Multimédia

Manipuler des images

PIL

Le standard de la manipulation d’images en Python. Toutes les opérations de base y sont, mais elle est assez difficile à installer.

Création de jeu vidéo et d’animations

PyGame

Jeux vidéos en 2D, du moteur graphique à la logique du jeu en passant par la musique.

PyOpenGl

Un binding OpenGL en Python qui donne accès à OpenGL (v1.1 à 4.3), GLU, GLUT v3.7, FreeGLUT, GLE 3 et des centaines d’extensions OpenGL. En prime, PyOpenGl est interopérable avec wxPython, PyGame, PyQt / PySide et PyGTK.

Générer des documents

Jinja2

Un langage de template proche de celui de Django qui limite le code Python utilisable et est facile d’accès.

Mako

Un langage de template au rendu très rapide qui autorise n’importe quelle expression Python dans le document.

xlwt

Produire des documents au format XLS.

Weasyprint

Une solution plus simple pour générer du PDF que Reportlab : générer du HTML et le convertir en PDF. Excellent si vous n’avez pas de besoin en lecture et si vous pouvez assumer la dépendance à PyGTK.

Outils

Tests unitaires

Nose

Lanceur de tests avec auto détection des tests et des adaptateurs d’entrées et sorties pour beaucoup d’autres outils.

Lettuce

La bibliothèque la plus connue pour faire du BDD (développement orienté comportement).

PyTest

Rend les tests plus simples à écrire et faciles à debugger. Très belle API, surtout comparée à xUnit.

Documentation

Sphinx

Permet d’écrire sa documentation au format RST et génère du HTML statique avec un moteur de recherche hors ligne très propre. Standard dans le monde de Python.

Packaging

p2exe

Transforme un programme Python en exécutable Windows. Il n’y a pas de magie cependant, et cela demande un certain travail. Par ailleurs, cela ne crée pas un installateur pour autant.

cx_Freeze

Similaire à p2exe, mais peut être lancé sous un autre OS que Windows.

Versiontools

Des helpers pour incrémenter la version de son programme proprement.

Développement

Xworkflows

Facilite la création de machines à états finis.

Gevent

Monkey patch les fonctions de réseau de la bibliothèque standard pour les rendre asynchrones et ainsi gagner en performance sur la lecture et l’écriture.

Pyjnius

Accéder à des classes Java sans sortir l’artillerie lourde (comme Jython).

Showme

Une collection de décorateurs pour facilement et rapidement regarder le temps, le nombre de cycles CPU et l’entrée/sortie d’une fonction.

Ctypes

Appeler du C depuis Python. Si vous avez un .dll ou un .so qui vous tient à cœur, c’est par ici.

Batbelt

Une bibliothèque fourre-tout qui contient des fonctions-outils fort sympathiques pour la vie de tous les jours en Python : slugification, parcours d’itérables avec fenêtre, capture de stdout dans une variable, imports dynamiques simplifiés, sets ordonnés, etc. Absence totale de documentation, mais très bien commentée.

Parsing

Parser les arguments de la ligne de commande

Clize

Permet de transformer l’appel d’une fonction automatiquement en une liste d’argument pour le script en cours. Très simple et tient dans un fichier mais utilise en interne un parsing manuel.

Catégoriser du contenu

Reverend

Implémentation en Python de filtrage bayésien. Utile pour lutter contre le spam ou trouver des contenus qui se ressemblent dans leurs formes.

Pattern

Analyse linguistique en langage naturel, intelligence artificielle et même quelques Web spiders.

FuzzyFuzzy

La documentation dit « Fuzzy string matching like a boss ». C’est bien résumé. API très simple pour des comparaisons floues sur les chaînes de caractères.

guess_language

Essaye de deviner la langue dans laquelle est écrit un texte.

Chardet

Essaye de deviner l’encodage dans lequel est écrit un texte. Utilisé par Mozilla.

PyParsing

Créer des parseurs pour des langages dont la grammaire est régulière en utilisant Python plutôt que des choses compliquées comme Lex.

NLTK

« Natural Language Toolkit » Une référence dans le domaine de l’analyse du langage naturel.

Coloration syntaxique

Pygments

Rapide et puisant, mais ne détecte pas automatiquement le langage utilisé.

Parser du XML

LXML

Facile, puissant, rapide, mais pip devra compiler cette bibliothèque. Dans ses dernières versions, gère aussi le HTML, mais n’a pas la même tolérance que BeautifulSoup.

Feedparser

Extrait les données de flux RSS et Atom.

Untangle

Transforme un arbre XML en un objet Python. Lent mais une belle API très agréable et facile à manipuler.

Parser du HTML

Beautiful Soup

Pas très rapide mais très puissant, mais capable d’analyser du HTML très mal formé, et est écrit en pur Python. N’utilisez pas la version 3. En concurrence avec HTML5Lib que je n’ai pas testé.

PyQuery

L’API de jQuery, portée en Python.

Parser un fichier binaire

Hachoir

Transforme un fichier binaire en un arbre de champs manipulables. La bibliothèque est par ailleurs très modulaire.

python-docx

Lire et écrire dans le fameux format « standard » de MS Office. Dépendances lourdes : LXML et PIL.

PyRTF

Lire et écrire en RTF, seul format 100 % compatible avec MS Office et LibreOffice.

Reportlab

Lire et écrire des PDF, au pixel prêt.

OdfPy

Manipuler les fichiers ODF en pur Python.

Pod

Une solution hybride qui part d’un template au format ODF (et pouvant contenir du code Python) qui ensuite génère du PDF, DOC, RTF ou TXT derrière. Requiert LibreOffice en mode serveur.

xlrd

Lire les documents produits par Excel.

Science

Calculs

NumPy

Bibliothèque de calculs scientifiques haute performance avec gestion des grands jeux de nombres, matrices avec n dimensions et même de quoi réutiliser son vieux code C/C++ ou Fortran. Requiert une compilation pour pip.

SciPy

Utilise la puissance de NumPy pour fournir des opérations avancées rapides sur les grands jeux de nombres et les matrices.

Création de graphiques

Matplotlib

Produit des graphiques en 2D de bonne qualité, du plus simple au plus complexe. Très bien intégré au shell iPython avec lequel il permet de recréer un environnement similaire à MatLab.

Networkx

Création et manipulation de graphes nœud par nœud. Export en SVG.

Analyse de données et modélisation

Pandas

Traitement en masse de gros échantillons de données pour en extraire les parties significatives et les traiter.

PyTables

Manipulation de gros jeux de données hiérarchiques avec optimisation automatique des ressources disque et mémoire utilisées (notamment en utilisant la compression à la volée).

Tablib

API élégante pour importer, manipuler et exporter des jeux de données tabulaires. Supporte la ségrégation, les colonnes dynamiques, les tags et le filtrage ainsi que l’export JSON, YML, CSV et XLS.

SimPy

Bibliothèque de simulation en Python similaire à REPAST ou NetLogo en moins puissant.

RPy2

Utiliser R, depuis Python.

Web et Internet

Crawling

Scrappy

Un framework entier pour créer des bots qui vont parcourir et extraire des données de sites entiers. Vraiment très complet.

Framework

Bottle

Un micro-framework qui tient dans un fichier. Excellent pour débuter la programmation Web avec Python ou pour un petit projet vite fait. Pas d’ORM, mais un langage de template.

CherryPy

Framework POO assez complet mais sans ORM ni langage de template. Embarque un serveur HTTP en pur Python assez performant (et intégrable à Bottle).

Django

Le plus utilisé dans la communauté Python. Très intégré, extrêmement complet (ORM, template, formulaire, admin, middlewares, etc), grande quantité de ressources et de bibliothèques autour du projet. Malgré cela, assez facile à prendre en main.

Pyramid

Une fusion de la plupart des anciens concurrents de Django. Beaucoup plus découplé. À surveiller.

Tornado

Un framework asynchrone plus accessible que Twisted, mais un peu moins performant et surtout spécialisé dans le Web. Utilisé notamment par Facebook.

Twisted

Spécialisé dans la programmation asynchrone. Peut faire bien plus que du Web, en fait tout ce qui est réseau, et en haute performance. Le prix a payer est sa complexité. Nécessite d’être compilé par pip.

Messaging

Celery

Surcouche à Kombu pour implémenter des files de tâches et des tâches récurrentes. On l’utilise généralement en lieu et place de Kombu.

Kombu

Le statu quo dans la gestion de messages et de queues, proposant une interface unifiée quel que soit le broker. Supporte RabbitMQ, Redis, Beanstalk, Amazon SQS, CouchDB, MongoDB et ZooKeeper.

PyZMQ

Support Python pour le protocole ZeroMQ. Nécessite une compilation de la part de pip.

SnakeMQ

Implémentation prometteuse en pur Python d’un protocole de messagerie similaire à ZeroMQ. Jeune, immature, incompatible avec ZeroMQ.

Proxys et serveurs

Deliverance

Prend le design de n’importe quel site en ligne et l’adapte sur un autre site que vous possédez. Pratique pour changer l’aspect d’un site dont le thème est très difficile à modifier (exemple : un site Zope ou Plone).

Gunicorn

Un serveur compatible WSGI assez rapide. Très utilisé en couple avec Nginx et Django. Nécessite une compilation pour pip.

HTTP

Ghost.py

Simuler un navigateur Web incluant un moteur de rendu complet (Webkit) et donc JavaScript. Nécessite PySide et donc un gros boulot d’installation.

Mechanize

Simule un navigateur Web (sans le JavaScript).

Youtube-dl

Téléchargement des vidéos et metadata sur des dizaines de sites de streaming, de manière uniforme.

Requests

Une surcouche à urllib2 qui rend l’utilisation de requête HTTP belle et agréable.

Grequest

Un wrapper de requests utilisant Gevent pour rendre la bibliothèque asynchrone.

Webservices

Python-oauth2

Actuellement le meilleur client pour gérer OAuth en Python.

Suds

La seule bibliothèque efficace et stable pour créer un client SOAP.

Spyne

SOAPLib marche très bien pour créer des serveurs SOAP, mais elle est dépréciée. Elle est néanmoins intégrée dans Spyne, qui se veut une solution généraliste pour créer des Webservices.

Facepy

Un client pour interagir avec la Graph API de Facebook. Seule alternative à jour depuis l’abandon de FB de sa propre lib et l’absence de mise à jour de facebook-sdk.

Twitter

Un client basique pour interagir avec Twitter.

Vous pouvez rajouter en com’ toute lib qui vous semble utile. Si je l’aime, je l’insérerais dans le poste. Par avance, je vous indique que j’ai volontairement mis de côté: paste, zope, plone et buildout car à mes yeux leurs valeurs ajoutées ne compensent pas la complexité qu’elles apportent.

Les descripteurs en Python

samedi 24 novembre 2012 à 14:11

Un descripteur est une classe qu’on instancie comme attribut d’une autre classe pour faire office de setter et de getter sur cet attribut. Le descripteur doit implémenter les méthodes __get__ et __set__ qui seront exécutées quand on essaye d’assigner ou lire l’attribut. Respecter cette signature, c’est adopter ce qu’on appelle pompeusement le “descriptor protocol”.

Si le principe vous rappelle les propriétés, c’est normal, les propriétés sont implémentées en utilisant des descripteurs.

Exemple balot et complètement arbitraire :

class JeSuisUnDescripteurEtJeVousEmmerde(object):
 
    # les noms des attributs sont des conventions
    def __get__(self, obj, objtype):
        return obj, objtype
 
    def __set__(self, obj, value):
        print obj, value
 
 
class JeSuisUneClasseNormaleEtJeVousAime(object):
 
    ze_attribute = JeSuisUnDescripteurEtJeVousEmmerde()
 
 
>>> objet_affecteux = JeSuisUneClasseNormaleEtJeVousAime()
>>> print objet_affecteux.ze_attribute
<__main__.JeSuisUneClasseNormaleEtJeVousAime object at 0x1cb20d0> <class '__main__.JeSuisUneClasseNormaleEtJeVousAime'>
>>> objet_affecteux.ze_attribute = 'dtc '
<__main__.JeSuisUneClasseNormaleEtJeVousAime object at 0x1cedf10> dtc

Vous noterez que obj est donc toujours l’instance de l’objet qui possède l’attribut sur lequel on agit. Dans __get__, objtype est la classe de cet objet. Dans __set__, value est la nouvelle valeur qu’on assigne à l’objet.

Vous allez me dire: pourquoi utiliser les descriptors plutôt que les properties ?

D’abord, les descripteurs sont des unités de code indépendantes. Vous pouvez faire un module avec vos descripteurs, et les distribuer en tant que lib. Donc c’est réutilisable. Ensuite, vous n’êtes pas limités à votre méthode en cours, vous avez accès à tout l’arsenal de la programmation OO.

Par exemple, si vous pouvez faire un descriptor d’alerte, qui envoie un signal à tous les abonnés pour cette valeur:

class SignalDescriptor(object):
 
    abonnements = {}
 
    @classmethod
    def previens_moi(cls, obj, attr, callback):
        cls.abonnements.setdefault(obj, {}).setdefault(attr, set()).add(callback)
 
    def __init__(self, nom, valeur_initiale=None):
        self.nom = nom
        self.valeur = valeur_initiale
 
    def __get__(self, obj, objtype):
        for callback in self.abonnements.get(obj, {}).get(self.nom, ()):
            callback('get', obj, self.nom, self.valeur)
        return self.valeur
 
    def __set__(self, obj, valeur):
        for callback in self.abonnements.get(obj, {}).get(self.nom, ()):
            callback('set', obj, self.nom, self.valeur, valeur)
        self.valeur = valeur

Et voilà, vous pouvez distribuer ça sur Github, c’est plug and play.

Par exemple, pour créer un objet Joueur sur lequel on veut monitorer le nombre de crédits :

class Joueur(object):
 
    credits = SignalDescriptor("credits", 0)

On l’utilise normalement:

>>> j = Joueur()
>>> j.credits
0
>>> j.credits = 15
>>> j.credits
15
>>> j.credits += 5
>>> j.credits
20

Mais si on rajoute un abonné :

 
def monitorer_credits(action, obj, attribut, valeur_actuelle, nouvelle_valeur=None):
 
   if action == 'set':
       print "Les crédits ont changé:"
   else:
       print "Les crédits ont été consultés:"
   print action, obj, attribut, valeur_actuelle, nouvelle_valeur
 
>>> SignalDescriptor.previens_moi(j, 'credits', monitorer_credits)

Alors à chaque action sur les crédits, tous les abonnés sont appelés :

>>> j.credits
Les crédits ont été consultés:
get <__main__.Joueur object at 0x1f6b190> credits 20 None
20
>>> j.credits = -20
Les crédits ont changé:
set <__main__.Joueur object at 0x1f6b190> credits 20 -20
>>> j.credits -= 10 # get ET set
Les crédits ont été consultés:
get <__main__.Joueur object at 0x1f6b190> credits -20 None
Les crédits ont changé:
set <__main__.Joueur object at 0x1f6b190> credits -20 -30

On vient d’implémenter une version encapsulée du pattern observer dédié à un attribut. On peut faire de nombreuses choses avec les descripteurs: grouper des attributs, les transformer à la volée, les sauvegarder ailleurs (imaginez un objet de config qui sauvegarde automatiquement chaque modification de ses attributs dans un fichier…).

Les causes perdues de la linguistique

vendredi 23 novembre 2012 à 16:43

La langue c’est un truc très marrant. On l’utilise pour se faire comprendre, et on se démerde toujours pour la rendre la moins efficace possible.

On la déforme, on utilise l’argo, le verlan, puis selon l’époque des mots qui changent de sens. C’est “mortel” veut dire létal. Sauf dans les années 70 où ça veut dire “ennuyeux”. Sauf dans les années 90 où ça veut dire “génial”. Sauf dans les années 2000 où ça veut dire “figurant dans Twilight” Et puis on s’exprime mal, et on interprète. Le bordel !

Je ne sais pas si vous connaissez la citation (que j’ai lu pour la première fois dans un bouquin de Werber):

Entre ce que je pense,

Ce que je veux dire,

Ce que je crois dire,

Ce que je dis réellement,

Ce que tu veux entendre,

Ce que tu entends,

Ce que tu crois comprendre,

Ce que tu veux comprendre,

Et ce que tu comprends réellement,

Cela fait 9 bonnes raisons de ne pas se comprendre. Mais essayons quand même.

Mais l’être humain est un animal de contradiction. Quand il essaye, il s’enfonce.

La langue des signes

On pourrait croire que la langue des signes est quelque chose d’international. Pas du tout: elle est issue d’un phénomène d’émergence sociale, avec ses composantes d’influences externes et d’isolation. Du coup, en plus d’avoir une fracture linguistique, on a une fracture gestuelle dans notre communication.

Ca ne devrait pas être une surprise, car contrairement à ce que la série “lie to me” aime faire croire, la gestuelle n’est pas du tout universelle. C’est une acquis culturel et contextuel qui s’est affiné par des générations d’éducation. Le simple signalement oui/non par la tête peut différer d’un pays à l’autre:

Les langage artificiels

L’esperanto est un peu le bitcoin de la linguistique. Un mec s’est réveillé un matin avec une très belle idée: créer une langage facile à apprendre pour le monde entier, avec une grammaire régulière et aucune exception. La bonne nouvelle, c’est qu’il a assez bien réussi son coup car c’est la seule langue artificielle qui soit devenue une langue vivante.

Couverture du précis de langue international d'Esperanto

Le vrai nom de l'Esperanto est "langue internationale". Mais bon, le vrai nom de scotch est "ruban adhésif"...

La mauvaise, c’est qu’elle ne tient absolument pas compte du fait qu’un tiers de la population mondiale vit en Asie, où les règles de langue n’ont absolument rien à voir avec les nôtres. Donc quitte à apprendre une langue très difficile pour eux, les quelques 1 milliards de chinois, autant d’indiens et à moitié autant de japs vont préférer l’anglais, déjà utilisé pour le business et par une autre partie significative de la population. En plus, l’esperanto est un cas typique d’introduction d’un énième standard, qui ajoute au problème plus qu’il n’en résout.

Personnellement j’adore l’idée. L’esperanto est d’ailleurs sur ma liste des langues à apprendre. Mais derrière l’espagnol, le chinois, la langue des signes française et l’arabe. Dans cet ordre. Donc je doute sérieusement la parler un jour.

C’est que je deviens prudent avec les langues. Déjà parce que je parle anglais et 20 langages de programmation. Ma tête est bien chargée. Ensuite parce que durant mes sessions en humanitaire j’avais voulu apprendre le bambara, dialecte local. Après quelque cours, j’ai appris qu’à 200 bornes au nord de la ville, on parlait dogon, mais pas bambara. A l’est on parlait peul. A l’ouest wolof. Ca m’a foutu un coup.

Bref, on a déjà plus de 5000 langues et dialectes, pourquoi en inventer une en plus ?

Comme d’habitude, l’art a la réponse. Tolkien a inventé l’elfique pour les besoins de LOTR. Ouais, la langue complète, ouais. Ah, il a pas fait sa chochotte, il s’est dit “j’ai déjà écrit un pavé de 1200 pages, je peux bien me lancer dans un dico”. Et puis il a fait le Simarilion derrière, preuve que l’opération lui avait grillé quelques neurones.

Mais il n’est pas le seul, puisque les mecs de Star Trek ont eux aussi pensé que créer une saga de pas moins de 6 séries télévisées, c’était pas vraiment un challenge, alors on allait faire parler à certains personnages le Klingon. Et dans la foulée codifier toute la grammaire, c’est tellement fun. Ce qui fait peur avec le Klingon, ce n’est pas que certains le parlent dans la vie réelle, c’est que certains l’enseignent.

Concours de baeuté klingon

Contrairement à la langue, il est bien connu que les standards de beauté intergalactiques sont universels

Cela dit, dans la liste des curiosités, la palme revient au langage solresol, qui est un langage qui se chante. Il n’y a pas de mots. Seulement des notes. Une symphonie devient un discours, et on peut meumeuter ses mots de passe. C’est trop chouxe non ?

Et dans l’informatique ?

Notre domaine de prédilection a quelque chose de merveilleux: il possède une concentration de nerds et donc un potentiel de partir en couille fabulissime.

Par exemple, savez-vous d’où vient notre disposition de clavier ? AZERTY pour les francophones, QWERTY pour les anglophones, et des centaines de config différentes à travers le monde pour être sûr que personne n’envoie un message de 140 caractères sans au moins une faute de frappe ?

Et bien à l’époque des machines à écrire, le clavier a été disposé de la manière la plus anti-ergonomique qui soit: deux touches étaient mises proches l’une de l’autre si elles étaient rarement utilisées côte à côte dans un même mot. Ainsi pour nous A est à côté de Z. La raison à cela, c’est que les dactylos tapent très vite, et deux tampons de machine à écrire proches tapés vite s’entremêlent. Donc en éloignant les touches les unes des autres, on évite de bourrer la machine.

Quand les ordinateurs sont arrivés, les premiers opérateurs à se servir du clavier étaient les dactylos. Formés au clavier précédent, on leur a fournit le même clavier, pour ne pas les frustrer, et pour économiser du temps et des sous. Et tant pis si les ordis n’ont plus de tampons.

Donc on a un clavier de merde, qui rend la frappe lente, imprécise, et mauvaise pour les membres.

Que fait l’humanité quand elle a un problème avec un standard ? Elle en invente un autre dans son coin !

Arrive alors le Auguste Dvorak qui fait des études mathématiques et ergonomiques qui nous pond son clavier aujourd’hui éponyme. La disposition française s’appelle le BEPO:

Photo du clavier typematrix 2030

Le typematrix 2030 est généralement la référence pour les claviers ergonomiques

 

Je connais seulement deux personnes qui l’utilisent, mais ils me jurent que ça leur change la vie. D’ailleurs ils en possèdent plusieurs.

Comptez quand même un bon mois de galère pour être productif avec. Cela dit, leur vitesse de frappe est le double de la mienne si ils utilisent ce clavier.

Enfin, je ferais une petite conclusion sur un projet absolument inutile, donc parfaitement indispensable, à savoir le jeu de caractère dotsies. Le but est de rendre le plus compact possible l’alphabet ASCII en utilisant 5 pixels alignés sur une colonne verticale pour représenter les lettres. Leur page d’apprentissage est fabuleuse.

Voici ce que donne notre title en dotsies:

<link href='http://dotsies.org/dotsies.css' rel='stylesheet' type='text/css'>

Sam et Max – Python, Django, Git et du cul !

Vous avez juste à copier / coller le texte ailleurs pour le voir dans une autre police.

Effacer le cache DNS sous Mac Os

jeudi 22 novembre 2012 à 22:17

Si vous avez encore l’ancienne IP lorsque vous faites un ping sur un site c’est que votre cache DNS l’a mémorisée. Il faut parfois le réinitialiser (si vous changez votre site de serveur ou que vous ne pouvez plus accéder à un site en particulier).

Ouvrez un Terminal:
Dans Applications > Utilitaires > Terminal

et tapez:

lookupd -flushcache

Si ça ne marche pas essayez (pour les Mac plus récents):

dscacheutil -flushcache

Rappel:
la commande ping est toujours utile, c’est un outil qui sert à tester la conneciton entre 2 IPs.

ping yahoo.com
PING yahoo.com (72.30.38.140): 56 data bytes
64 bytes from 72.30.38.140: icmp_seq=0 ttl=42 time=275.592 ms
64 bytes from 72.30.38.140: icmp_seq=1 ttl=42 time=212.991 ms
64 bytes from 72.30.38.140: icmp_seq=2 ttl=42 time=255.605 ms

Crate.io, une alternative à Pypi

jeudi 22 novembre 2012 à 16:14

Si vous avez lu l’article sur pip, vous savez que le listing officiel des libs Python est Pypi, un site fort pratique, mais qui commence à dater.

Apparemment certains ont eu envie de changer ça, en créant crate.io, une alternative moderne à Pypi: interface plus léchée et présentant des stats sympathiques, il est un mirroir complet de Pypi et contient donc les mêmes packages.

On peut demander à pip d’utiliser create.io comme source. Par exemple pour installer Django:

pip install --index-url=https://simple.crate.io django

Pratique si Pypi n’est pas disponible, ou juste pour ne pas mettre tous ses oeufs dans le même panier.

Il est important de noter que c’est une initiative privée, alors que Pypi est gérée par la Python fondation, les buts ne sont pas les mêmes. Cela dit, les sources sont disponibles sur github, donc ça met en confiance. On peut d’ailleurs voir que le bouzin tourne avec Django/Postgesql/Redis/Celery.