Le rhinocéros est un gros ongulé

Petites citations qui m’ont amusées, sorties du livre Bestiaire pour les jours de cafard :

  • Le maki est un animal plutôt résistant.
  • Les éléphants distinguent deux sortes d’hommes : ceux qui les protègent et ceux qui prennent leurs défenses.
  • CQFD – ou la pieuvre par huit
  • Certes, le rhinocéros est un gros ongulé ; mais qui oserait le lui dire en face ?

vim : enregistrer puis rejouer une macro en ligne de commande

Vim : enregistrer une macro est très simple :

  • q[lettre] débute l’enregitrement de la macro [lettre]
  • q termine l’enregistrement
  • "[lettre]P fait un paste de l’enregistrement dans le fichier en cours d’édition

Donc moi en pratique :

  • J’ouvre le fichier sur lequel je veux faire une macro
  • qa débute l’enregitrement de la macro a
  • je fais ma macro
  • q termine l’enregistrement de la macro a
  • tabe pour ouvrir un nouvel onglet
  • "aP pour faire un paste de la macro a
  • :w mymacro.vim pour sauver ma macro dans le fichier mymacro.vim
  • je quitte tout
  • je peux lancer sur tous les fichiers concerné ma macro via :
    vim -s mymacro.vim [fichier]

Mémo pour l’expression régulière
« remplacer tout y compris s’il y a des lignes au milieu »

http://vimregex.com/#Non-Greedy

  • Effacer tout ce qu’il y a entre <?xml et </head> :
    :%s/<?xml \_.\{-\}<\/head>\n//g
  • Effacer tout ce qu’il y a entre </body et <body> :
    :%s/<\/body\_.\{-\}<body\_.\{-\}>\n//g

Django et authomatic : comment s’enregistrer en un click

Les étapes à faire

Installer :

  • Python 2.7 maximum car google ne fournit des sources Python que pour la 2.7
  • Django (version en cours = 1.8)
  • Et puis ce qui n’est pas précisé avec authomatic :
    • Installer defusedxml
    • Installer google app engine (faut le chercher sur le site de google)
    • Installer Python openid
  • Installer enfin authomatic

Personnellement j’ai crée un dossier que j’ai appelé third_party.
Ce qui fait que mon arborescence est comme cela :

.
├── locale
│   ├── en
│   ├── fr
│   └── sv
├── produits
│   ├── migrations
│   └── templatetags
├── pyweb
├── static
│   ├── css
│   ├── fonts
│   ├── images
│   ├── js
│   └── produits
├── templates
│   └── produits
└── third_party
   ├── authomatic_0_1_0
   ├── defusedxml-0.4.1
   ├── google_appengine_1_9_25
   └── python-openid_2_2_5

Enfin, les associations dans authomatic :

Dans Facebook il faudra aller dans le coin des développeurs, et créer une application jusqu’à arriver à un écran comme celui-ci :
Informations facebook

Même chose pour gmail :
Informations gmail

Et enfin la relation dans le code :
Code dans authomatic

Pour terminer : Facebook ne renvoyait pas les emails, lorsqu’on s’authentifiait.
C’est un bogue connu depuis que Facebook a modifié son API très récemment.
La solution est ici : editez votre fichier \authomatic\providers\oauth2.py.

Allez à la classe Facebook.
Copiez-collez ce code, qui ne change presque rien (je vous laisse chercher) sauf l’URL user_info_url qui a été modifiée pour la v2.4 : et voilà, il ne vous reste plus qu’à suivre le tutoriel de authomatic avec Django, qui est assez bien fait, et tout devrait fonctionner !

class Facebook(OAuth2):
    """
    Facebook |oauth2| provider.
    
    * Dashboard: https://developers.facebook.com/apps
    * Docs: http://developers.facebook.com/docs/howtos/login/server-side-login/
    * API reference: http://developers.facebook.com/docs/reference/api/
    * API explorer: http://developers.facebook.com/tools/explorer

    Supported :class:`.User` properties:

    * city
    * country
    * email
    * first_name
    * gender
    * id
    * last_name
    * link
    * locale
    * location
    * name
    * picture
    * timezone
    * username

    Unsupported :class:`.User` properties:

    * birth_date
    * nickname
    * phone
    * postal_code

    """
    user_authorization_url = 'https://www.facebook.com/dialog/oauth'
    access_token_url = 'https://graph.facebook.com/oauth/access_token'
    # Correction merci à miohtama :
    # https://github.com/peterhudec/authomatic/issues/112
    user_info_url = 'https://graph.facebook.com/me?fields=' \
                    'id,email,name,first_name,last_name,address,gender,' \
                    'hometown,link,timezone,verified,website,locale,languages'
    user_info_scope = ['email', 'user_about_me', 'user_birthday',
                       'user_location']

La fable du rameur et des barreurs

Pour ceux qui ne la connaissent pas, voici une petite fable tirée d’ici.

Une firme japonaise et une société française décident de faire une course d’aviron. Les deux équipes s’entraînent dur. Les japonais gagnent avec plus d’un kilomètre d’avance. Les Français sont très affectés.

Leur management se réunit pour chercher la cause de l’échec. Une équipe d’audit constituée de seniors managers est désignée. Après enquête, ils concluent que l’équipe japonaise est constituée de huit rameurs pour un barreur, alors que l’équipe française a huit barreurs pour un rameur.

A la lecture de l’audit, le management décide de louer les services de consultants. Après avoir perçu d’énormes honoraires, ils rendent leur avis : l’équipe française doit avoir plus de rameurs et moins de barreurs. La structure de l’équipe française est donc réorganisée. Mais, comme personne ne veut devenir rameur, il est décidé de créer quatre postes de barreurs superviseurs, trois de barreurs super-intendants et un de barreur super-intendant assistant manager.

Les Français mettent aussi en oeuvre un système de stimulation pour encourager le seul rameur de l’équipe a travailler plus. Baptisé, « La qualité et le zéro défaut ».

Il repose sur des réunions, des dîners et une prime sur objectif pour le rameur. La course a lieu, et cette fois, les japonais gagnent avec 2 kilomètres d’avance.

Humiliée, la direction française licencie le rameur, stoppe la mise en chantier d’un nouvel aviron, vend le bateau et annule tout investissement.

Puis elle récompense les barreurs managers de leurs efforts en leur donnant le prix de la Performance.

Enfin, elle distribue l’argent économise par ces mesures de restriction a tous les directeurs seniors.

Sublime text : mémo configuration

Ajouter des gouttières visibles à 80 et 120 caractères

  • Préférences »» Settings-user
  • Changer : "rulers": [80, 120]

Changer la configuration des couleurs

  • Installer Package Control
  • Ouvrir la palette de commandes (Shift Ctrl P)
  • Installer Package Resource Viewer en tapant Package Control: Install Package
  • Ouvrir la palette de commandes (Shift Ctrl P)
  • Taper PackageResourceViewer: Extract Package
  • Cliquer Theme - Default
  • Il va copier/coller les fichier de configuration dans le répertoire utilisateur, et vous pourrez les modifier à votre guise
  • Et l’étape qui manque à tout le monde : le répertoire utilisateur ! Il était pour moi : C:\Users\Olivier\AppData\Roaming\Sublime Text 3\Packages

La loi sur le renseignement validée par le Conseil constitutionnel

Pour ce qui suit, vous pourrez trouver l’article ici :

Jeudi 23 juillet 2015, le Conseil constitutionnel a jugé conforme la loi qui ouvre la France à une surveillance de masse de ses citoyens.

L’excuse invoquée est : « renforcer la lutte contre le terrorisme ».

Comment peut-on avoir plus de dix huit ans et croire encore que nos politiciens actuels essaient vraiment de faire de la lutte contre le terrorisme ?
Réponse : c’est impossible.

Conclusion implicite : tous ceux qui sont « pour » cette loi, qui permet une surveillance de masse de ses citoyens, sont simplement pour la politique actuelle.

Personnellement, tant que la transparence sur les salaires, et toutes les primes, ainsi que tous les avantages de toutes les personnes au pouvoir ne seront pas mis à disposition sur Internet, comme c’est par exemple le cas en Suède, je serai contre toute politique, dont la fin est inévitablement d’avoir le pouvoir afin de faire ce que l’on veut, et non pas afin de servir les citoyens.

Actuellement, cette loi n’a qu’un seul effet : laisser la possibilité à notre gouvernement de censurer ce qu’il veut sous prétexte de « terrorisme ».

D’autres personnes, très compétentes en informatiques, râlent bien plus :

Ce que vous achetez, qui vous sautez, ce que vous aimez, votre état de santé, la stratégie de votre société, les gens avec qui vous tissez des contacts…bref tous vos petits secrets, y compris les plus moches seront enregistrés et catalogués, pour vous être ressorti à n’importe quel moment, y compris dans plusieurs années.

Python : cygwin turtle howto

Avec l’installeur Cygwin :

  • installer Python3
  • installer xinit

A partir de là, voici la solution résumée de plusieurs heures de recherche :
Il vous faut préciser l’affichage, qui est chez moi le 0.0 :

export DISPLAY=:0.0

Mettez le code précédent dans votre configuration de démarrage (.bashrc)

Enfin, sur la console, l’astuce qui change tout : il faut lancer xterm.

Et là, un nouveau terminal s’ouvrira, mais qui discute avec le serveurx, et tout fonctionnera.
Pour tester, j’ai simplement lancé python3 et turtle :

  • python3
  • import turtle
  • turtle.Screen()

Et hop l’écran sur lequel on bougera la tortue pour dessiner s’affiche, c’est magique :

Image cygwin python

En espérant vous faire gagner quelques heures de recherche !

Google Nexus 7 : mode développeur

Je recherchais comment activer le mode « développeur » sur ma tablette Nexus 7.
Android 5.1.

Réponse trouvée ici.

  • Aller dans le menu « Paramètres »
  • Aller dans le menu « A propos »

Et là… surprise : ce qui suit mérite de se mettre en titre 1 :

Il faut taper sept fois sur « Numéro de build » pour activer le mode développeur.

Euh ce n’est pas tout : ce qui suit mérite de se mettre en titre 1 aussi :

Il faut activer le mode « Appareil photo » (PTP) pour pouvoir déployer son application en mode débug.

Conclusion qui mérite elle aussi d’être mise en évidence :

WTF ?

Google mail contacts : l’ancien était mieux, comment le remettre.

Si vous êtes comme moi et que vous trouvez que la nouvelle interface de gmail contacts est d’une stupidité qui n’a pas de limites (impossible de mettre un deuxième prénom, impossible d’associer facilement plusieurs sociétés, libellés incompréhensibles, temps de réponses affligeants, recherche sur les contacts pas du tout pertinente, et j’en passe), voici le lien, vers l’ancienne interface qui fonctionne toujours parfaitement :

https://www.google.com/contacts/u/0/?cplus=0#contacts