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...

Le don du mois : moi 12

lundi 13 avril 2015 à 10:50

Je n’ai pas de thune ce mois ci, étant très, très à découvert, ce qui est directement une conséquence d’être à son compte : les clients ne paient pas toujours à temps, quand ils paient, et je passe le permis moto ce qui me rajoute des frais.

(Je note par ailleurs que ma strat de révision des exams n’a pas changé depuis le collège. Putain que je suis un branleur, ça n’a rien à voir avec l’adolescence.)

Du coup, pas de don.

Je publie quand même l’article pour rappeler la philosophie du don : ce n’est pas une obligation, ce n’est pas un devoir, c’est quelque chose de volontaire qu’on fait selon ses capacités.

Ne culpabilisez pas de ne pas donner. Si vous donnez 1 euros une fois dans l’année, c’est très bien.

Django, une app à la fois passe à Python 3 8

dimanche 12 avril 2015 à 10:53

Beaucoup de nos projets ne sont pas encore compatibles Python 3 : 0bin, batbelt… La raison n’est pas technique, mais purement humaine, liée à notre monopilosité intramanuelle.

Néanmoins ayant posté sur reddit dernièrement le projet Django, une app à la fois, on m’a demandé de le rafraichir.

Je l’ai donc up à Django 1.8, il est maintenant compatible avec Python 3 et gagne une licence MIT.

Et boom, just like that, un projet qui existe depuis 2 ans est passé dans la liste des trending repositories de github.

Lancer pdb dès qu’une exception a lieu 9

vendredi 10 avril 2015 à 12:08

Vous vous souvenez de excepthook et de pdb ?

Mélangeons les deux !

 
import sys
import traceback
import pdb
 
def pdb_post_mortem(exc_type, exc_val, exc_tb):
    # On affiche l'exception histoire de savoir ce qu'on debug
    print("".join(traceback.format_exception(exc_type, exc_val, exc_tb)))
    # On balance pdb en mode post mortem, c'est à dire qu'il va se lancer
    # malgré le fait que le programme ne marche plus, donnant accès
    # au contexte qu'il y avait juste avant que ça foire
    pdb.post_mortem(exc_tb)
 
# On dit à python de lancer cette fonction quand il plante
sys.excepthook = pdb_post_mortem
 
# On fait planter Python histoire de voir que ça marche bien
 
def boom():
    a = 1
    b = a / 0
boom()

Et si quand ça plante, Python nous pond la stack trace, puis nous lance un joli prompt de debugging qui donne accès à ce qu’on avait en mémoire just avant que la VM ne décède :

Traceback (most recent call last):
  File "test.py", line 16, in 
    boom()
  File "test.py", line 14, in boom
    b = a / 0
ZeroDivisionError: integer division or modulo by zero

> /home/sam/Bureau/test.py(14)test()
-> a = 1 / 0
(Pdb) 1
(Pdb) print a
1

C’est plus ou moins l’équivalent de lancer son programme manuellement avec :

python -m pdb programme.py

L’avantage de la première forme, c’est qu’on peut le setter et l’oublier, on faire une config un peu plus custom. L’avantage de la deuxième forme, c’est que c’est juste une ligne à taper, et en prime si on fait c, le programme redémarre automatiquement.

Python 2 VS Python 3 : réalité de terrain 11

jeudi 9 avril 2015 à 11:00

A la sortie de Python 3.4, je vous avais dit qu’on pouvait enfin coder sereinement en Python 3. Mais en pratique, qu’est-ce que je vois dans la vie de tous les jours ?

Ca y est, je fais plus de Python 3 que de Python 2 !

50 % de mes formations, on me demande du Python 3. On ne me demande du 2 que pour des personnes coincées avec du code legacy, ou dans des domaines à la traine comme les GIS.

Quand je commence un projet, je commence toujours en python 3, sauf si je dois utiliser Twisted. Tous les autres trucs qui m’intéressent ont été portés. Et vous savez quoi ? Le portage de Twisted a repris de l’allure dernièrement, par des gens motivés par crossbar.io :)

La raison majeure qui me force à faire du Python 2 est le travail sur d’anciens projets comme des sites de culs de Max qui ont été commencé il y a des années.

Bien que je déteste toujours cordialement devoir taper ces putains de parenthèses pour faire un print, voici ce que j’adore :

En fait, à la programmation, Python 3 est plus sympa, mais pas révolutionnaire. Et puis des détails comme la suppression de % pour le type byte a bien fait chier tout le monde, et heureusement a été inversé en 3.5.

Mais par contre à enseigner… C’est juste fantastique. Pour les nouveaux venus, le changement est incroyable.

Reformater son code avec yapf 16

mercredi 8 avril 2015 à 10:47

En ce moment un outil fait son petit buzz sur hackernews, mais je n’en avais pas parlé jusqu’ici car il n’était pas encore uploadé sur pypi. C’est chose faite :

pip install yapf

Yapf est un reformateur de code, vous lui filez un fichier (ou un dossier à parcourir récursivement), et il reformate le code pour qu’il soit plus lisible, et plus proche du PEP8.

On en parle en ce moment car le code appartient à Google et que le projet est comparé à gofmt le formatteur intégré à la stack Goland dont les Golois nous ventent les mérites avec moult regards condescendant vers tous les autres langages depuis qu’ils l’ont.

Yapf est loin des features de gofmt pour le moment, mais c’est cool d’avoir un point de départ, car c’est vrai que ça manquait. Non pas que ça n’existait pas déjà, mais les tentatives précédentes n’avaient soulevé aucun enthousiasme, et donc pas beaucoup de contrib. Il a fallut, comme d’hab, qu’un concours de celui qui a la plus grosse motive tout ça à coup d’éGOs, si vous voyez ce que je veux dire. On a bien eu pip intégré à Python parce que les codeurs JS se foutaient de notre gueule avec npm installé par défaut.

Bref, pour le moment yapf s’occupe surtout des espaces et de l’indentation, mais il le fait bien.

Soit le programme suivant :

from __future__ import (unicode_literals, absolute_import, print_function,
    division)
 
    def yolo(a,b =None) :
        print ( "Ca fait mal aux yeux hein ?")
 
        a= 1
 
        if a==b :
            return(b)
 
        if True and      False:# c'est chiant n'est-il pas ?
          return "bob"
 
 
 
    WOLOLO = {
        [1, 2, 3, 4],
        [5, 6, 7, 8],
        [9, 10, 11, 12]
    }
 
    OYOOYO = {
        [1, 2, 3, 4],
        [5, 6, 7, 8],
        [9, 10, 11, 12]
    }  # yapf: disable

Un petit coup de :

yapf programme.py

Et pouf, il vous sort :

from __future__ import (unicode_literals, absolute_import, print_function,
                        division)
 
 
def yolo(a, b=None):
  print("Ca fait mal aux yeux hein ?")
 
  a = 1
 
  if a == b:
    return (b)
 
  if True and False:  # c'est chiant n'est-il pas ?
    return "bob"
 
 
WOLOLO = {[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]}
 
OYOOYO = {
    [1, 2, 3, 4],
    [5, 6, 7, 8],
    [9, 10, 11, 12]
}  # yapf: disable

Yapf existe en ligne de commande, mais peut être utilisé comme une lib. En prime, avec -i, il peut modifier le fichier sur place au lieu de juste faire l’output dans le terminal.

J’espère vraiment qu’il va gagner en traction histoire de pouvoir mettre ça dans tous mes hook git et oublier une bonne fois pour toute les guéguerres de formatage, on a d’autres chattes à coder.

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/?73 #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}