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

Pour vos thumbnails, ImageMagick à la rescousse

dimanche 1 décembre 2013 à 09:11

ImageMagick est la solution de manipulation d’images la plus souple et versatile à disposition. Après pas mal de tests, Max en avait conclu qu’appeler la lib avec un bon subprocess était simplement plus rapide et donnait des résultats de meilleure qualité que d’utiliser PIL en Python ou GD en PHP.

Et je peux vous dire qu’il en a fait des tests pour obtenir le thumbnail des nichons parfait. C’est un perfectionniste quand il s’agit des tétons.

En général, on trouve ImageMagick dans les dépôts. Par exemple, sous debian :

sudo apt-get install imagemagick

Mais il n’est pas rare que Max compile la bête histoire d’avoir la même version partout :

wget http://mirror.checkdomain.de/imagemagick/ImageMagick-6.8.7-4.tar.gz ; tar -xvf ImageMagick-6.8.7-4.tar.gz ; cd ImageMagick-6.8.7-4
./configure
make && make install
ln -s /usr/local/bin/convert /usr/bin/convert
ln -s /usr/local/bin/identify /usr/bin/identify

Après tout ça, vous aurez accès à plusieurs commandes, qui permettent des manipulations d’images diverses.

Par exemple, identify permet de récupérer des informations sur l’image telles que le format, la profondeur des couleurs… Nous on l’utilise surtout pour récupérer la taille :

identify -format "%[fx:w],%[fx:h]" "chemin/vers/image"

On peut utiliser un wrapper tel que wand pour utiliser ça depuis Python. Mais il est très facile de se faire un wrapper vite fait à la main :

import envoy
from minibelt import normalize
 
class ImageMagicError(Exception):
    def __init__(self, result, encoding):
        msg = normalize(result.std_err.decode(encoding))
        super(ImageMagicError, self).__init__(msg)
 
def size(img, encoding=sys.stdout.encoding):
    r = envoy.run('identify -format "%[fx:w],%[fx:h]" "{}"'.format(img))
 
    if r.status_code != 0:
        raise ImageMagicError(r, encoding)
 
    w, h = r.std_out.strip().split(',')
    return int(w), int(h)

Notez que j’utilise minibelt et envoy (un wrapper pour subprocess), car je suis une grosse feignasse.

Pour faire un thumbnail, la recette est plus compliquée, car ImageMagick est à l’image, ce que Perl est à la programmation. There’s_more_than_one_way_to_do_it ©.

Au final, celui qui nous a donné le meilleur résultat en qualité est cette suite d’arcanes secrètes transmise d’oreille de druide à oreille de druide :

convert chemin/image/originale -thumbnail largeurxhauteur^ -gravity center -extent largeurxhauteur -quality 80 chemin/vers/resultat.jpg

Ceci va redimensionner l’image en conservant le ratio, et si le résultat n’est pas adaptée aux dimensions finales, va en découper une partie tout en préservant le centre de l’image. La sortie sera un jpg avec un taux de qualité de 80%.

Là encore, un petit wrapper ne fait pas de mal :

def thumb(img, width, heigth, output, crop=False, encoding=sys.stdout.encoding):
    if crop:
        if crop is True:
            crop = 'center'
        crop = "-gravity {} -extent {}x{}".format(crop, width, heigth)
    else:
        crop = ''
 
    cmd = ("convert {img} -thumbnail {width}x{heigth}^ {crop} -quality 80 {output}").format(
          img=img, width=width, heigth=heigth, crop=crop, output=output,
    )
 
    r =  envoy.run(cmd)
 
    if r.status_code != 0:
        raise ImageMagicError(r, encoding)
 
    return r

Bref, ce genre de petit bricolage est loin d’être propre, mais il s’est montré fort robuste et efficace au fil des années. Quand on fait des dizaines de milliers de screenshots de films de cul tous les jours, c’est important :-)

flattr this!

Changer le mot de passe du super utilisateur django en ligne de commande

dimanche 1 décembre 2013 à 01:20

Vous avez oublié ce maudit mot de passe ? Impossible de se connecter à l’admin ?

./manage.py changepassword username

Pas besoin d’être root.

Souvenez-vous aussi que vous pouvez quasiment tout faire depuis un shell en faisant :

./manage.py shell

Ce qui vous permet d’importer les modèles de vos apps et faire toutes les querys que vous voulez.

flattr this!

Le deuil d’une idée

vendredi 29 novembre 2013 à 21:07

Ceci est un post invité de Erik posté sous licence creative common 3.0 unported.

Dans mon précédent article sur le site de Sam et Max, je parlais d’expatriation. En parlant des discussions qu’on pouvait avoir avec des étrangers j’ai évoqué le sentiment particulier qui vous saisit lorsqu’un interlocuteur vous présente des arguments ou des idées qui vont mener à la destruction de votre opinion passée et à l’intégration d’une nouvelle opinion opposée à la précédente. J’avais dit que ce sentiment à lui seul méritait un article complet et puisqu’un commentateur a voulu en savoir plus, voici la réponse à sa demande.

Le sujet de cet article est un phénomène ressenti. Est-ce que ça m’est propre ou est-ce que d’autres personnes vivent la même situation de la même manière ? Je pense que c’est générique mais comme cela survient dans des conditions un peu particulières et qui, je le crains, ne seront pas vécues par beaucoup de gens, je n’ai jamais eu l’occasion d’en discuter avec quelqu’un partageant ce ressenti.

Ce dont je parle, c’est la sensation physique et mentale qu’on a lorsqu’on découvre qu’on avait des opinions fausses et qu’au delà de la simple découverte on intègre cette découverte dans notre conscience et on admet publiquement avoir été dans l’erreur et on admet reconnaître la validité de l’opinion à laquelle on s’était préalablement opposé.

Ca fait beaucoup de découvertes et d’admissions, mais ces précisions sont importantes parce qu’il est question d’une expérience très personnelle. Si notre erreur était sans importance sur un sujet sans importance, comme donner la mauvaise réponse en regardant “Questions pour un champion” à la télé, il est évident que ça ne nous touchera pas.

Je vais en venir à des exemples précis, ne vous impatientez pas ! Mais il faut aussi expliquer dans quelles situations ce phénomène survient. Je suis un grand débatteur. Sur un site d’actualités informatiques, j’ai déjà contribué plus de 4500 messages dans plus de 1000 sujets et comme pour mon précédent article chez Sam et Max, j’ai pour habitude d’écrire des pavés. Sur un forum privé avec des amis, c’est plus de 10,000 messages que j’ai laissés tantôt pour de la conversation de comptoir et tantôt pour du débat, encore et toujours sous forme de pavé. C’est un de mes travers : ce qui se conçoit bien s’énonce clairement et pour cela je n’arrive pas à faire des phrases courtes et peu nombreuses. Si je veux éviter ou limiter la méprise chez les gens qui me lisent et me répondent, j’ai la compulsion d’être aussi précis et exhaustif que possible. Le débat sur des forums est une forme d’art, une discipline à part entière. Benjamin Bayart, l’ancien président de French Data Network, y fait allusion dans ce qui est désormais appelé “l’échelle Bayart” : une classification des internautes en fonction de leur maturité dans l’utilisation d’internet. Au stade de “commentateur”, on échange de réelles informations avec nos interlocuteurs et pour peu qu’on ait des gens de bonne volonté et de bonne foi de chaque côté d’une certaine thèse, on peut émettre et recevoir des arguments qui feront progresser nos connaissances et seront à même de nous faire progresser vers la vérité et de dépasser nos erreurs lorsque c’est le débatteur adverse qui a raison. Quand des arguments sont suffisamment étayés pour être convaincants et sont inattaquables, il se passe généralement l’une des 2 choses suivantes. La 1ère réaction possible est le ragequit, ce qui veut dire que blessé dans notre amour-propre on quitte la discussion qu’on laisse derrière nous pour ne plus la voir et ne pas l’affronter. La 2ème réaction possible est d’intégrer la validité des arguments qui nous ont été présentés et de le reconnaître publiquement. C’est plus difficile à faire qu’à dire et c’est l’objet de cet article. J’ai détaillé l’exemple du débat sur un forum internet, mais le même genre d’interaction est possible hors internet simplement en discutant avec un ami.

Cette sensation dont je parle, c’est comme une boule de nerf à l’estomac ou au niveau du plexus. Ca vous prend aux tripes. La boule de nerf se traduit aussi par une gorge noueuse et une déglutition difficile ou douloureuse. Les muscles sont tendus. On transpire. Vous avez déjà eu un grand sentiment de colère dirigé contre vous-même ? Vous avez déjà fulminé ? Et bien c’est cela. C’est de la colère et du stress. On a envie de mettre un coup de poing dans le mur. C’est comme si les idées dans notre tête menaient une guerre les unes contre les autres. Une seule opinion sortira gagnante et l’autre devra mourir. Dans le cerveau, c’est un peu comme quand vous vous faites virer d’un boulot (ou autre situation stressante). Vous savez que ressasser ces choses douloureuses est inutile et puisque vous avez intégré l’information intellectuellement, vous aimeriez bien pouvoir en détourner votre attention pour arrêter d’en souffrir. Mais au lieu de cela, vous êtes pris d’obsession et votre attention revient vers ce sujet encore et encore. Quand vient la fin de journée, vous êtes épuisé physiquement et mentalement.

La première fois où je me rappelle avoir vécu cette sensation, je n’ai pas reconnu publiquement mon erreur mais j’ai intégré consciemment l’argument présenté par mon interlocuteur. C’était à l’époque du PACS, pendant mes études. En arrivant au restaurant universitaire avec un copain d’études, on s’est fait distribuer des tracts au sujet des homosexuels. Je ne me rappelle plus si c’était en leur faveur ou leur défaveur, et ce n’est pas important. A l’époque, j’étais de l’avis que l’homosexualité n’était pas naturelle. Mon erreur résidait dans le fait de prendre mon hétérosexualité comme une norme universelle. Mais le pote présent avec moi de manière très nonchalante a su me présenter un argument simple et imparable sur le fait que l’homosexualité était tout à fait naturelle même si elle concerne une minorité de personnes. Je ne saurais pas retrouver ses mots et c’est peu important. De toutes façons, cet article n’a pas vocation à débattre sur l’homosexualité. Pratiquement 15 ans après cette discussion, mes émotions sont encore en désaccord avec mon cerveau. J’ai toujours une réaction émotionnelle négative si je vois 2 mecs en train de se rouler une pelle, mais intellectuellement (et donc politiquement) je suis à fond pour faire disparaître les différences légales qui existent entre hétéros et homos. Mais ce qui compte et qu’il faut retenir, c’est cette confrontation de l’intellect à une idée contraire mais justifiée et qui nécessite de changer d’opinion.

La seconde fois, il me semble, fut lorsque ma compagne Thaï a discuté avec moi des prisons françaises. Pour faire simple, elle m’a fait valoir que nos prisons nationales étaient assez inhumaines comparées à ce qui se fait dans d’autres pays. Venant d’un petit bout de femme ayant grandi à 10000 km de la France, ça m’a sérieusement chauffé. Pendant ma pause diner, j’ai sorti Google et j’ai commencé à me renseigner sur ce que madame disait. Et il est vrai que le système carcéral français est vilain comparé à ce qui se fait dans les autres pays développés. A l’époque, je commençais à peine à m’intéresser à la politique et donc c’est un sujet que je ne connaissais pas. En tout cas, je ne le connaissais pas avant d’avoir dégainé mon Google. Et dans les années suivantes, ce que j’ai alors découvert a été confirmé par les multiples rapports alarmants du Contrôleur général des lieux de privation de liberté, de la Cour des Comptes, les multiples condamnations de la France par la Cour Européenne des Droits de l’Homme, et les diverses ordonnances par le Conseil d’Etat tantôt pour dératiser une prison, tantôt pour rénover une autre qui aurait fait honte à Midnight Express. Surpopulation, taux de suicide très supérieur à ce qui se passe à l’étranger, incarcération de gens qui relèvent plutôt de la psychiatrie… C’était donc début 2004, quelques mois après le début de mon expatriation. Je n’ai jamais eu la fibre nationaliste mais se faire dire par sa chérie thaïlandaise que la France est un pays inhumain en matière de prisons ça fait mal au coeur, et découvrir qu’elle a raison est encore plus douloureux. Comme dit plus haut, c’est vraiment un sentiment physique et mental et je pense que le terme de “douleur” est approprié. Il y a une réelle souffrance.

Par la suite, j’ai eu plusieurs occasions sur les forums internet de développer mes connaissances de la manière décrite plus haut. J’ai ainsi pu découvrir des choses qui allaient contre mes opinions. Inutile de lister tous les sujets sur lesquels c’est arrivé. Il m’est arrivé de retomber dans le ragequit. C’est normal. C’est naturel. Ce n’est pas du jour au lendemain qu’on apprend à dire “merci de m’avoir montré à quel point j’avais tort et pourquoi“. Même aujourd’hui, alors que j’ai bien intégré la chose, ça reste quelque chose de douloureux mais on s’y soumet plus facilement. Comme les prises de sang ou les visites chez le dentiste (ou pas, pour le dentiste). Pratiquement tous les sujets qui prêtent à débat passionné ont une réponse et à moins d’avoir activement recherché l’information qui transforme votre opinion en connaissance, la validité de votre opinion c’est zéro. Votre opinion est à peu près aussi valide que le résultat d’un tirage à pile ou face.

On a une tendance naturelle (c’est prouvé scientifiquement) à refuser l’exploration des arguments adverses. On a un penchant naturel pour les arguments qui nous confortent (le mot “confort” n’est pas fortuit) dans nos opinions. C’est confortable d’être dans un endroit sécurisant et qui renforce ce qu’on tient pour acquis tandis qu’un défi à nos opinions est une forme d’agression. C’est le genre de chose qui mène au biais de confirmation et autres processus erronnés de raisonnement.

Petit aparté : il est tout à fait envisageable à ce stade de mon article qu’un lecteur ait cette question à me poser : Qu’est-ce qu’un argument convaincant ? Comment peux-tu être sûr de la validité d’un argument ou du résultat d’une étude, etc. ? Ce genre de question est trop complexe pour faire un article dessus sur le site de Sam et Max. Dans ma démarche intellectuelle, je me suis tapé de la lecture, du podcast et du visionnage de conférences sur plusieurs sujets qui concourent à la compréhension de cette thématique. On parle de logique, de scepticisme scientifique, philosophie des sciences, théorie de la connaissance, épistémologie, et j’ai déjà consacré quelques centaines d’heures d’écoute ou de visionnage à des débats sur des thématiques religieuses, philosophiques et scientifiques. En fait, j’ai une série d’articles en cours de rédaction sur mon blog pour aborder ces thèmes et même selon mes standards de pavés, ces articles sont conséquents et je commence à envisager la rédaction d’un livre. Donc voilà : si vous comptiez poser une question comme ça, je vous ai pris de court. Nananèreeuuuuh… :-P

Si vous n’avez jamais vécu ce phénomène dont je vous parle et si vous n’arrivez pas à vous représenter la chose, réfléchissez donc à une opinion ou une croyance qui vous est chère et ce que ça vous ferait si on vous mettait sous le nez la preuve irréfutable que vous vous êtes trompé ! Le meilleur exemple est probablement la religion : si vous avez une religion et que demain je vous démontre de manière irréfutable que votre religion est fausse, vous le vivrez comment ? Je ne vais pas mener ici le débat sur la religion parce que ce n’est pas le sujet. Et pour la raison exposée plus haut, je sais que mettre au défi ses croyances importantes est une forme d’agression. Donc je ne mènerai pas ce débat, mais j’espère que cet exemple peut être parlant pour les lecteurs pour essayer d’imaginer ce que ça peut faire quand leur opinion ou leur croyance est prise en défaut. Sérieusement, si vous êtes religieux, réfléchissez à cette situation hypothétique ! Et si vous ne l’êtes pas, essayez d’avoir la réflexion sur un autre sujet qui vous tient à coeur.

Pour comprendre ce phénomène dont je parle, il y a une autre analogie qui me semble adéquate et c’est ce qui a inspiré le titre de cet article. C’est le modèle de Kübler-Ross aussi appelé “les 5 étapes du deuil” : le déni, la colère, le marchandage, la dépression et l’acceptation. Reconnaître son erreur, c’est comme faire le deuil d’une opinion.

J’espère que cet article répond à la question qui m’a été posée et que les lecteurs auront su mettre le contenu en relation avec leur propre vécu.

flattr this!

Qu’est-ce qu’un namespace ?

jeudi 28 novembre 2013 à 07:42

Un mot qui vient et qui revient comme on en a des tas en informatique, et qui est utilisé par tout le monde comme si chacun était supposé savoir.

Très énervant quand on ne sait pas ce que ça veut dire.

Un namespace, ou espace de noms, est simplement un conteneur de noms, un groupe.

On s’en sert pour pouvoir distinguer deux choses qui ont le même nom.

Par exemple, un trou du cul peut être un anus ou un connard. Si quelqu’un fait la mention d’un “trou du cul”, j’ai besoin de contexte pour savoir si il parle d’un orifice ou d’un fils d’horreur. Ce contexte peut être donné par un namespace.

Comment est représenté un namespace dépend de l’outil utilisé.

Ainsi, en XML, c’est un préfixe puis deux points :

<xsd:element></xsd:element>
<taoisme:element></taoisme:element>

Ici j’ai deux balises “element”, mais elles sont préfixées par deux namespaces : xsd et taoisme.

C’est tout. Il n’y a rien d’autre caché derrière le namespace, c’est simplement un moyen de s’assurer qu’on sait bien de quoi on parle.

Certains namespaces sont standardisés. Par exemple, xsd est un namespace réservé aux balises qu’on retrouve dans un fichier .xsd. D’autres sont créés par les utilisateurs pour des raisons d’organisation.

En effet, un des avantages du namespace, c’est qu’il évite que deux références homonymes ne s’écrasent l’une l’autre.

Par exemple en Python, le nom du module qui contient une fonction peut servir de namespace.

Si je fais :

import os
import shelve

Alors j’ai accès à trois fonctions open():

Et aucune fonction ne s’écrase l’une l’autre. Le nom du module, étant utilisé comme namespace, permet la distinction pour l’humain ET la machine.

Dans ce langage, cependant, on peut copier une référence d’un namespace à l’autre. Par exemple :

from datetime import date

Ceci va importer date et le rendre disponible dans le namespace en cours. Du coup on aura pas besoin de préfixer date pour l’utiliser dans le namespace en cours, mais en contrepartie, on ne pourra pas créer de variable date car cela écraserait la référence précédente.

Si vous prenez par exemple PHP 5 qui n’avait pas encore de mécanisme de namespace à l’époque, les dev étaient obligés de créer artificiellement un namespace en allongeant le nom de toutes leurs fonctions avec ‘sujet_’. Ce qui donnait des noms à rallonge du genre : mysql_real_escape_string().

flattr this!

Astuces de recherche

mercredi 27 novembre 2013 à 09:46

Quand vous voulez traduire un mot compliqué d’une langue à l’autre, les outils de traduction en ligne marchent pas super bien. Une bonne solution ? Chercher le terme sur wikipedia, puis demander l’article dans une autre langue. Non seulement on a la traduction voulue dans le titre de l’article, mais en plus tout le champ lexical lié dans le corps de l’article.

Tips : la commande bang pour ddg est !wfr pour la version française de wikipédia.

Quand vous cherchez un nouveau mot à la noix comme “lulz”, un truc cochon style “bukakke” ou une abréviation obscure du genre “GTFO”, vous n’allez pas la trouver dans le dico ou sur wikipedia. La meilleure source pour ce genre de terme : urbandictionry.com. En plus, c’est drôle.

Tips : la commande bang pour ddg est !ud

Vous voulez regarder un film ou une série en VO streaming mais elle n’est pas sortie en France ? Ou alors votre connexion bride ces fournisseurs ? Ou vous avez peur de vous faire choper ?

Allez sur les sites de streaming en espangol ! Ils listent les mêmes séries, le plus souvent en VO sous-titré ES, sur des hébergeurs différents complètement hors radar de nos tristes sires français. Et en plus, il n’y a pas de limite de temps ou de débit. Exemple : seriesyonkis et peli24.

Tips : évitez les séries doublées en espagnol comme la peste. C’est HORRIBLE. Dans stargate O’Neil a la voix de Teal’c et inversement…

Vous allez sur des sites de rencontre et vous voulez évitez les faux profiles ? Clic-droit sur la photo et enregistrez l’image sur votre bureau. Allez sur Google Image, et dans le champ, cliquez sur l’appareil photo pour uploader l’image.

Vous allez très vite voir si l’image a été réutilisée.

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