Linux howto’s : plein d’astuces sur Linux
Vous voulez apprendre plein de petites astuces qui vont vous faire gagner énormément de temps sur Linux ?
Cliquez ici : tecmint !
Il y en a un autre excellent ici sur websauvage !
Vous voulez apprendre plein de petites astuces qui vont vous faire gagner énormément de temps sur Linux ?
Cliquez ici : tecmint !
Il y en a un autre excellent ici sur websauvage !
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))
x, y, z = 0, 1, 0
if x == 1 or y == 1 or z == 1:
print('ok')
if 1 in (x, y, z):
print('ok')
# si l'un d'eux n'est pas vide:
if x or y or z:
print('ok')
if any((x, y, z)):
print('ok')
»»» xs = {'a': 4, 'b': 3, 'c': 2, 'd': 1}
»»» sorted(xs.items(), key=lambda x: x[1])
»»» import operator
»»» sorted(xs.items(), key=operator.itemgetter(1))
»»» import timeit
»»» timeit.timeit('"-".join(str(n) for n in range(100))',
number=10000)
0.3412662749997253
»»» timeit.timeit('"-".join([str(n)
for n in range(100)])',
number=10000)
0.2996307989997149
»»» timeit.timeit('"-".join(map(str, range(100)))',
number=10000)
0.24581470699922647
# namedtup1e est une classe : »»» from collections import namedtuple »»» Car = namedtup1e('Car' , 'color mileage') # Our new "Car" class works as expected: »»» my_car = Car('red', 3812.4) »»» my_car.color 'red' »»» my_car.mileage 3812.4 # Une belle représentation repr avec : »»» my_car Car(color='red' , mileage=3812.4) # Comme les tuples, les namedtuples sont immuables : »»» my_car.color = 'blue' AttributeError: "can't set attribute"
is
» vs « ==
» :
»»» a = [1, 2, 3] »»» b = a »»» a is b True »»» a == b True »»» c = list(a) »»» a == c True »»» a is c False
– is
est True
si deux variables pointent vers le même objet ;
– ==
est True
si les variables contenues dans les objets sont identiques.
»»» Code code code
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
—–
—–
https://cloudxlab.com/blog/numpy-pandas-introduction
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
Easy Python logging with daiquiri
The three things you need to know about packaging are:
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
More GitHub workflow automation
Si jamais les permaliens ne fonctionnent pas :
.htaccess
;vhost
;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.
J’avais aspiré un site et je ne voulais garder que les cellules. Donc ce qui commence par « <td »
Voici le code à taper :
:g!/^<td/d
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é :
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é !
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()
.
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 » :
alt
+ F2
et une boite de dialogue va s’ouvrir ;ccsm
puis validez par la touche entrée
;"Délai de pop-up de fenêtre"
, ou en anglais : "Popup Window Delay"
;"Comportement"
ou "Behavior"
;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
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 !
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 !
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 :
Je le télécharge, et voici les fichiers que je trouve dedans :
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 :
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
) !
Si vous avez des suggestions n’hésitez pas !