PROJET AUTOBLOG


Sam & Max: Python, Django, Git et du cul

Site original : Sam & Max: Python, Django, Git et du cul

⇐ retour index

Mise à jour

Mise à jour de la base de données, veuillez patienter...

Alzheimer

mardi 17 juin 2014 à 03:43

Visiblement j’ai raté mon coup. Les gens voient l’article comme anti-microsoft alors que je voulais juste souligner la faciliter à oublier qui sont les ordures en prenant un exemple criant.

Si il y a bien un truc qui me fait rager, c’est la capacité de l’homme à oublier à quel point les gens ont été des connards.

Ça marche en politique, en commerce, dans le monde de l’art, et même dans son entourage proche, avec les relations amicales et amoureuses.

Partout en fait. Si quelqu’un fait une grosse crasse, il pourra toujours attendre, et revenir plus tard. Pouf, lavé. En fait, il vaut mieux faire une grosse saloperie de temps en temps, et avoir une bonne image, que d’être quelqu’un de bien sans communiquer dessus. Pour les boites, mais pour vous en tant que personne aussi évidement.

Prenez par exemple cette interview de Bill Gates.

Je prends Bill Gates comme exemple, hein, il y en a beaucoup comme lui.

Lisez les commentaires sous l’interview, vous allez-voir, c’est atterrant.

Déjà, dois-je souligner le fait que le gars utilise une technique de rhétorique de comptoir pour se mettre de la pommade et que ça passe sans problème.

Dès le début, je trouve ça irritant que le public soit aussi con.

Quand on se traine les casseroles qu’il a et qu’à la question “c’est quoi le mythe le plus ennuyeux à votre propos” il répond “qu’on dise que je suis trop bien, lol”, et que personne ne tique… Merde !

C’est dans tous les livres les plus pourris sur les entretiens d’embauche, la première technique qu’on enseigne pour répondre à la question “quel est votre plus gros point faible”.

Mais passons, ce n’est pas le sujet de l’article.

Le sujet, c’est qu’au cours des années, Microsoft, sous la direction de Billy, nous a pourri la vie avec :

Chacun de ces points mérite à lui seul de ranger Gates dans la catégorie connard, et ne plus lui accorder de crédit. Tous ces points ensembles…

Mais non, apparemment ce n’est pas grave. On peut mépriser ses clients, ses employés, les lois, et avoir l’aval du public. Les faits, tout le monde s’en bat les steaks.

En fait, les gens n’associent pas du tout la compagnie avec l’homme. Deux entités distinctes. Il vient d’où son pognon à William, d’après vous ?

Enfin je dis ça, les gens ont pardonné à Microsoft aussi. Comme ils pardonnent à Apple et comme il pardonneront à Google.

Pourtant, ce n’est pas comme si c’était un petit scandale et puis terminé. Non, ils en remettent une couche régulièrement:

J’arrête là car la liste n’en finit pas, des dizaines de scandales (en plus, là je ne prends qu’un exemple par type de scandale ici, sinon…), plus ou moins gros, par an. Tellement que c’en est lassant.

Pourtant, un seul d’entre eux devrait suffire à les renvoyer dans les cordes. Là, il y a de quoi rempir un manuel d’exercice de conclusions pénales, et ça ne fait rien.

Je crois que passée une certaine quantité de magouilles, y a un switch qui s’active dans le cervau qui amorce un SEP field.

Ça me fait penser à cette blague, où Bush discute avec Bin Laden, et un conseiller en com leur demande ce qu’ils foutent :

  • On fait nos plans. On a décidé de tuer 30 000 américains, 140 000 irakiens et un homosexuel séropositif.
  • Pourquoi un homo ?
  • Tu vois Ousama, je te l’avais dit, tout le monde s’en branle des autres !

Après il y a des gens qui disent “oui mais Microsoft est trop gros, il ne peut pas contrôler tout ça“.

MS a la taille choisie par Bill Gates, il est responsable de ce fait, il l’a décidé, chaque jour. S’il était, à l’époque, assez compétent pour être à la tête de la boite, il est responsable de chacune de ces merdes. S’il n’était pas compétent, on avait un abruti aux commandes d’un tank dans un jardin d’enfants. Dans tous les cas, c’est grave.

Il y a aussi le “oui, mais il a fait beaucoup pour l’informatique“.

Déjà, ça reste à démontrer. Qui me dit que si on supprimais M$ à sa naissance, l’informatique ne se porterait pas mieux ? Improuvable.

Ensuite, Johnson & Johnson ont aussi “fait beaucoup” pour la pharmaceutique, mais je ne leur confierais pas l’hébergement d’un colloque du ministère de la santé. (J’étais parti pour un exemple de rétablissement économique de l’Allemagne en 40, mais j’ai reçu un email de Godwin).

Tout ça pour dire que parce que quelqu’un a (peut-être) fait un peu de bien, ça ne l’absout pas de toutes les merdes qu’il a faites. Sinon, je vous mets une baffe dans la gueule, je vous fais un bisou, et on est quitte ?

Ensuite, il y a l’aspect moral du simple fait qu’il a concentré, pour sa petite personne, pendant des dizaines d’années, des milliards de dollars. Il en donne la moitié aujourd’hui, mais les gens semblent oublier qu’ils les a retirés de l’économie et bloqués. Pendant toute sa vie.

Je ne parle pas du flux d’argent qu’il a fait circuler de l’économie à ses comptes, et de ses comptes à l’économie. Non. Je parle de ce qu’il a accumulé dessus, c’est à dire ce qui est resté là, à attendre.

Et oui, c’est ce que personne ne dit quand on parle des ultra-riches : la monnaie, ce n’est pas juste un nombre ou du papier, c’est la représentation d’une ressource, en grande majorité le travail humain. Quand ce sont quelques millions, l’impact n’est pas énorme. Quand ce sont quelques milliards, ce sont des milliers d’années de travail de personnes qui restent en suspens, pour le plaisir d’un seul homme.

Enfin le plaisir : si il a plusieurs milliards en banque, c’est qu’il n’en dépense pas la majorité. C’est une décoration. Un blason. Et après il a redonné, excusez-moi, la moitié ! On l’admire pour ça ? Il annonce qu’à sa mort, une fois qu’il n’aura plus besoin de son aura sociale (putain, le pin’s à $100 milliards les gars), il va tout refiler, et on en parle comme d’un grand homme.

Donc le gars a créé une boite qui, dans notre système économico-social, lui a permis d’immobiliser l’équivalent du PIB d’un petit pays. Pour rien au final, car cela représente la somme de ce qu’il n’a PAS utilisé pendant toutes ces années. Il a gardé ce pognon pour la déco.

Et on l’applaudit pour ça ?

Quand quelqu’un est riche, il n’a pas de responsabilité aux yeux du public. Les gens l’envient. Ou le respectent. Mais personne ne pense qu’il a le devoir d’assumer les conséquences de ce qu’il fait (ou ne fait pas) avec son argent.

En plus, la grosse blague, c’est que les organisations philanthropiques aux USA ont le droit de gérer un portefeuille d’investissement. Ce qui donne ceci :

Comme la plupart des organisations philanthropiques, la Gates Foundation donne chaque année au moins 5% de son capital pour payer un minimum d’impôts. [...] Les 95% restants sont investis. [...] Et là, on en arrive au point soulevé par les journalistes du LA Times qui se sont aperçus que les entreprises dans lesquelles la fondation possédait des parts et dont les objectifs allaient à l’encontre de ses buts caritatifs représentaient 41 % de ses actifs, soit 8,7 milliards de dollars.

En gros le gars fait du pognon en finançant des boites qui sont responsables de la destruction contre laquelle luttent les associations qu’il prétend aider.

Au passage, en donnant son pognon à la fondation, Bilou s’évite aussi de payer pas mal d’impôts. Argent qu’il réinvestit dans cette structure payant elle-même peu d’impôts qui peut alors investir dans ce qui arrange notre bonhomme. C’est pour aider le monde, ma bonne dame.

Donc Bill Gates est une ordure, et il y a des gens pour le défendre, parce que c’est une ordure socialement acceptable, et très visible. C’est vrai qu’en photo il a l’air super sympa.

Mais ce n’est pas Bill Gates qui m’énerve le plus. Ce n’est qu’un exemple. Il y en a des milliers comme lui.

Ce qui m’énerve le plus, c’est chaque abruti qui oublie.

flattr this!

Redirection 307 et 308

lundi 16 juin 2014 à 02:20

Le standard HTTP 1.1 vient de subir une mise à jour.

Oui, LE standard HTTP 1.1. La fameuse RFC2616, qui n’a pas été touchée depuis l’année de sortie de The Matrix (coïncidence ? Je ne pense pas…).

Bref, qu’est-ce qui change ?

Essentiellement la forme, qui permettra à la RFC de HTTP 2.0 de faire référence à des parties de celle de la HTTP 1.1, maintenant divisée en 8, et évitera de se répéter.

Le web ne va donc pas casser.

Mais il y a quand même intronisation officielle de la redirection 308, qui est à la 301 ce que la 307 est à la 302.

Je me doute que ça vous parle autant qu’un personnage de film de Charlie Chaplin en fond d’écran d’un Windows avec driver realtek.

Pour rappel, quand un serveur HTTP répond à un client, il lui renvoie un code pour indiquer la nature de sa réponse. Quand tout va bien, c’est 200, quand la page n’est pas trouvée, c’est le fameux 404, quand le serveur est en erreur, c’est une 50x, etc.

Quand le serveur renvoie un code 30x, c’est généralement une redirection : on dit au client, ce que tu cherches est ailleurs, et le client, recevant ce code, fait donc une seconde requête, sur la nouvelle adresse.

Le code 301 indique une redirection permanente, ce qui signifie que le client peut considérer que c’est la nouvelle adresse qui remplace l’ancienne, pour toujours.

Le code 302 indique une redirection temporaire, généralement on utilise ça pour orienter le client sur le site à la suite d’une action, comme la saisie d’un formulaire.

Mais ces deux codes ont une particularité : le client effectue une simple requête GET vers la nouvelle adresse. Si vous avez fait une requête complexe avant, par exemple une requête POST avec plein de paramètres, le client va se rediriger avec une nouvelle requête GET basique, toute l’information précédente est perdue.

Cela peut être ce que l’on veut. Mais parfois, on souhaite que le client fasse la redirection avec une copie exacte de la requête initiale.

C’est ce que fait le code 307 : une redirection temporaire, mais avec la même requêtes. C’est comme la 302, donc, mais répète la même requête deux fois.

Le code 308 demande aussi une redirection en répétant la requête, mais une redirection permanente, comme la 301.

C’est ce dernier qui a été ajouté officiellement au protocole, puisqu’il est déjà supporté par la plupart des navigateurs : même IE le comprends depuis 2008.

(le support est vraiment aléatoire, voir comments)

Par curiosité, vous pouvez tester la redirection ici.

flattr this!

Encore une raison d’aimer WAMP

dimanche 15 juin 2014 à 07:24

RPC et Pub/Sub sont des modes de communications dont on a besoin tous les jours.

La preuve en est que :

En fait, on les utilise, mais en bricolé, et limité. On s’en tient à ça parce que ça marche facilement et partout. Jusqu’ici, l’alternative, c’était la solution propre type SOAP, CORBA, etc., qui est ni simple, ni fun à utiliser. Massivement chiant serait plutôt le bon terme, en fait.

Mais ça n’a pas empêché les gens de tenter de faire leurs propres solutions :

Si vous avez suivi le compte twitter, vous avez du voir que j’en trouve régulièrement.

Bien entendu, aucun de ces projets n’implémente à la fois RPC _et_ Pub/Sub. Aucun ne se base sur un standard. Et aucun ne permet à plusieurs langages / stack technos de parler entre eux.

WAMP résout tout ça, en permettant RPC et Pub/Sub, en temps réel, à travers le réseau, entre composants hétérogènes, le tout basé sur un standard.

Au passage, l’API flaskesque a été acceptée par l’équipe de Tavendo, et on a une branche qui est bien avancée sur le sujet. Après je m’attaquerai à faire un bon gros tuto sur la question.

flattr this!

Ma boîte à outils Python, mise à jour

samedi 14 juin 2014 à 17:59

Il y a bien longtemps je vous avais parlé de 7 libs Python vraiment chouettes, puis quelques articles pour vous signaler des remplaçants, ici et là.

Comme je ne m’attends pas à ce que vous suiviez le blog article par article, voici une petit synthèse, la conclusion de l’évolution de ma boîte à outils Python.

D’abord, ce qui n’a pas changé

Ipdb, est toujours de la partie. Je m’essaye à pudb de temps à autre, mais vraiment pour casser l’habitude. Ipdb reste la référence pour tout debugger. C’est simple, c’est puissant, c’est fantastique.

path.py, inébranlable remplacement de os.path et shutil, malgré l’intégration de pathlib à python 3.4 qui est loin d’être aussi bon. J’ai même fait quelques contributions sur le projet, notamment l’écriture de fichier “inplace”.

requests, la fantastique lib HTTP, qui n’évolue plus beaucoup, car qui a besoin d’améliorer la perfection ? On regrettera l’absence de version asynchrone, bien que certains projets alternatifs, moins bons, s’y collent.

bottle, toujours pour bricoler des sites rapides. Mais de moins en moins, maintenant que django_quicky est bien rodé, si je sais que le site va déboucher sur un truc, c’est plus productif d’utiliser ce dernier.

peewee, surtout pour introduire les gens à la programmation avec base de données durant les formations. SQLAlchemy c’est bien trop dur, et l’ORM Django se ramène avec tout le framework. Mais pour mes besoins rapides, j’avoue que je tape de plus en plus dans Redis ou du flat file. C’est souvent du jetable de toute façon et je manipule itertools mieux que SQL ou toute couche ORM au dessus.

grin est toujours là. Parce que je ne me souviens jamais des millions de flags de grep pour obtenir ce que grin donne gratos, comme la coloration, le contexte, la récursivité et l’exclusion du dossier .git. Parce qu’il prend les regex Python en compte. Parce qu’il marche sous n’importe quelle plateforme supportée par Python de la même manière, y compris Windows, et s’installe avec un pip install grin --user sans avoir besoin des droits root.

Ce qui a changé

Adios dateutil, bonjour arrow. Ok, je triche un peu, car arrow utilise dateutil sous le capot, mais je n’en vois jamais la couleur. Arrow est plus simple, plus beau, plus productif, plus mieux. Les dates, telles que ça devrait être dans la lib standard.

Ensuite, au revoir clize, place à docopt pour parser toutes les lignes de commandes. Les fonctionnalités avancées de click ne m’ont pas convaincu de migrer, et docopt est tellement intuitif, tellement merveilleux dans son fonctionnement…

minibelt fait maintenant partie de tous mes fichiers requirements. Surtout pour son sorted set, son dmerge, ses get, attr et iget. Parfois pour chunk et windows. C’est tellement rageant de devoir recoder ces petites fonctions pour chaque projet.

pyped est de plus en plus utile chaque jour. Depuis l’article du blog, il a bien évolué et embarque un tas de goodies comme le spliting via options, l’auto filter ou encore le parsing JSON. Bref, je n’ai plus touché à sed depuis des mois.

pytest partout. Je ne touche plus au module unittest de la stdlib ni celui de Django. pytest est la réponse à tout et même plus, c’est 42 + 1, c’est la seule raison pour laquelle je fais encore des tests.

six. Pas parce que j’aime cette lib, mais parce que je me tape pas mal de conversion Python 2/3 en ce moment, et six est le socle sur lequel repose toutes mes migrations. Pourvue que je n’ai bientôt plus besoin de l’utiliser. Oui, oui, je sais, on doit migrer 0bin et tous les autres projets. Un jour.

Pas directement lié à Python, mais pour faire des UI au dessus de mes APIs en Python. jQuery est petit à petit en train d’être remplacé par angularjs que je commence à bien maitriser. Ça mériterait un paquet d’articles rien que pour le bestiau mais je vais m’en tenir au 180 drafts qu’on a déjà en stock :) Et puis jQuery a encore de beaux jours devant lui pour tous les sites qui ont besoin de ref, les sites legacy, les petits sites qui n’ont pas besoin d’un bazooka pour l’UI…

Un autre truc que j’utilise tous les jours, c’est la liste des cours du blog avec une recherche type “site:http://sametmax.com/cours-et-tutos/ mes mots clés” car le moteur de recherche de wordpress est à chier. Et franchement, je me félicite régulièrement du dump du blog parce qu’Internet est pas stable ici et la consultation hors ligne devient vite indispensable. Pour cette même raison, j’ai installé zeal avec la doc de python en local.

Ce qui est resté au placard

Je pensais que j’utiliserais beaucoup templite, mais en fait pas du tout. Comme minibelt contient mes fonctions favorites, batbelt, sa grande soeur, s’ennuie, surtout qu’elle n’est toujours pas compatible Python 3.

Plus de Beautiful soup. Je ne parse plus de HTML, il y a des APIs partout… Plus de Fabric. J’utilise docker et je déploie mes instances à la main (j’ai pas 500 serveurs à gérer).

J’ai aussi fait un long essai du shell fish, mais je ne suis pas convaincu et je vais retourner à ce bon vieux bash.

flattr this!

CLOC it

vendredi 13 juin 2014 à 12:42

CLOC est un petit prog perl qui retourne des stats sur le code qu’on a dans un dossier.

Sur ubuntu, ça s’installe avec un sudo apt-get install cloc, et un cloc /home/sam/work plus tard, on obtient un rapport sur le nombre de fichiers / lignes de code par langage :

---------------------------------------------------------
Language            files      blank    comment      code
---------------------------------------------------------
HTML                10585     392921      49870   2909814
Javascript           1497     118180     220836    656645
Python               3132     104173     129888    517995
CSS                   399      23324      10117    164944
XML                  2860       7435      16148     89942
Java                  194       7364      34214     30960
XSLT                   83       3902       1992     25842
Bourne Shell           91       1998       2511     16263
C                      48       2824       4020     11810
C/C++ Header          167       4256       7775     10015
SQL                    59       1640       1347      8961
LESS                   50       1371       1308      5884
C++                    35       1244        782      5772
make                   41        806        283      3691
QML                    56        413        906      2458
Visualforce Page       17        175         22      1253
Bourne Again Shell     17        109        145       883
m4                      2         99         22       707
SASS                   20        127         41       596
ActionScript            1         71        121       553
DOS Batch               8         63         19       359
DTD                     5        159        280       355
PHP                     2         58        250       315
D                       2         32         -2       171
CMake                   4         28         11       124
Ruby                    5         37          9       120
CoffeeScript            1         30         10        95
Teamcenter def          1          0          0        91
XSD                     3         10          0        78
YAML                    5          7          0        49
Arduino Sketch          1         17         27        41
IDL                     2         12          0        38
MATLAB                  1         21         62        35
C Shell                 1          8          6        18
Visual Basic            1          0          0        18
ASP.Net                 1          4          0         9
---------------------------------------------------------
SUM:                19397     672918     483020   4466904
---------------------------------------------------------

Pour le HTML, on a compris que j’étais un dev très orienté Web. Mais, horreur, coderai-je plus de Javascript que de Python ?

Non, je vous rassure. C’est juste que mon dossier de travail contient moult documentation Web dumpées pour être consultées hors ligne, de nombreuses libs JS dupliquées (j’aime pas les CDN) et aucun de mes virtualenv.

Rien que la doc d’angular :

find -iname "*.js"  | grep angular | wc
632

On notera qu’il y a deux fois plus de fichiers Python (3132 c’est pas énorme quand on y pense) que de fichiers JS, mais un peu moins de lignes malgré tout, ce qui reflète bien la tendance à tasser beaucoup de code dans un seul gros fichier en JS.

2860 fichiers XML ? Bordel, mais d’où viennent-ils ?

find -iname "*.xml" | grep docker | wc
2790

Ah, ok.

Je serais curieux de savoir ce que ça donne pour un dev scientifique, un sys admin, un débutant, un chevronné, etc.

flattr this!

Error happened! 0 - count(): Argument #1 ($value) must be of type Countable|array, null given In: /var/www/ecirtam.net/autoblogs/autoblogs/autoblog.php:428 http://ecirtam.net/autoblogs/autoblogs/sametmaxcom_a844ada43a979e3b1395ab9acb6afafb84340999/?98 #0 /var/www/ecirtam.net/autoblogs/autoblogs/autoblog.php(999): VroumVroum_Blog->update() #1 /var/www/ecirtam.net/autoblogs/autoblogs/sametmaxcom_a844ada43a979e3b1395ab9acb6afafb84340999/index.php(1): require_once('...') #2 {main}