PROJET AUTOBLOG


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

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

⇐ retour index

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!

Les graves problèmes de la vie en Thaïlande

jeudi 12 juin 2014 à 13:46

Quelques morceaux choisis de ces dernières semaines. Les > sont des monologues, les – sont des dialogues.

> ce soir une amie de ma cop veut tourner une scène meuf/meuf pour son pigeon, je suis chargé de trouver une meuf partante, j’ai un budget de 1500 TBH payé par elle et j’ai le droit de me faire sucer par la meuf
> puis je dois filmer
> elle se fait 20 000 TBH en vendant sa scène lesbienne
> faut que je trouve une bouffeuse de minou
> je me demande si c’est pas mieux de passer un coup de fil à requin
> elle a fait ses preuves
> t’as son num?


- Hi, I need to change my mirror glass and wheel
- Ok, 600 BHT (14€).
- I’ll be back tomorrow ?
- No. Ready. 20 minutes.


> les thais dans les restos, c’est toujours leur premier jour. Ils peuvent avoir travaillé 10 ans, ça change rien. Ils vont se coucher, le lendemain, tu as un thai tout neuf.


- Bon alors tu vas tout droit, vers la colline, et quand tu atteins un scouter rouge garé, tu prends à gauche.
- …


> Bon les photos du DJ qui mixe avec sa bite, on les mets dans “musique” ou dans “amateur” ?


- Non, ma nouvelle meuf m’a racheté à l’ancienne.
- T’a racheté ?
- Oui, elle lui a donné un paquet de drogue pour ne plus me voir.
- Ta nouvelle meuf c’est pas celle en taule pour trafique de drogue et du coup tu dois garder ses clebs ?
- Yep. Son avocat me demande 350 000 BHT pour la faire sortir ou elle reste 10 ans.


> Donc la grosse, elle se pointe dès qu’elle voit les photos du bbq sur facebook, elle bouffe tout, elle se met la race avec notre vodka, et une fois qu’elle voit que sa copine se fait chauffer dans la piscine, elle l’embarque et se casse.
> Et on la connaissais même pas.


- Le mec de ce resto, il fait de la haute cuisine française.
- Mais comment il s’en sort ?
- L’astuce, c’est qu’il a deux cartes. Une pour les connards de touristes. Dès qu’il voit un australien ou un russe, il lui sort le menu frite, hamburger et bière. Et quand les compatriotes arrivent, il nous file le coq au vin et la pana-cota maison.


17h > Bon parlons des choses importantes : ou-est-ce qu’on bouffe ? Fuji ? Batcave ? 101 ? BBQ ? Marché ? Da Moreno ? Buffet sushi ? Samsha ? Suédois ? Coffee mania ? Halal ?
20h> Bon, ça fait 3 heures qu’on débat, je tranche. Batcave. Ou peut être 101. Quoique je me ferais bien une pizza. C’est con que le mec des buritos ait fermé. L’indien c’est trop lourd, et au 101 ils ont une choucroute…


> Ils ont ouvert un Hooters en centre ville ? C’est idiot, c’est comme tenir un stand de pêche aux canards en face de Disneyland.

flattr this!