Catégorie : développement

Tout ce qui concerne le développement en général, que ce soit des choses générales, ou des choses bien précises. Cela va de la gestion de projet à la recherche du fonctionnement de pointeurs en C.

github : mémo pour les pressés

Voici un mémo de mon expérience très rapide de github, qui n’est destiné à l’origine qu’à moi, mais que je partage pour ceux qui voudraient aller vite :

  • Forker un repo : c’est à dire, faire « sa » propre branche d’un source pour pouvoir travailler dessus.
    Sur github : en haut à droite du « repo » principal, vous avec le menu « fork ». Cliquez dessus et c’est fini !
    Details »» ici ««
  • Copier en local
    De l’étape précédente, vous aurez une adresse genre
    https://github.com/VOTRE-USERNAME/repo-qui-vous-plait
    Faites :
    git clone https://github.com/VOTRE-USERNAME/repo-qui-vous-plait
    et git fera un copier coller en local des sources github
  • Ajouter le repo d’origine pour les futures synchronisations :
    Copier coller l’URL du repo d’origine qui est sur github :
    git remote add upstream https://github.com/repo-qui-vous-plait
  • Assurez-vous que tout est ok :
    Avec ce code :
    git remote -v
    Vous devriez avoir :
    origin https://github.com/VOTRE-USERNAME/repo-qui-vous-plait.git (fetch)
    origin https://github.com/VOTRE-USERNAME/repo-qui-vous-plait.git (push)
    upstream https://github.com/POSSESSEUR-DU-REPO/repo-qui-vous-plait.git (fetch)
    upstream https://github.com/POSSESSEUR-DU-REPO/repo-qui-vous-plait.git (push)
  • Ensuite ces étapes en boucle :
    • Repo origine distant vers local :
      Ce qui a été fait par les autres sur le repo général (s’il y en a) vers local.
      git fetch upstream
    • Repo perso distant vers local :
      Ce qui a été fait par les autres sur votre repo (s’il y en a) vers local.
      git checkout master
      puis
      git merge upstream/master
      Details »» ici ««
    • Noter vos modifications en local :
      Préciser à git de chercher (1) toutes vos modifications, option « a » (2) le commentaire, option « m ».
      git commit -am "Mon commentaire"
    • Appliquer vos modifications à distance :
      git push
      Details pas de github, mais en français et très bien faits :
      »» ici ««

La tendance python : vivement que la France rattrape l’international !

J’ai eu une discussion avec des fans de Symfony il y a quelques temps. Ils me soutenaient (avec une prétention qui m’a surpris) que Php était de très loin le langage le plus recherché actuellement. Ils se trompaient lourdement. Dire que Php est le langage le plus utilisé, oui. Dire qu’il est le plus demandé, et qu’il le restera, non.

Python est l’avenir

Aucune discussion possible.

Python c’est tout. End of story

Voici le mail que j’ai envoyé récemment à plusieurs de mes clients, et, qui explique la tendance python :

En tapant « most popular development languages » sur google, on voit que :

Enfin je l’ai appris ce matin de la part d’un professeur : deux universités de France retirent Php pour le remplacer par Python cette année (si vous êtes intéressé je vous dirais lesquelles, je n’ai plus en tête les villes de ces universités).

J’imagine les gens de mauvaise foi qui vont aller chercher sur le Web et sortir les deux ou trois sites qui mettent Php devant Python… oui vous allez en trouver, mais en proportion, la plupart des sites expliquent que la tendance d’aujourd’hui c’est Python et JavaScript. Quant à ce dernier, moi qui ai fait quelques sites en NodeJS, je confirme que c’est l’âge de pierre aussi bien côté serveur Web que côté langage JavaScript lui-même… peut être qu’enfin à sa version 6, il fera du scoping normal (lisez ici) déjà rien que ça c’est moisi, sans parler des principes des closures qui empêchent carrément de faire de grosses applications qu’on peut facilement maintenir… là aussi, je ne pourrai jamais convaincre des gens qui ont principalement fait du JavaScript sans avoir essayé aussi intensivement d’autres langages (on ne peut pas comparer dans ce cadre, et toute discussion devient alors impossible)…

PyCharm et Django : comment faire une requête directe

Si, comme moi, vous voulez faire des requêtes directement et voir toutes les tables, pour les modifier manuellement, rien de plus simple, il faut juste chercher sur le Web pendant pas mal de temps. Voici la solution pour économiser de précieuses minutes :

  • Lancer la console python (Tools » Python console)
  • Taper :

    from django.db import connection
    cursor = connection.cursor()
    cursor.execute("PRAGMA table_info(langue)")
    for c in cursor.fetchall():
        print(c)
  • Et vous obtiendrez un résultat qui pourrait ressembler à :
    (0, 'id', 'integer', 1, None, 1)
    (1, 'date_creation', 'datetime', 1, None, 0)
    (2, 'date_last_modif', 'datetime', 1, None, 0)
    (3, 'date_v_debut', 'datetime', 1, None, 0)
    (4, 'date_v_fin', 'datetime', 0, None, 0)
    (5, 'nom', 'varchar(50)', 1, None, 0)
    (6, 'locale', 'varchar(2)', 1, None, 0)
    (7, 'bidirectionnel', 'bool', 1, None, 0)
    (8, 'nom_local', 'varchar(50)', 1, None, 0)
    (9, 'active', 'bool', 1, None, 0)
  • Si vous voulez plus de détail, et que la console a des problèmes avec les accents, voici un code qui remplace les accents par un point d’interrogation :
  • Taper :

    from django.db import connection
    cursor = connection.cursor()
    cursor.execute("SELECT * FROM langue")
    for c in cursor.fetchall():
        for d in c:
            if type(d) is str:
                print(d.encode(
                    sys.stdout.encoding,
                    errors='replace'))
            else:
                print(d)
  • Et vous obtiendrez un résultat qui pourrait ressembler à :
    None
    b'Russian'
    b'ru'
    False
    b'???????'
    False

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']

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

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 !

vim – astuces

Vim

Séparation par fenêtres

:split Split horizontal
:vsplit Split vertical
:res XX Hauteur fenêtre = XX lignes
:vertical resize XX Largeur fenêtre courante = XX caractères
:30winc > Vertical : 30 caractères à droite
:30winc < Vertical : 30 caractères à gauche
:30winc + Horizontal : 30 caractères à droite
:30winc - Horizontal : 30 caractères à gauche
30[CTRL]W > Décaler de 30 caractères à droite
30[CTRL]W < Décaler de 30 caractères à gauche

Macros

:%s/\%(^ *\)\@<= /\&nbsp;/g Remplacer tous les espaces de début par &nbsp;

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 ?