La fonction identité en python


Même Disney fait du Python.
Allez, un post geek pour changer. Si le blabla vous fait chier, sautez directement à la section "Codage de la fonction identité en python" où vous trouverez - c’est dingue - plusieurs manières de coder la fonction identité en Python. D’ailleurs, si vous connaissez d’autres méthodes, je suis preneur.

La fonction Identité

La fonction identité c’est la fonction qui renvoie ses arguments tels quels, sans rien changer. Par exemple la fonction identité à un seul argument sur l’ensemble E est définie par Id : E -> E, Id(x) = x.
J’adore la fonction identité pour plusieurs raisons. Tout d’abord, cette fonction ne sert à rien. Je veux dire à rien de concret, rien de commercial, rien de monnayable. Moi, les trucs qui servent à rien de concret, j’adore ça ! Supposons qu’on ait déjà quelque chose noté x et bien c’est totalement inutile de lui appliquer en plus une fonction Id qui le transforme en lui-même. C’est un peu comme frotter une lampe mageek et, quand le génie nous demande un uneek vœu, on lui dit "que rien ne change". Puissant !

Ensuite j’aime bien la fonction identité parce qu’elle sert quand même à des trucs théoreeks (et qui donc ne servent à rien de concret). Par exemple, la fonction identité sert d’élément neutre pour la composition des fonctions. Genre : f ° Id = f, où ° est l’opérateur de composition. Et c’est neutre à gauche aussi : Id ° f = f. Palpitant ! Si je défini fn comme la composée n fois de f, genre f ° f ° … ° f ° f et bien on a f0 = Id. À vue de pied, quand on a une composition, un élément neutre et l’associativité on a une structure de monoïde, et ça, ça peut toujours être utile (ou pas).

Enfin, on peut utiliser la fonction identité pour obfusquer du code source. Obfusquer ça consiste essentiellement à rendre illisible (Un peu comme Metallurgeek :). Ça sert vaguement en sécurité informateek. Certes, il existe des tonnes d’autres méthodes, mais justement la variété des méthodes utilisées participe à la qualité de l’obfuscation. Donc, n’ayant vraiment rien à foutre de mieux, je me suis amusé à coder la fonction identité en Python, de plusieurs manières différentes. En voici des échantillons. Si vous avez d’autres idées je suis preneur.

Codages de la fonction identité en python

def Id01(x):
    return ([x][0])

def Id02(l):
    return [e for e in l]

def Id03(0):
    0-=-0
    return 0/2

def Id04(l):
    return l[::-1][::-1]

def Id05(l):
    try:
        return [l[0]] + Id05(l[1:])
    except:
        return []

Id06(x) = lambda x:

On peut appliquer l’identité au nombre 42 dont je vous parlerai dans un autre billet, nous avons donc : Id01(42)=42. Ce qui est une bonne chose parce que s’il y a bien un truc auquel il ne faut pas toucher c’est le nombre 42. On peut même appliquer l’identité à la fonction identité elle-même, et ça redonne quoi ? La fonction identité. Id01(Id01) == Id01. Grandiose !

Un cauchemar de MetallurGeeK

Normalement on se réveille d’un cauchemar en flippant sérieux, tout tremblant, paumé, avec le cœur qui bat bien fort, genre fear or the dark. Pas la version Maiden, la version Graveworm carrément !

Et bien moi ce matin je me suis réveillé de mon cauchemar en rigolant. Bon, c’était pas non plus le super gros cauchemar avec des gros lézards extra-terrestres bleus qui vous tètent les yeux. Non, là c’était jusre une histoire de théâtre. J’en fais depuis 7 ans. Le spectacle annuel approche, il est possible que ça ait une influence.

Dans le cauchemar donc, la responsable de l’asso théâtre m’expleek que l’acteur qui tient le premier rôle ne pourra pas jouer parce qu'il s'est fait étrangler. Admettons, après tout on est dans un cauchemar. En tant que membre du bureau et en tant qu’ancien acteur, elle me demande de le remplacer. Jusque-là tout va à peu près bien. En bonne logeek cauchemardesque je me sens absolument obligé d’accepter : « OK c’est pour quand ? ». Réponse : « c’est pour CE SOIR ». Oulah, c’est chaud ça… C’est marrant ce moment où on sent que ça devient franchement désagréable… Sentant le coup venir, j’anticipe « OK, je vais donc devoir jouer texte en main ».

C’est là que le cauchemar embraye vraiment. L’adorable responsable d’asso se transforme en une sorte de démon et gronde d’une voix d’outre-tombe : « NON, TU DOIS APPRENDRE TOUT LE TEXTE PAR CŒUR POUR CE SOIR ! ». L’horreur. Je sens bien que le démon va me bouffer à la moindre faute de texte. Alors je bosse comme une brute. Je demande aux autres acteurs de m’aider. Et devinez quoi… ils me jettent tous comme une merde : « débrouille toi, nous ça fait six mois qu’on répète, on est au point », « pas le temps, nous on est aux costumes, t’as pas de costume toi ? ». Que du bonheur.

Le soir venu c’est juste l’enfer. Je balbutie mon texte devant un public atterré. Je fais des plantes, je savonne, jeu de scène pourri, alors que tous les autres acteurs assurent. En fait c’est peut-être ça le plus dur dans ce cauchemar : la situation d’échec. Etre nul devant tout un public parce que je ne peux pas faire autrement malgré tous mes efforts. Tout ce que je déteste.

A la fin du spectacle, il est clair que je ne serais pas applaudi pour ce premier rôle miteux, mais alors pas du tout. Et c’est là que c’est fort : tous les acteurs filent dans les coulisses et ramènent plusieurs seaux d’eau croupie infestée de mousteeks et de taons. Ils mettent en route des gros ventilos que j’avais pas vu avant, pour rabattre les insectes affamés vers le public. Grosse paneek. Tout le public se met à claquer frénétiquement des mains pour éclater les bestioles. Et donc : tonnerre d’applaudissement !

Je me réveille en rigolant et en en me grattant un gros bouton de mousteek sur la tempe gauche.

Marre des barres !

Version courte
Marre des barres d'outils qui prennent tout le haut de l'écran alors qu'il y a plein de place sur les côtés !


Version longue (et chiante)
Au chapitre des trucs qui m'énervent solidement, il y a la conception grapheek des logiciels. Déjà par défaut je suis plutôt branché ligne de commande... Mais parfois il faut quand même reconnaitre que l'interface grapheek a du bon. Si si, pour des trucs du genre traitement de texte, travail en multifenêtre, transparents.... Et aussi pour faire des affiches et des fonds d'écran.
J'en arrive à ce qui me gonfle vigoureusement. En gros, nos écrans sont rectangulaires et le plus souvent orientés horizontalement. Or la plupart des tâches sont orientées "page" c'est-à-dire verticalement. C'est le cas pour le traitement de texte, la programmation avec le code qui déroule plutôt verticalement, ou tout simplement pour une séquence de commande/résultats dans un terminal. Et là, les F%kN!D3@tH d'ergonomes/graphistes/psychomachintruquistes nous pondent tous la même idée : des barres d'outils pourries qui mangent tout le haut de l'écran, alors qu'il y a tout plein la place libre à gauche ou à droite qui permettrait - justement - de garder l'orientation page. Sérieux, ça vaut bien le coup de faire des tonnes de wireframing, webdesign, user-centric-design et autres anglicismes si c'est pour pondre ça au bout du compte.
Voici le premier exemple qui m'exaspère bravement : Microsoft Word (ou Libre Office, pareil). Ils sont venus nous coller un bullshit ruban tout en haut. Ça bouffe 3 centimètres d'écran vertical en plus du menu et de la barre de fenêtre. Et sur les côtés : ils remplissent avec du vide(*). J'ai fureté partout, j'arrive pas à mettre le foutu ruban sur un côté. Grrrrr ! Quelque part sur la planète, il y a un gars qui a décidé que ça allait en haut et maintenant tout le monde doit faire comme ça. J'aime pas !
J'aime pas, j'aime pas, j'aime pas.
Tournons-nous alors vers Linux :  la liberté, l'ouverture, les petits zoizeaux qui gazouillent... Alors bon, faut reconnaitre que j'ai surement pas choisi le bon window manager(**), mais là aussi ça coince. J'utilise Gnome 3. Et ben "ils" ont décidé que la barre était en haut, un point c'est tout. Et surtout pas sur le côté ! La liberté, les zoizeaux ça va deux minutes, mais faut pas en abuser !
Et le Web n'est pas en reste. Je sais, normalement deux exemples ça suffit pour généraliser, mais là je suis lancé et je sens que ça me fait du bien. Le web donc. Ben c'est pareil : tu écris le moindre article sur Wikipedia ou sur un blog : la barre d'outils est horizontale. Toujours. Tiens comme avec mon tableau de bord de voiture : horizontal ! Alors que franchement j'ai plein de place libre sur le côté de mon pare-brise pour faire des jolis angles morts. Et même dans mon garage : mes outils sont rangés à l'horizontale, quelle désolation !
Et ben voilà, finalement je suis encore plus énervé... Je vais bouder en faisant que de la ligne de commande et en éditant des fichiers texte avec VIM, là au moins je n'ai pas besoin de barre ou de ruban. Et tant que je suis chaud je vous donne tout de suite la commande VIM pour la virer (la barre d'outils de VIM), comme ça on part direct sur de bonnes bases :

  :set guioptions-=T

Et paf la barre d'outils !


(*) Remplir avec du vide : concept clé utilisé en interface graphique mais aussi en journalisme / politeek / management stratégeek / innovation / blogging.
(**) Je ne sais pas si vous avez remarqué, mais sous Linux personne ne choisit jamais le-bon-window-manager. Il y a toujours quelqu'un pour vous expliquer que-votre-window-manager-n'est-pas-le-meilleur ;)