Mots-clé : astuce

Python : hints & cheats

Son propre fichier basique de log

import datetime
msg = "Test de log"
dt = datetime.datetime.now()
with open("monlogfile.log", 'a+') as f:
    f.write('{:02}:{:02} - {}\n'.format(
        dt.hour, dt.minute, msg))

Teaching Python

Here

Découpages Python : formation

Checkio

Demystifying Two Factor Auth

Two-factor auth

Python Open Source Projects of the Year

Here!

Thanks to Dan Bader

Learning Python in minutes
https://learnxinyminutes.com/docs/python3/

How to Send an Email With Python
https://dbader.org/blog/python-send-email

The Python range() Function
https://realpython.com/courses/python-range-function/

Python sleep(): How to Add Time Delays to Your Code
https://realpython.com/python-sleep/

Cool New Features in Python 3.8
https://realpython.com/python38-new-features/

Python Decorators From the Ground Up
https://pabloariasal.github.io/python-decorators-from-the-ground-up/

How — and why — you should use Python Generators
https://medium.freecodecamp.org/how-and-why-you-should-use-python-generators-f6fb56650888

Download information on all your gmail emails and the body text to either csv or json. I developed this to download my 100K + emails stored over several years on gmail.
https://teklern.blogspot.fr/2017/11/download-all-your-email-information.html

Memoization in Python: How to Cache Function Results
https://dbader.org/blog/python-memoization

Implementing a Neural Network from Scratch in Python – An Introduction
https://www.datasciencecentral.com/profiles/blogs/implementing-a-neural-network-from-scratch-in-python-an

—–

Mailtrap – Sending Emails

—–

Introduction to NumPy and Pandas – A Simple Tutorial

https://cloudxlab.com/blog/numpy-pandas-introduction

Fastest way to uniquify a list in Python >=3.6

https://www.peterbe.com/plog/fastest-way-to-uniquify-a-list-in-python-3.6

8 Python Modules For Files Handling
http://devarea.com/8-python-modules-for-files-handling/

How do async for loops work in Python? Using asynchronous for loops in Python
https://quentin.pradet.me/blog/using-asynchronous-for-loops-in-python.html

How to use Python and Flask to build a web app — an in-depth tutorial
https://medium.freecodecamp.org/how-to-use-python-and-flask-to-build-a-web-app-an-in-depth-tutorial-437dbfe9f1c6

Framework ultra simple pour faire des micro-services en Json
Falcon is a bare-metal Python web API framework for building very fast app backends and microservices.
http://falconframework.org

How to break a CAPTCHA system in 15 minutes with Machine Learning
https://medium.com/@ageitgey/how-to-break-a-captcha-system-in-15-minutes-with-machine-learning-dbebb035a710

Python Exceptions: An Introduction
https://realpython.com/python-exceptions/

Python Metaclasses
https://realpython.com/python-metaclasses/

Building a Simple Web App with Bottle, SQLAlchemy, and the Twitter API
https://realpython.com/blog/python/building-a-simple-web-app-with-bottle-sqlalchemy-twitter-api/

Python – Regular Expressions Practical Guide
http://devarea.com/python-regular-expressions-practical-guide/#.Wki2nN_iZhE

A fast high-level screen scraping and web crawling framework.
https://scrapy.org

A fast high-level screen scraping and web crawling framework.
https://pyfiddle.io/

Python Web scraping
http://scrapingauthority.com/python-scrapy-mysql-and-matplotlib-to-gain-web-data-insights/

Tips for writing extremely short Python programs
Extremely short Python programs (aka « golfing »)

Instagramming with Python for Data Analysis
The guide


Julien Danjou blog

Easy Python logging with daiquiri

The three things you need to know about packaging are:

  • – Use pip to install your packages from PyPI
  • – Use pbr to package your modules
  • – Use PyPI to publish your package

Read more here.

A safe GitHub workflow with Pastamaker
The definitive guide to Python exceptions
How do you write your Python tests?
The unittest module in Python is the natural entry point to start writing test, and it’s really easy to use. It’s not really harder than using assert, and it will provide much nicer output when run. Once you get on that road, there’s a lot of other nice modules you can start using, such pytest, coverage, nose or mock. And if your project is hosted on places such as GitHub, it’s really easy to use services such as Travis to automate tests runs.

A simple filtering syntax tree in Python

Stop merging your pull requests manually

How I stopped merging broken code

How to Log Properly in Python

More GitHub workflow automation

Code Style Checks in Python


WordPress et Permaliens : une solution / hint / astuce

Si jamais les permaliens ne fonctionnent pas :

  • via les fichiers .htaccess ;
  • que vous avez essayé de copier-coller le code qu’il vous a donné dans un fichier vhost ;
  • que vous n’y comprenez rien en règles de réécriture…

Alors essayez de mettre ce qui suit en règle de réécriture dans votre fichier vhost :

# Olivier Pons : règles pour WordPress
# faites "à la main" :
# si index, on stoppe tout :
RewriteRule ^index\.php$ - [QSA,L]
# Tester TOUTES les possibilités
# pour voir si c'est un fichier :
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d  RewriteRule . /index.php [QSA,L]

Dans mon cas leurs règles ne fonctionnaient pas car il ne voyait pas que les fichiers étaient bien là, alors j’ai ajouté la vérification en ajoutant %{DOCUMENT_ROOT}.
Oui je sais ça n’est pas l’idéal, mais comme il est écrit sur l’entrée de Facebook :

Done is better than perfect.

…And I got this thing done. Whatever.

Vim: comment remplacer tous les mots par celui sous le curseur?

Je n’ai pas été bien loin, vous trouverez la version anglaise ici.

:%s/mot/<c-r><c-a>/g

Remplacer chaque occurrence de ‘mot’ avec le mot sous le curseur (le mot est délimité par des espaces ou des retours à la ligne).

<c-r><c-a> signifie qu’il faut appuyer sur Ctrl et R puis sur Ctrl et A.

Le mot sous le curseur sera automatiquement inséré dans la ligne de commande exactement comme il apparaît à l’écran.

Le côté génial, c’est que vous pouvez enregistrer cela dans une macro et il se souviendra du principe !

Exemple concret : j’ai une centaine de partenaires auquels je dois appliquer la même opération SQL. Voilà comment je me suis servi de la fonctionnalité :

  • J’ai mis toute la liste des partenaires dans un fichier, un partenaire par ligne ;
  • J’ai crée une seule fois, pour le partenaire 1, la série de commandes SQL ;
  • Ensuite, j’ai copié collé une centaine de fois cette même série pour tous les partenaires (sous vim: « chiffre+@a » et il joue chiffre fois la macro « a », donc ça ne m’a pris que le temps de taper une dizaine de touches) ;
  • J’ai enregistré la macro suivante, que je vous explique en français : «sélectionne la série de commande courante, monte d’une ligne pour aller sur le nom du partenaire courant, et remplace toutes les occurences de «partenaire1» par le mot sous le curseur.

Ensuite, une fois la macro enregistrée, j’ai tapé « 100@a » = jouer 100 fois la macro « a ».

Et voilà.

Beaucoup de temps de gagné !

Astuce jQuery : accepter un clic une fois, une seule fois, pas de double clic

A lieu de faire

$('#mon_element').on('click', function() {
  mafonction();
} );

c’est pas « on » c’est « one » :

$('#mon_element').one('click', function() {
  mafonction();
} );

En fait une fois qu’on a cliqué sur l’élément en question, jQuery supprime l’évènement avec la fonction unbind().

Ubuntu : alt-tab rapide : howto

D’abord installez compizconfig-settings-manager : le tutoriel est ici :

http://packages.ubuntu.com/search?keywords=compizconfig-settings-manager

Après avoir installé « compizconfig settings manager » :

  1. tapez les touches alt + F2 et une boite de dialogue va s’ouvrir ;
  2. dans cette boîte, tapez ccsm puis validez par la touche entrée ;
  3. de là, cherchez "Délai de pop-up de fenêtre", ou en anglais : "Popup Window Delay" ;
  4. cliquez sur l’onglet "Comportement" ou "Behavior" ;
  5. vous verrez une valeur : modifiez la en y mettant la valeur 0.

Et voilà, la combinaison alt + Tab pour passer d’une application à une autre est devenue instantanée !

Pour information, le tutoriel est ici :

http://askubuntu.com/questions/75250/how-to-make-alt-tab-switch-quickly
http://askubuntu.com/questions/43875/how-do-i-adjust-the-alt-tab-speed

Configuration Apache : « Directory » et directive « Options » : astuce pour comprendre plus vite

J’ai mis un peu de temps avant de le comprendre, mais c’est peut être parce que pour certains esprits comme le mien ça n’est pas forcément évident.

En résumé :

  • Effacer toutes les options et n’activer que FollowSymLinks :

    Options FollowSymLinks
  • Ajouter à toutes les options, l’option FollowSymLinks :

    Options +FollowSymLinks
  • Supprimer, si elle existe, l’option FollowSymLinks :

    Options -FollowSymLinks

Explication détaillée :
Lorsqu’on met en place une directive "Directory" dans le fichier de configuration d’un serveur Web Apache, on peut y ajouter la directive "Options".
Par exemple :

    <Directory "/web/htdocs/prod">
        Options Indexes
    </Directory>

Ce qu’il faut avoir en tête c’est que le fait de mettre un ordre après Options efface toutes les directives Options précédentes et n’applique que les ordres qui suivent.

Par exemple :

    <Directory "/web/htdocs/prod">
        Options FollowSymLinks
    </Directory>

Cela signifie que pour le répertoire "/web/htdocs/prod" il n’y aura que l’option FollowSymLinks d’activée.
A l’inverse si on avait ajouté un +, cela signifie « ajouter à toutes les options déjà existantes, FollowSymLinks.
De même si on avait ajouté un -, cela signifie « supprimer des options (si elle est présente) » FollowSymLinks.
Ça n’est pas du tout la même chose et même si, une fois qu’on l’a en tête, c’est très simple, ça peut paraître déroutant au début.

vim : imap, ab, abbr ne fonctionnent pas ? Solution ici !

Exemple concret : un mapping sous vim c’est ça :
imap ooo Olivier

map signifie : lorsque je taperais ooo tu le transformeras en Olivier.
Le petit i de imap juste avant, signifie « uniquement en mode insertion« .

Pourtant, il peut arriver qu’en mode insertion ça ne fonctionne pas ! Si c’est votre cas, il y a une solution très simple : essayez de vous mettre en mode « nopaste » : essayez de taper l’ordre :

:set nopaste

Puis mettez vous en mode insertion soit « i » et ré-essayez. Ca devrait fonctionner.

Moi, je le fais par défaut (= j’ai ajouté :set nopaste dans mon fichier de configuration ~/.vimrc) au moins je ne suis pas ennuyé.

J’ai posé la question et j’ai eu la réponse sur stackoverflow ici.

L’explication est à peine plus longue. En fait, sous vim, tout ce qu’on tape est analysé. Si on a fait un imap ooo test, alors, lorsqu’on fait un copier-coller, et que dedans il y a ooo, alors vim va automatiquement faire la transformation. Dans presque tous les cas, lorsqu’on fait un copier coller, on ne veut pas que ça soit modifié ! Donc il faut préciser à vim : attention, je vais faire un « coller », alors s’il te plait, désactive tes « mappings ». L’ordre est très simple, il suffit de se mettre en mode paste et donc de donner l’ordre : :set paste. Là où on peut être dérouté, c’est que, justement, par défaut, vim est en mode paste, autrement dit tous les mappings clavier sont désactivés !

C’est une configuration pour les débutants, mais avec ce que je vous ai appris et tous les liens sur vim, vous n’êtes plus un débutant, pas vrai ?
Il vous suffit donc d’ajouter :set nopaste dans votre fichier de configuration ~/.vimrc. Les (rares) fois où vous aurez un copier coller particulier (par exemple avec la souris), il vous suffira de faire un

:set paste

puis juste après le coller, de dire qu’on a fini, et de ré activer les mappings :

:set nopaste

Aussi simple que ça !

vim : insérer nom du fichier courant

Tous mes fichiers php commencent ainsi :

 1 <?php
 2 /**
 3  * fichier decision.php
 4  *
 5  * @author Olivier Pons
 6  * @version 1.0
 7  * @since 1.0
 8  * @copyright Olivier Pons
 9  *
10  * @package Ajax
11  */
12

Comment faire de manière pratique, sous vim, pour s’assurer que la ligne :
* fichier decision.php
contient vraiment le bon nom du fichier.

C’est très simple (comme tout dans vim), mais il suffit de le savoir (comme tout dans vim) :

Je vais détailler pas à pas l’explication de la macro et au final la mettre en entier :

Il faut donner l’ordre en ligne de commande = deux points = « : »
Donc : :
Il faut lui dire de rechercher = pourcent = « % »
Donc : :%
Il faut lui dire que c’est une chaine qu’on recherche = s = « s »
Donc : :%s
Ensuite on précise qu’on a fini l’ordre = slash = « / »
Donc : :%s/
Ensuite on précise le premier paramètre = chaine à rechercher = « fichier  » = « fichier  »
Donc : :%s/fichier
Ensuite on précise que le premier paramètre est une expression régulière qui doit contenir la chaine à rechercher, mais aussi tout ce qui suit = « :%s/fichier \(.*\) »
Donc : :%s/fichier \(.*\)
NB : on est obligé de mettre des antislashes \(.*\) devant les parenthèses pour dire que ce sont des caractères spéciaux qui doivent être interprétés comme des commandes.
Puis premier paramètre = fini = slash = « / »
Donc : :%s/fichier \(.*\)/
Puis le second paramètre = ce qui va être remplacé. Là c’est comme pour les parenthèses juste au dessus : on précise que c’est un « calcul » a effectuer = signe « = » mais comme c’est un caractère à interpréter on est obligé de mettre l’antislash soit \=.
Donc : :%s/fichier \(.*\)/\=
NB : à partir du signe « \=« , vim sait que ce qui suit est un calcul, donc chaque parenthèse sera déjà interprétée comme un ordre, il n’y aura pas besoin de mettre d’antislash pour les caractères spéciaux telles que les parenthèses, et ce sur tout le paramètre en entier.
Ensuite on lui passe le calcul de l’expression que j’ai fait ainsi (à vous de l’adapter pour vous) : renvoyer le nom du fichier = expand('%') =» ici moi j’aurais « ./json_decision.php » ce qui ne me convient pas. Je voulais uniquement le nom du fichier, sans quoi que ce soit derrière. On peut préciser exactement quelle partie du nom on veut : tapez « :help expand » pour avoir toutes les possibilités. Ici, moi, je ne voulais que le nom du fichier sans rien derrière. Donc j’ai juste tapé : expand('%:t')
Puis second paramètre = fini = slash = « / »
Donc : :%s/fichier \(.*\)/\='fichier '.expand('%:t')/
Enfin en troisième paramètre, les options : il n’y en a aucune mais on aurait pu mettre « g » pour dire de faire ça de manière globale, soit :
:%s/fichier \(.*\)/\='fichier '.expand('%:t')/g

Mais comme je ne veux le faire qu’une seule fois, voici ma ligne finale :

:%s/fichier \(.*\)/\='fichier '.expand('%:t')

Donc en pratique : je liste tout un répertoire de fichiers php, que j’ouvre sous vim, et j’y applique une macro qui fait :
– rechercher/remplacer que je viens d’expliquer ;
– sauvegarde du fichier et on passe au suivant (« wn« ).

Ainsi, j’ai passé tous mes fichiers et tout a fonctionné comme sur des roulettes : je suis sûr que dans tout mon code, dans le commentaire de début, le nom du fichier est en adéquation avec le vrai nom !

Si vous avez des suggestions ou commentaires n’hésitez pas !

vim howto : comment installer un plugin

J’ai vu cet exceptionnel exemple de plugin ici.
Petite parenthèse : regardez d’ailleurs le site vimcasts.org, c’est vraiment un site exceptionnel pour tous ceux qui veulent apprendre des astuces géniales de vim.

Donc, comment installer un plugin ? Moi, habitué de Windows © je me suis dit « ça doit être très compliqué, je vais chercher sur la toile ».
Mais… c’est tellement simple que j’avais beau chercher partout, je n’ai pas trouvé de réponse !
Voilà en pratique comment j’ai fait.
Le plugin génial que j’ai vu ici, se trouve là : https://github.com/godlygeek/tabular

Je vais donc à cette adresse :
Page Internet du plugin Tabularize

Je le télécharge, et voici les fichiers que je trouve dedans :
Fichiers dans le plugin Tabularize

Je me dis « bon sang comment l’installer dans vim ? ».
En pratique, rien de plus simple. Très souvent, dans votre répertoire « home » (auquel vous accédez en tapant le tilde en ligne de commande : ~), concernant vim, il y a un dossier caché qui commence par un point : « .vim » (n’oubliez pas le point au début).
Allez dans ce dossier et regardez s’il y a un sous-dossier plugin. S’il n’y en a pas, créez le. Moi qui suis sous Windows, et qui m’en éloigne de plus en plus jour après jour, j’ai installé cygwin et mon « home » est dans C:\cygwin\home\Olivier. Voilà ce que ça donne après avoir crée le bon dossier :
Fichiers dans le plugin Tabularize
Ensuite il vous suffit de copier simplement les dossiers du plugin dans le répertoire « ~/.vim/plugin » et… tout fonctionne (dans mon cas c’est donc C:\cygwin\home\Olivier\.vim\plugin) !
Copier les fichiers du plugin Tabularize dans le répertoire plugin de vim

Si vous avez des suggestions n’hésitez pas !