Archive for octobre, 2013

Avocat du libre !

jeudi, octobre 24th, 2013

Voilà, c’est fait, depuis le 11 octobre 2013 je suis officiellement titulaire du CAPA, le certificat d’aptitude à la profession d’avocat, promotion Dominique de la Garanderie de l’EFB.

Si je ne poste que maintenant, c’est peut-être qu’il m’a fallu un peu de temps pour pleinement réaliser que ce long parcours semé d’embûches que sont les études d’avocat était vraiment terminé.

C’est de manière somme toute normale, qu’après avoir réussi le concours du barreau il y a deux ans, j’ai suivi les cours et effectué les stages nécessaires. Je termine ce cycle d’études en majorant le grand oral de déontologie, le juge de paix du CAPA, avec un joli 18/20.

Être à la fois développeur de logiciels libres et avocat est quelque chose de peu commun, et peut-être même d’unique, et sans fausse modestie, j’en suis très fier.

Le droit innovant créé pour les logiciels libres s’est largement diffusé avec le succès grandissant de ces derniers, mais aussi en abordant de nouveaux domaines, comme la création artistique, le hardware ou la cartographie.

C’est un droit puissant porteur de transformations sociales profondes, mais très peu étudié et trop souvent mal compris ; et j’ai bien l’intention de tout faire pour que cela change !

 

La compréhension de dictionnaire en Python

samedi, octobre 5th, 2013

La compréhension de liste est une syntaxe moderne remplaçant les classiques fonctions map() et filter() de la programmation fonctionnelle. Ce sucre syntaxique est devenu un standard de la programmation moderne présent dans quasiment tous les langages.

La PEP 202, en intégrant cette fonctionnalité dans Python 2.0, n’était donc pas d’une originalité folle. Mais les développeurs de Python ne se sont pas arrêtés en si bon chemin, et ils ont eu l’intelligence de pousser le concept un peu plus loin. Ainsi, ils ont cherché à étendre la syntaxe de compréhension aux autres types conteneurs que les listes, c’est-à-dire en premier lieu aux dictionnaires.

La PEP 274 visait donc a intégrer la compréhension de dictionnaire à Python 2.3, mais elle a été abandonnée car considérée comme inutile au vu de l’utilisation conjointe des expressions de générateur et du constructeur dict().

Cependant, l’intérêt pour ce sucre syntaxique est resté présent, et la compréhension de dictionnaire a finalement été intégrée au langage à l’occasion de la grande réforme du passage à Python 3.0, et backportée dans Python 2.7.

On obtient ainsi plus de lisibilité :

>>> dict((i,i*2) for i in range(5))
{0: 0, 1: 2, 2: 4, 3: 6, 4: 8}
>>> {i: i*2 for i in range(5)}
{0: 0, 1: 2, 2: 4, 3: 6, 4: 8}

et de flexibilité :

>>> k_and_v = [[1, 'a'], [2, 'b']]
>>> dict(k_and_v)
{1: 'a', 2: 'b'}
>>> {k: v for k, v in k_and_v}
{1: 'a', 2: 'b'}
>>> {k+1: v*2 for k, v in k_and_v}
{2: 'aa', 3: 'bb'}

Et puisque Python 3.0 a doté les sets d’une nouvelle syntaxe, il en a aussi profité pour les doter de la compréhension :

>>> [i%2 for i in range(8)] # liste
[0, 1, 0, 1, 0, 1, 0, 1]
>>> {i%2 for i in range(8)} # set
{0, 1}

Il n’est pas étonnant que la syntaxe de compréhension de liste se soit diffusée dans tous les langages de programmation modernes. Il n’est pas étonnant non plus que Python, un langage doté d’une philosophie très sensible à la lisibilité, soit allé plus loin en la généralisant à tous ses types conteneurs, en faisant un élément central du langage.