Web – Sam & Max http://sametmax.com Du code, du cul Wed, 23 Dec 2020 13:35:02 +0000 en-US hourly 1 https://wordpress.org/?v=4.9.7 32490438 Sheepit – Le rendering pour tous, accessible sans trop de difficultés et gratos http://sametmax.com/sheepit-le-rendering-pour-tous-accessible-sans-trop-de-difficultes-et-gratos/ http://sametmax.com/sheepit-le-rendering-pour-tous-accessible-sans-trop-de-difficultes-et-gratos/#comments Tue, 18 Apr 2017 10:20:22 +0000 http://sametmax.com/?p=23149 Entre deux bars à putes et les restaux faut bien prendre un peu de temps pour se relaxer, il y a les salons de massage branlette vous me direz, mais pas que.

Dans une galaxie lointaine il y a fort fort longtemps je m’amusais à faire de la 3D, je vous parle d’un temps que les jeunes ne peuvent pas connaître…
A l’époque régnaient en maîtres absolus 3DS MAX, MAYA, CINEMA 4D, etc. et les outils maisons des studios Pixar. Pour les simples mortels comme moi on avait droit à Truespace, Vue D’esprit, Poser et sûrement d’autres dont j’ai oublié le nom. Truespace était mon favori, plutôt sympa, pas compliqué à prendre en main et pas cher (voir gratos quand on se démerdait).

Pour faire mumuse c’était super mais voilà, c’était long, long, longggggg………..

De nos jours on a droit à de supers cartes graphiques comme les Titans X  et pas mal de logiciels de 3D gratuits aussi, certes on peut faire dans le warez et se procurer Maya, 3D Studio, Cinema4D et plein de nouveaux que je ne connais pas mais restons dans le légal pour une fois car ce qui se passe est intéressant.

Donc le monde du gratos a super bien évolué, il y a plein de tutos sur YouTube, des logiciels gratuits concurrencent les plus gros softs de 3D sur le marché et si ses derniers ont du succès c’est surtout parce que les studios en ont fait leur standard.

Je vais vous parler de Blender, c’est un projet open source que je suis de très loin mais qui a attiré mon attention depuis peu avec quelques superbes vidéos sur YouTube sur lesquelles je suis tombé:
https://www.youtube.com/watch?v=-TksegJETqI
https://www.youtube.com/watch?v=kSp3pHA_tRM
https://www.youtube.com/watch?v=7lY9SlQ8gjY
https://www.youtube.com/watch?v=Q1VCLFJY250
https://www.youtube.com/watch?v=143k1fqPukk
https://www.youtube.com/watch?v=LcCQKuWPhXk

Il y a vraiment une bonne communauté.

Des milliers de tutos sur YouTube pour s’en sortir avec les millions d’options que possède le logiciel.

Bref tout ça c’est merveilleux, pour perdre son temps y’a pas mieux. Mais il y a un hic, le temps de rendu justement. Je me souviens de cette époque où j’attendais 1 heure, voire 2 pour rendre une seule image et m’apercevoir que le résultat était moyen.
Et de ce côté ça n’a pas changé ! C’est même plus long avec toutes les nouvelles options de raytracing possibles même avec des cartes graphiques surpuissantes comme cité plus haut. Alors une animation….

Blender possède un plugin de network rendering, à savoir partager le temps de calcul sur plusieurs serveurs du réseau, c’est sympa mais c’est pas tout le monde qui a 10 ordis à la maison…

Une solution a vu le jour il y a quelques années et quelques milliers de membres font vivre une véritable ferme de rendu.

Le principe de la ferme de rendu:
Via un réseau d’ordinateurs on partage le temps cpu entre plusieurs machines, accélérant ainsi le temps de rendu.

Cette solution c’est Sheepit.

Ok on décolle ! Vous installez leur app. java sur un serveur qui traîne au garage ou sur votre ordi et vous avez droit à des points en fonction du temps machine que vous consacrez à l’application. Ces points vont vous permettre “d’acheter” du temps de calcul parmi tous les participants.
Ainsi un projet d’animation qui d’ordinaire me prend 5 jours est rendu en quelques heures, gratos en plus !

Je trouve le concept très sympa, tout est gratuit, il y a une admin avec le nombres de personnes qui partagent vos calculs, on peut former des équipes pour se tirer la bourre ou privilégier les cpu à ses coéquipiers, bref c’est bien pensé et je voulais en parler pour, qui sait, leur ramener un peu de monde.

Aux dernières nouvelles il y a environ 350 machines connectées en permanence, vous imaginez le temps de calcul offert !

Une petite ligne de code pour mettre un serveur dans la pool:

inscrivez-vous sur sheepit : https://www.sheepit-renderfarm.com/getstarted.php
Il y a une version applet java pour le navigateur mais je n’ai pas testé, je préfère laisser tourner leur app. sur un serveur h24:
téléchargez l’app. java: https://www.sheepit-renderfarm.com/media/applet/sheepit-client-5.366.2818.jar

Sur CentOS j’ai créé un user “sheepit” pour pas lancer leur app. en “root”:

useradd sheepit

ensuite dans un screen je lance l’app. avec les paramètres suivants:

sudo -u sheepit java -jar /sheepit/sheepit-client-5.366.2818.jar -ui text -login mon_login_sheepit -password mon_pass_sheepit -cores 3 -compute-method CPU

-ui text : Pour lancer l’app. java en headless (pour les serveur sans GUI)
-login mon_login_sheepit : Le login que vous avez choisi lors de l’inscription à sheepit
-password mon_pass_sheepit : Le mot de passe que vous avez choisi lors de l’inscription à sheepit
-cores 3 : Le nombres de processeurs que vous voulez dédier à Sheepit, plus vous en dédiez plus vous gagnerez des points et plus vos projet passeront en priorité dans la pool de rendu.
-compute-method CPU: N’utilise que le cpu de votre serveur, vous pouvez mettre GPU si vous en avez.

Ce système a beaucoup d’avantages, il vous permet enfin de faire de supers rendus en peu de temps, sans dépenser d’argent, c’est vraiment magique. (je ne vous partagerais pas les merdes que j’ai faites car je suis une quiche en 3D). L’inconvénient c’est qu’il faut ensuite télécharger toutes les frames du projet, là j’ai 24 Go de frames à télécharger, ça fait lourd si on n’a pas la fibre.

Ils ont un forum qui ne demande qu’à grandir.

Il y a des artistes en herbe qui n’ont pas les moyens de s’offrir des cartes graphiques à 2000€ et je trouve ce système juste fantastique pour eux et même pour les gros projets. J’espère que vous ferez passer le mot et si vous avez un serveur ou deux soyez cool, ça prend 5 minutes.

Allez le meilleur pour la fin:

A poil les putes!

]]>
http://sametmax.com/sheepit-le-rendering-pour-tous-accessible-sans-trop-de-difficultes-et-gratos/feed/ 9 23149
Multiboards Customizable – Le retour de la mort de la peur de mourir http://sametmax.com/multiboards-customizable-le-retour-de-la-mort-de-la-peur-de-mourir/ http://sametmax.com/multiboards-customizable-le-retour-de-la-mort-de-la-peur-de-mourir/#comments Tue, 18 Aug 2015 11:46:48 +0000 http://sametmax.com/?p=16741 Pour ceux qui ont suivi la lamentable mais néanmoins poilante mise en prod de la nouvelle version buggée de MB j’ai du reporter un rendez-vous avec mon escort pour réparer le bébé.

Normalement ça devrait marcher (ça valait pas un post mais c’est pour remplir un peu plus les BAL des abonnés…)

Rendez-vous ici ou ou encore et donnez-moi vos impressions si comme moi vous n’avez pas d’ami et passez votre temps à la maison devant l’ordi au lieu de vous dorer la pilule entouré de femmes fontaines sur une île déserte.

Une source de flux RSS pas mal ici.

PS: Normalement dans l’onglet en haut à droite il devrait y avoir la liste des boards populaires, on calcule ça en fonction du nombre de visiteurs en ligne en temps réel, Sam avait fait un article dessus.

Et une bonne fin qui pourrait faire brève de comptoir:
“Tant que le board n’est pas populaire il reste anonyme” (et donc ne s’affiche pas dans l’onglet) ^^

]]>
http://sametmax.com/multiboards-customizable-le-retour-de-la-mort-de-la-peur-de-mourir/feed/ 18 16741
Traquez les erreurs de vos apps Django avec Sentry http://sametmax.com/traquez-les-erreurs-de-vos-apps-django-avec-sentry/ http://sametmax.com/traquez-les-erreurs-de-vos-apps-django-avec-sentry/#comments Wed, 26 Mar 2014 04:36:51 +0000 http://sametmax.com/?p=9944 Tout foire tout le temps. Le site (ou app) sans erreur n’existe pas. Après chaque mise à jour on croise les doigts et on espère que tout va bien se passer.
Les plus courageux auront fait des tests unitaires en amont qu’ils lanceront avant l’update, les autres comme moi vont commiter leurs changements et redémarrer le serveur prod. On est boucher de père en fils dans la famille…

Avant toute chose Sentry qui avant était un projet Django serveur/client a depuis évolué et est devenu un serveur uniquement, laissant le choix du client suivant votre framework/language de travail. Sentry est disponible sur à peu près toutes les plateformes (Python, PHP, Ruby, JavaScript, Java, Node.js, iOS) et les frameworks Rails et Django. La documentation est très fournie et le projet très actif.

Dans le cas d’un site web en général on a tellement de pages qu’on ne peut pas prédire à l’avance ce qui va foirer ou pas (mais ça foire toujours, tout foire, etc…). Même si vous avez fait les tests unitaires vous aurez forcément oublié quelque chose.

Cette page spéciale sur les nains obèses unijambistes scatophiles pour lesquels vous avez créé un tag unique et qui ne supporte pas que vous ayez changé votre mode de cache va lamentablement planter et vous priver de la fidélité de DSK sur votre site pour longtemps.

Heureusement nous allons pouvoir logger toutes ces erreurs et avoir des jolis graphiques post-mortems. Bien évidement ça va vous faire du taf en plus bande de feignasses.

Sentry vient en standalone ou en version gratuite limitée, hebergée par les créateurs.
J’ai voulu installer la standalone parceque je revenais de l’apéro et qu’au 8ème Ricard on veut tout faire soit-même mais la raison et 14heures de sommeil l’ont emporté, c’est à mon réveil que je me suis alors décidé à installer la version trial limitée à 7 jours de log et 2800 evenements loggés (qui au passage suffit sur un de nos plus gros sites).

la mise en place est vraiment des plus simples:

Créez un compte et ensuite récupérez la clef API dans les préférences sur votre compte en ligne Sentry.

Du côté de votre projet Django:

Installez Raven, qui est un client Python pour Sentry. Il va se charger de collecter vos erreurs et les transmettre à Sentry.

Comme d’habitude une bonne PIP:

  pip install raven

Dans le fichier settings.py de votre projet Django:

Utilisez la clef Api fournie par Sentry (voir plus haut)

# used for sentry login
RAVEN_CONFIG = {
    'dsn': 'https://aboudouboudousplish:aboudouboudousplash@app.getsentry.com/1984',
}

Vous pouvez faire un test pour voir si tout est bien configuré:

Dans votre projet Django tapez

python manage.py raven test

Vous devriez recevoir un email de Sentry avec le récapitulatif du test raven.


L’interface Sentry:

La liste des évènements avec possibilité de filtres.

Sur le flux vous allez avoir la liste de tous les évènements loggés, vous pouvez les trier en choisissant parmi une pléthore d’options. Vous pouvez nettoyer ce flux en un seul clic (lors d’un redémarrage de serveur vous risquez d’avoir beaucoup d’erreurs qui n’en sont en fait pas, donc inutile de les traiter).

L'évènement en détail, une clarté qui donne envie d'avoir des bugs ^^

Chaque évènement du flux a une vue détail où vous allez pouvoir tracer le bug, c’est clair et plein d’informations (un peu comme les pages de debug Django). Il y a la possibilité d’ajouter des notes, de relancer la requête afin de vérifier la correction effectuée.


Le mode Team:

Sentry vous permet de bosser en équipe, vous créez un projet, des utilisateurs et chacun peut monitorer, corriger des bugs etc (pas dispo dans la version trial). Vous pouvez aussi créer des groupes d’utilisateurs qui n’auront accès qu’à certains projets. Le côté équipe a bien été intégré. Vous saurez sur qui gueuler lorsque le bug aura été mal corrigé.

Conclusion:
Monitorer ses apps est un vrai calvaire quand on n’a pas les bons outils ou que ces derniers sont chiants à installer/maintenir.
Sentry offre deux possibilités d’installation et leur mode trial vaut vraiment le coup (gratuit je le répète), les plus courageux se farciront l’install.
Pour la version standalone j’ai lu un peu partout qu’il était préférable de l’installer sur un serveur à part, à méditer avant de se lancer. Les logs sont en temps réél, vous n’avez pas à attendre le lendemain pour savoir ce qui a planté la veille, vous pouvez donc corriger vos bugs rapidement.

Le plus gros problème de Sentry je pense c’est qu’on tombe accroc, je m’y rend désormais plusieurs fois par jour pour voir si il n’y a pas un petit bug à corriger :)

PS: je cherche l’équivalent pour monitorer les serveurs, Munin est trop vieux et tous les autres outils que j’ai pu tester demandent à installer (entendez passer des heures à compiler) toute une machinerie. L’idéal serait des paquets à installer sur les serveurs à monitorer + service en ligne à la Sentry.

]]>
http://sametmax.com/traquez-les-erreurs-de-vos-apps-django-avec-sentry/feed/ 16 9944
Sondage! Aimeriez-vous un espace petites-annonces chez S&M ? http://sametmax.com/sondage-aimeriez-vous-un-espace-petites-annonces-chez-sm/ http://sametmax.com/sondage-aimeriez-vous-un-espace-petites-annonces-chez-sm/#comments Sat, 15 Feb 2014 16:53:54 +0000 http://sametmax.com/?p=9165 Pendant que Sam vous mijotte des bons petits tutos à se lécher les babines moi je vais vour divertir un peu l’oignon avec ce petit vote.

On a quelques e-mails par mois assez surprenants, certains nous demandent si on ne veut pas bosser pour eux, d’autres veulent faire la publicité de leur app/produit, d’autres encore aimeraient nous rencontrer, voire même certaines coucher avec moi (ah non… merde)

On ne peut pas répondre favorablement à ces requêtes et c’est peut-être l’occasion de permettre à certains d’entre-vous d’échanger, vendre, se rencontrer via une sorte de pages jaunes/craiglist/ads (appelez ça comme vous voulez).

En gros des petites-annonces dans lesquelles nous définirons des catégories précises (on ne veut pas d’annonce pour vendre la recette miracle pour la repousse de la moustache).

On préfère vous demander avant car on estime que c’est une bonne chose de proposer plutôt que d’imposer. Et puis pour tâter le potentiel.

Les annonces sont bien évidement gratoches, on mettra peut-être des quotas si il y a des abus.

Quelques catégories pour donner une idée:
– Lans (parties)
– hack parties
– ventes de matos info
– trucs geek (gadgets, etc)
– demande de cours d’info
– donne des cours d’info
– donne des cours de math
– sallons info
– propositions de collaboration
– projets de conquête du monde
– demande d’aide sur des sujets particuliers
etc.

On a pas encore de liste précise des catégories mais il y a de quoi faire dans notre domaine. Si vous avez des idées quand aux catégories n’hésitez pas, balancez !

Aller, détente….

Note: There is a poll embedded within this post, please visit the site to participate in this post's poll. ]]>
http://sametmax.com/sondage-aimeriez-vous-un-espace-petites-annonces-chez-sm/feed/ 14 9165
Utilisez-vous l’anglais pour vos recherches d’informations ? http://sametmax.com/utlisez-vous-langlais-pour-vos-recherches-dinformations/ http://sametmax.com/utlisez-vous-langlais-pour-vos-recherches-dinformations/#comments Mon, 10 Feb 2014 07:22:14 +0000 http://sametmax.com/?p=9106 A l’heure où internet est l’outil quasi-indispensable pour trouver une information (technique ou de tous les jours) et où une grande partie de cette dernière est rédigé en anglais la question est:

Note: There is a poll embedded within this post, please visit the site to participate in this post's poll. ]]>
http://sametmax.com/utlisez-vous-langlais-pour-vos-recherches-dinformations/feed/ 37 9106
Virtualenv EnvironmentError: mysql_config not found sous MAC OSX http://sametmax.com/virtualenv-environmenterror-mysql_config-not-found-sous-mac-osx/ http://sametmax.com/virtualenv-environmenterror-mysql_config-not-found-sous-mac-osx/#comments Tue, 04 Feb 2014 10:56:18 +0000 http://sametmax.com/?p=8963 Comme le post précédent est inutile j’en fais un autre qui doit concerner au moins 0.00001% de la population.

A vous qui essayez depuis 2 heures de configurer MySQL-python sous votre virtualenv, cet article vous est dédié.

Cette erreur vicieuse m’arrive à chaque fois que j’installe MySQL-python dans un nouvel environnement virtuel. Ceci dit vous l’aurez peut-être sous un autre OS. Sur CentOS j’avais qu’à faire un yum install mysql-devel mais sous Mac c’est autre chose. Plus de puissance engendre plus de responsabilités…


Max $  pip install MySQL-python
Downloading/unpacking MySQL-python
  Downloading MySQL-python-1.2.5.zip (108Kb): 108Kb downloaded
  Running setup.py egg_info for package MySQL-python
    sh: mysql_config: command not found
    Traceback (most recent call last):
      File "", line 14, in 
      File "/Users/Max/.virtualenvs/zooscator/build/MySQL-python/setup.py", line 17, in 
        metadata, options = get_config()
      File "setup_posix.py", line 43, in get_config
        libs = mysql_config("libs_r")
      File "setup_posix.py", line 25, in mysql_config
        raise EnvironmentError("%s not found" % (mysql_config.path,))
    EnvironmentError: mysql_config not found
    Complete output from command python setup.py egg_info:
    sh: mysql_config: command not found

Traceback (most recent call last):

  File "", line 14, in 

  File "/Users/Max/.virtualenvs/zooscator/build/MySQL-python/setup.py", line 17, in 

    metadata, options = get_config()

  File "setup_posix.py", line 43, in get_config

    libs = mysql_config("libs_r")

  File "setup_posix.py", line 25, in mysql_config

    raise EnvironmentError("%s not found" % (mysql_config.path,))

EnvironmentError: mysql_config not found

----------------------------------------
Command python setup.py egg_info failed with error code 1
Storing complete log in /Users/Max/.pip/pip.log

Il faut éditer votre fichier activate qui se trouve dans le répertoire bin de votre environnement virtuel: ex “/Users/Max/.virtualenvs/zooscator/bin/activate”

vi /Users/Max/.virtualenvs/zooscator/bin

Trouvez les lignes suivantes et ajoutez:

PATH=”$PATH:/opt/local/lib/mysql5/bin/”

...
_OLD_VIRTUAL_PATH="$PATH"
PATH="$VIRTUAL_ENV/bin:$PATH"
PATH="$PATH:/opt/local/lib/mysql5/bin/"
export PATH
...

Chez moi le chemin vers mysql est /opt/local/lib/mysql5/bin/, si vous ne connaissez pas le vôtre utilisez la commande locate: ex locate mysql

Une fois le fichier activate édité il faut le resourcer:

source /Users/Max/.virtualenvs/zooscator/bin/activate

Et vous pourrez alors installer MySQL-python tranquillou billou:

Max $  pip install MySQL-python

Downloading/unpacking MySQL-python
  Running setup.py egg_info for package MySQL-python

Installing collected packages: MySQL-python
  Running setup.py install for MySQL-python
[....................]
Successfully installed MySQL-python
Cleaning up...

Je vais nourrir mon cochon d’Inde.

]]>
http://sametmax.com/virtualenv-environmenterror-mysql_config-not-found-sous-mac-osx/feed/ 16 8963
Les stats Sam&Max 2013 http://sametmax.com/les-stats-sammax-2013/ http://sametmax.com/les-stats-sammax-2013/#comments Sat, 28 Dec 2013 13:02:23 +0000 http://sametmax.com/?p=8532 Presque 2 ans déjà que ce blog prêche la bonne parole aux brebis égarées ici bas. Comme tout webmaster qui se respecte on adore les stats alors on va se faire un petit résumé de l’année 2013 dans la joie et la bonne humeur. On avait déjà publié quelques stats ici d’ailleurs l’été dernier.

Pour info sur l’année 2012 le blog totalisait 244,183 visites.

Petit récap année 2013:

Date de création: 4 février 2012
Visites pour l’année 2013: 1,173,671
Visites depuis la création du blog: 1,417,854
Nombre de posts: 323
Nombre de commentaires: 5967

Qui nous envoi du monde ?

Search Engines 481,053
Twitter 20,139
news.humancoders.com 9,702
sebsauvage.net 8,837
Facebook 6,072
Netvibes 4,727
multiboards.net 4,465
google.fr 1,366
macg.co 1,257
search.free.fr 1,129
Google Reader 897
Google+ 837
lehollandaisvolant.net 678

Par quels mots-clefs les gens sont arrivés ici ?
(Comme il y en a trop la liste est volontairement tronquée)

masturbation feminine 19,981
masturbation féminine 8,896
fkk 6,504
masturbation 6,362
video masturbation 3,789
masturbation video 3,272
masturbation femme 2,403
maison close allemagne 2,105
freeplug 1,904
synchroniser freeplug 1,641
video masturbation feminine 1,427
masturbation feminine video 1,328
sam et max 1,197
fkk allemagne 1,118
synchronisation freeplug 965
sex japon 868
sexe japonais 813

Les posts les plus vus:

Home page / Archives 268,964
Masturbation féminine – Un peu de théorie en vidéo 160,715
Une journée dans un FKK (maison close Allemande) 65,974
Synchroniser les freeplugs (les adaptateurs réseaux CPL de free) 43,321
Les abréviations de la prostitution et des Escorts, vous connaissez ? 33,502
Les Japonais et le sexe – des gros malades… Ou pas… 17,011
Les émoticones cachées de Skype 15,244
Il ne faut pas prendre les gens pour des cons mais ne jamais oublier qu’ils en sont 14,666
10 astuces pour Sublime Text 2 12,716
Ajouter un chemin à la variable d’environnement PATH sous Windows 9,309
Les articles pour apprendre Python, dans le bon ordre :-) 8,188
Liste des plugins sublime text que j’utilise 7,514
Cours et tutos 6,415
L’encoding en Python, une bonne fois pour toute 5,532
Les environnements virtuels Python : virtualenv et virtualenvwrapper 5,423
Entreprendre en France, Autopsie d’un échec. 5,204
Bitcoin: créer un portefeuille, obtenir des bitcoins et payer 5,138
La fonction anonyme appelée immédiatement en Javascript: (function())() 4,933
Mettre la capote sans casser l’ambiance 4,333
Nos tweets 4,137
Qu’est-ce que Javascript et à quoi ça sert ? 4,073
Soyez relax, faites vous un petit Git stash 3,976
Tiens, je suis toujours sur OSX 3,891
Comment tailler une pipe 3,786
Qu’est-ce qu’on peut faire avec Python ? 3,705
Votre Python aime les pip 3,688
Qu’est-ce que bitcoin ? 3,609

Flattr nous rapporte un peu de pognon mais j’ai pas les stats actuellement (c’est sam qui tiens les bourses…). On s’en est toujours pas servi je crois d’ailleurs.

Cela nous fait quand même à peu près 1 200 000 visites dans l’année. Comprenez que des fois ce petit VPS avec 512MO de RAM que nous louons soit un peu essouflé.

Passez de bonnes fêtes ou ouvrez-vous bien les veines (toujours dans le sens des fibres)

]]>
http://sametmax.com/les-stats-sammax-2013/feed/ 10 8532
Afficher le queryset d’une requête dans les logs SQL sous Django http://sametmax.com/afficher-le-queryset-dune-requete-dans-les-logs-sql-sous-django/ http://sametmax.com/afficher-le-queryset-dune-requete-dans-les-logs-sql-sous-django/#comments Wed, 25 Dec 2013 11:38:12 +0000 http://sametmax.com/?p=8447 C’est Noël, 2 articles rien que pour vous dont un très interressant de Sam.

L’ORM de django pour les bases de données est chouette, agréable à utiliser mais construit des requêtes SQL qu’on ne peut reconnaître lors de l’analyse des logs MYSQL du premier coup d’oeil. Et quand on a des centaines de requêtes par secondes c’est carrément impossible de s’y retrouver.

Ce que je vous propose ici c’est d’afficher le queryset (sa ligne et le fichier qui le contient) qui a permit d’exêcuter la requête SQL que vous voyez défiler dans les logs SQL sous forme de commentaires SQL.

L’application se nomme Django Sql StackTrace. C’est facile à installer et ça peut sauver des heures de debug.

Installation Django Sql StackTrace:

Une bonne PIP comme toujours pour bien commencer.

pip install django-sql-stacktrace

Dans votre fichier settings de django.

INSTALLED_APPS = (
    .........................
    'sqlstacktrace',
    .........................
)

SQL_STACKTRACE = True

La variable SQL_STACKTRACE sert à activer le debug.
Pensez à le désactiver lorsque vous n’en avez pas besoin.

Où se trouve mes super infos de debug ?

D’après la doc vous pouvez executer un watch

watch -n1 mysqladmin -u login -pmot_de_passe processlist --verbose

Chez moi ça n’a rien donné. Mais du côté des logs MySQL la magie a opérée.
Vérifiez tout d’abord que vos logs sont activés dans mysql.

vi /etc/my.cnf
[mysqld]
......
log = /var/logs/mysql.log
......

Comment on teste ça ?

Redemarrez votre serveur web, surfez sur les pages de votre projet et observez les logs MySql. Vous deviez voir quelques chose de similaire:

tail -F /var/logs/mysql.log
		  644 Query	SELECT `auth_user`.`id`, `auth_user`.`password`, `auth_user`.`last_login`, `auth_user`.`is_superuser`, `auth_user`.`username`, `auth_user`.`first_name`, `auth_user`.`last_name`, `auth_user`.`email`, `auth_user`.`is_staff`, `auth_user`.`is_active`, `auth_user`.`date_joined` FROM `auth_user` WHERE `auth_user`.`id` = 65290
/* File "/Users/max/work/mon_projet/apps/mon_apps/views/others.py", line 146, in user_public_page
	user = User.objects.get(pk=user_id)
*/

Observez cette merveille !
Entre /* */ sont les infos générées par django-sql-stacktrace. J’ai nettoyé quelques fichiers pour plus de lisibilité.
Vous avez droit au chemin du fichier de la requête, à la ligne de la requête et à la requête django elle-même.

Une alternative ? J’ai pas envie d’installer d’app.

Pour les grosses feignasses ou si vous voulez juste tester occasionnellement quelques queries vous pouvez utiliser la méthode extra pour ajouter vos propres commentaires.

videos = Video.objects.filter(status='online').extra(where=['1=1 /* ceci apparaitra dans les logs mysql ! */'])

Cependant le WHERE 1=1 peut causer quelques baisses de performances, mais lorsqu’on est en debug en local ça peut servir !

PS: Je rappelle également le formidable outil django-debug-toolbar qui devient vite indispensable.

Alors ? Elle est pas belle la vie ?

]]>
http://sametmax.com/afficher-le-queryset-dune-requete-dans-les-logs-sql-sous-django/feed/ 2 8447
Astuces de recherche http://sametmax.com/astuces-de-recherche/ http://sametmax.com/astuces-de-recherche/#comments Wed, 27 Nov 2013 08:46:13 +0000 http://sametmax.com/?p=8115 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.

]]>
http://sametmax.com/astuces-de-recherche/feed/ 16 8115
Afficher l’IP d’un visiteur – Django vs Nginx http://sametmax.com/afficher-la-vrai-ip-dun-visiteur-django-vs-nginx/ http://sametmax.com/afficher-la-vrai-ip-dun-visiteur-django-vs-nginx/#comments Fri, 25 Oct 2013 03:53:30 +0000 http://sametmax.com/?p=7525 Lorsque l’on veut connaitre son ip on fait souvent appel à des sites du genre: whatismyip.com, mon-ip.com ou on utilise un ifconfig en ssh.
Des fois on a aussi besoin de connaître l’ip d’un visiteur sur son site, 2 petites méthodes pour le faire sous Django et Nginx.

Sous Django:

Dans l’Urlconf

urlpatterns = patterns('',
    # return client IP
    url(r'^my_ip$', get_ip),
)

Créez une vue du nom de get_ip qui sera utilisée par l’urlconf

from django import http
 
def get_ip(request):
    """
        Vue qui retourne l'IP du client
    """
    try:

    	# récupère l'ip du client
        return http.HttpResponse(request.META["REMOTE_ADDR"] )

    except Exception, e:
        return http.HttpResponse('error %s' % e)

Le code ci-dessus peut retourner l’adresse locale (127.0.0.1) dans ce cas il faut tester l’existence de la variable HTTP_X_REAL_IP, certains serveurs web ont besoin d’être configuré.

Sous Nginx:

Dans le fichier de configuration de nginx on écrit une nouvelle location

# return client ip
location /my_ip {
    default_type 'text/plain';
    content_by_lua 'ngx.print(ngx.var.remote_addr)';
}

il suffit de se rendre à l’url http://monsite.com/my_ip pour voir s’afficher son ip. Cependant il faut avoir nginx compilé avec le module Lua ce qui peut être délicat si l’on a jamais compilé d’application.


Conclusion:

Si l’on s’en réfère aux deux exemples ci dessus on serait tenté d’utiliser Nginx car en une seule ligne tout le bazar est réglé.
Le hic c’est qu’il faut que Nginx soit compilé avec le module Lua pour afficher l’ip (sauf si quelqu’un connaît une autre façon d’afficher un message de sortie).
La version Django n’est pas fiable à 100% car suivant comment est configuré votre serveur web il se peut que vous vous retrouviez avec une ip du genre 127.0.0.1.
Il y a aussi la possibilité de parser le résultat des sites web cités en tout début d’article, certains proposent des Api je crois mais vous dépendez d’un autre service (on faisait ça au début) qui peuvent vous lâcher à tout moment (ce qui nous est arrivé).
Personnellement je compile toujours nginx avec Lua et quelques autres modules, ça permet de s’affranchir de plus en plus du backend.

PS: j’ai mis à jour le titre car il laissait sous-entendre autre chose (merci à Sébastien)

]]>
http://sametmax.com/afficher-la-vrai-ip-dun-visiteur-django-vs-nginx/feed/ 11 7525