Catégorie : développement – divers

From Django/Python to NodeJS. Une année après : from NodeJS to Django/Python

Tiens, un blog d’un geek qui explique pourquoi il est passé de python à NodeJS.

Why I’m switching from Python to NodeJS

Ah j’oubliais le plus important : un an après avoir utilisé nodejs en production :

After a year of nodejs in production: back to Python

Au moins ça vient d’un développeur talentueux qui a bossé jour et nuit sur du NodeJS pendant toute une année et il sait bien de quoi il parle.

Spoiler :

  • Easy to learn, impossible to master
  • Good luck handling errors: You’ll need to double your client invoices to makeup for debug time
  • Would I recommend it for large-scale products? Absolutely not.

Traduction de ce qui importe le plus : votre client devra payer le double pour le même projet : développement + autant de temps pour déboguer.

Je vous laisse faire votre propre expérience, moi j’ai la mienne qui se rapproche assez de ces billets de blog.

Varnish 4.x : comment faire un redirect

Après avoir passé plusieurs heures sans aucune réponse satisfaisante, j’ai enfin trouvé la solution du redirect.
Varnish n’a pas la possibilité de faire un redirect « simplement », il faut normalement laisser cela au « backend », c’est à dire au serveur derrière (Apache ou autre).
Mais moi je ne voulais pas. C’est mon droit non ?
Voici comment faire un redirect qui fonctionne :

sub vcl_recv {
    # Rediriger tous les ".fr" vers ".com"
    if (
        (req.http.host ~ "(.*)monsite\.fr$")
    ) {
        # ! error = envoyer vers la sous-routine "vcl_error"
        set req.http.x-redir = "http://www.bb.com" + req.url;
        return(synth(850, "Moved permanently"));
    }
}

L’astuce principale était : utiliser vcl_synth

D’après le code, je vous résume ce que j’ai compris : si jamais on a un status 850 qui semble être un ordre particulier, alors automatiquement changer les headers en y appliquant la redirection, et les renvoyer directement le résultat.
Donc, après la routine vcl_recv il vous suffit d’ajouter vcl_synth comme ceci :

sub vcl_synth {
    if (resp.status == 850) {
        set resp.http.Location = req.http.x-redir;
        set resp.status = 302;
        return (deliver);
    }
}

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)…

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

vim – astuces / cheatsheet

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

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 ?

Une vulnérabilité critique affectant Windows Server 2003 ne sera pas corrigée

C’est bien, je vais enfin avoir l’argument massue pour tous ceux qui critiquent Linux : une faille critique sur Windows Server 2003 qui permet de devenir maître du système à distance ne sera jamais corrigée.

Je vous rappelle qu’on paie pour une license, et que la sécurité fait partie des choses pour lesquelles on paie (on paie en partie pour les mises à jour et ces dernières corrigent les bogues et problèmes de sécurité).

Il suffira donc juste d’avoir le programme qui permet d’exploiter cette faille et si on veut être méchant, on le pourra !

Tout est expliqué ici : sur developpez.com

6 – Ma configuration du clavier

Je vais expliquer comment j’ai configuré mon clavier.
Tout d’abord voici les…

Idées sur lesquelles je suis parti :

  • Je ne veux pas réapprendre toutes les touches, je n’ai pas que ça à faire. ;
  • Je veux que toutes les touches difficiles d’accès deviennent faciles d’accès ;
  • Je veux bouger le moins possible mes doigts ;
  • Je veux pouvoir développer et accéder au moins aussi rapidement qu’avant aux touches spéciales pour les développeurs ;

Donc voici ce que j’ai mis en place. Avant de le montrer…

Ma façon de raisonner :

  • Clavier en mode normal : toutes les touches accessibles comme un clavier AZERTY. Très facile. ;
  • Touches développeur à gauche : le clavier français est tout simplement le clavier le moins bien pensé pour les développeurs. Autant le clavier QWERTY donne la possibilité d’accéder facilement aux accolades, crochets et autres pipes, slash et antislashes, autant le clavier français est un calvaire : c’est pourquoi j’ai pensé à mettre toutes ces touches faciles d’accès ;
  • De la même façon, les touches de déplacement. Quand on y réfléchit bien, les touches fléchées sont bien, mais elles ne sont pas disposées logiquement : c’est juste une habitude qu’on a pris, ça ne signifie pas que c’est le plus pratique. Exemple simple : quand on va à gauche, c’est la flèche gauche. En réfléchissant un peu, si on veut aller beaucoup plus à gauche, il faudrait, logiquement avoir une touche supplémentaire à gauche, et pas une touche totalement dégroupée au dessus comme c’est le cas sur tous les claviers classiques. Donc sur ma configuration, lorsqu’on accède aux touches de déplacement, j’ai, à gauche de la « flèche gauche », la touche « home », et pas au dessus. C’est juste un repère spatial très simple, et ça fonctionne à merveille !
  • Ensuite il me fallait le pavé numérique. J’ai donc crée une couche pour le pavé numérique. Comme c’est toujours avec la main droite qu’on accède au pavé numérique, je l’ai laissé à droite. Le côté gauche, lui, est réservé aux lettres accentuées. ;
  • Enfin, j’ai dû gérer les touches de fonction : comme il n’y avait plus de place pour les disposer de manière logique j’ai fait une dernière couche « fonctions ». Sur cette couche, il me restait beaucoup de touches disponibles. J’ai donc utilisé une des possibilités géniales du clavier : les macros. On peut jouer une suite de touches en n’appuyant que sur une seule lettre. Génial. Avec un petit bémol que je dis à la fin de cette page. Par exemple, pour écrire l’espace insécable, qui est &nbsp; j’appuie sur une touche « FN » (fonction) et la lettre « e » et hop il me fait tout. Vous pourriez tout à fait dire « oui mais on peut tout à fait faire ça sur l’éditeur : on configure un raccourci clavier. Ce à quoi je répondrai : oui mais tu ne peux pas prendre ta configuration et faire du plug n play n’importe où, alors que mon Ergodox, je le prends et je le branche sur n’importe quel PC, ça fonctionnera ! 🙂
  • Pour terminer, je ne vais pas entrer dans le détail, mais j’ai retravaillé le code du développeur qui a fait le portage d’un programme qui gère les claviers USB entièrement configurables. Avec ma « grosse » retouche – mais qui n’est que dans le clavier français, ainsi pas de souci, on peut avoir tout de suite une vision très claire et simple des touches qui seront affichées, et juste en dessous, de la touche réelle envoyée en USB. C’est très pratique, surtout si jamais vous voulez modifier votre configuration clavier, tout fonctionnera du premier coup et facilement. Le code d’origine était fonctionnel, mais dur à lire. Là, c’est sympa et c’est un jeu d’enfant. Il vous suffit juste de trouver la correspondance avec la bonne touche : par exemple, si vous voulez envoyer le « a », vous allez dans ma table de correspondance (page Ergodox AZERTY configuration juste un peu au dessus de celle en cours) et vous chercher où est le « a » dans la colonne de droite. Vous verrez qu’il faut envoyer la lettre « Q » et vous modifiez la touche que vous voulez, et tout fonctionnera.

Donc voici les images de…

chaque « couche » clavier :

…même s’ils elles ne sont pas très lisibles, cliquez dessus pour avoir la version plus grande :

Couche 0

AZERTY normal :

,--------------------------------------------------.           ,--------------------------------------------------.
|    Esc |  & 1 |  é 2 |  " 3 |  ' 4 |  ( 5 |  ^L3 |           | Pscr |  - 6 |  è 7 |  _ 8 |  ç 9 |  à 0 |  Bspc  |
|--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
|   Tab  |  a A |  z Z |  e E |  r R |  t T | Bspc |           |  ~L1 |  y Y |  u U |  i I |  o O |  p P |   ^ ¨  |
|--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
|    .   |  q Q |  s S |  d D |  f F |  g G |------|           |------|  h H |  j J |  k K |  l L |  m M |  Enter |
|--------+------+------+------+------+------|  Ent |           |  Ins |------+------+------+------+------+--------|
|  Lsft  |  w W |  x X |  c C |  v V |  b B |      |           |      |  n N |  , ? |  ; . |  : / |  ! § |  Rsft  |
`--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
  | LCtl | LGui | LAlt | Lsft |  Del |                                       |  Spc |  Spc | RAlt | RGui | RCtl |
  `----------------------------------'                                       `----------------------------------'
                                       ,-------------.       ,-------------.
                                       | Copy | Pste |       | Nbsp |   F8 |
                                ,------|------|------|       |------+------+------.
                                |      |      | Cut  |       |   <> |      |      |
                                |  ~L1 |  ~L2 |------|       |------|  ~L2 |  ~L1 |
                                |      |      |  Del |       |  </> |      |      |
                                `--------------------'       `--------------------'

Couche 1

Caractères pour le développement à gauche, mouvements du curseur et copier coller à droite :

,--------------------------------------------------.           ,--------------------------------------------------.
|   Esc  |   F1 |   F2 |   F3 |   F4 |   F5 |   F6 |           |   F7 |   F8 |   F9 |  F10 |  F11 |  F12 |  Bspc  |
|--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
|   Tab  |   \  |   <  |   _  |   >  |   |  |   $  |           |  Cut | Copy | Ct-← |   ↑  | Ct-→ | Pste |   ^ ¨  |
|--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
|     -  |   {  |   (  |   /  |   )  |   }  |------|           |------| Home |   ←  |   ↓  |   →  |  End |  Enter |
|--------+------+------+------+------+------|   =  |           |  -   |------+------+------+------+------+--------|
|  Lsft  |   #  |   [  |   *  |   ]  |   @  |      |           |      |   -  | PgUp |  Ins | PgDn | PEnt |  Rsft  |
`--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
  | LCtl | LGui | LAlt |   ~  | Lsft |                                       |   0  |   .  | RAlt | RGui | RCtl |
  `----------------------------------'                                       `----------------------------------'
                                       ,-------------.       ,-------------.
                                       |   -  |   -  |       |   -  |    - |
                                ,------|------|------|       |------+------+------.
                                |      |      |   -  |       |   -  |      |      |
                                |   -  |   -  |------|       |------|   -  |   -  |
                                |      |      |   -  |       |   -  |      |      |
                                `--------------------'       `--------------------'

Couche 2

Les touches accentuées à gauche, pavé numérique à droite :

,--------------------------------------------------.           ,--------------------------------------------------.
|    Esc |   -  |   -  |   -  |   -  |   -  |   -  |           |   -  |   -  | NLCK |   /  |   *  |   -  |  Bspc  |
|--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
|   Tab  |   -  |   ô  |   â  |   à  |   -  |   -  |           |   -  |   -  |   7  |   8  |   9  |   +  |   ^ ¨  |
|--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
|     -  |   ë  |   é  |   -  |   è  |   -  |------|           |------|   -  |   4  |   5  |   6  |   +  |  PEnt  |
|--------+------+------+------+------+------|   -  |           |   %  |------+------+------+------+------+--------|
|  Lsft  |   -  |   -  |   û  |   ù  |   -  |      |           |      |   -  |   1  |   2  |   3  | PEnt |  Rsft  |
`--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
  | LCtl | LGui | LAlt |  Spc | Lsft |                                       |   0  |   .  | RAlt | RGui | RCtl |
  `----------------------------------'                                       `----------------------------------'

Couche 3

Trois macros à gauche, et les touches de fonction sur tout le clavier :

,--------------------------------------------------.           ,--------------------------------------------------.
|   Esc  |   F1 |   F2 |   F3 |   F4 |   F5 |   F6 |           |   F7 |   F8 |   F9 |  F10 |  F11 |  F12 |  Bspc  |
|--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
|    -   |   -  |   <> |   -  |  </> |   -  |   -  |           |   -  |   -  |   -  |   -  |   -  |   -  |    -   |
|--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
|    -   |   -  |   -  |   -  | Nbsp |   -  |------|           |------|   -  |   -  |   -  |   -  |   -  |    -   |
|--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
|    -   |   -  |   -  |   -  |   -  |   -  |   -  |           |   -  |   -  |   -  |   -  |   -  |   -  |    -   |
`--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
  |   -  |   -  |   -  |   -  |   -  |                                       |   -  |   -  |   -  |   -  |   -  |
  `----------------------------------'                                       `----------------------------------'
                                       ,-------------.       ,-------------.
                                       | +L2  | Home |       | PgUp | Del  |
                                ,------|------|------|       |------+------+------.
                                |      |      |  End |       | PgDn |      |      |
                                | BkSp |  ESC |------|       |------| Enter| Space|
                                |      |      |  Spc |       | Ins  |      |      |
                                `--------------------'       `--------------------'

Couche 4

Pour jouer à Trackmania : touches pour accélérer, droite et gauche, et toutes les autres touches sont annulées :

,--------------------------------------------------.           ,--------------------------------------------------.
|    -   |   -  |   -  |   -  |   -  |   -  |  -L4 |           |  -L4 |   -  |   -  |   -  |   -  |   -  |    -   |
|--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
|    -   | Bspc |  z Z |  Del |   -  |   -  |   -  |           |   -  |   -  | Bspc |   ↑  |  Del |   -  |    -   |
|--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
|    -   |  q Q |  s S |  d D |   -  |   -  |------|           |------|   -  |   ←  |   ↓  |   →  |   -  |    -   |
|--------+------+------+------+------+------|   -  |           |   -  |------+------+------+------+------+--------|
|    -   |   -  |   -  |   -  |   -  |   -  |      |           |      |   -  |   -  |   -  |   -  |   -  |    -   |
`--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
  |   -  |   -  |   -  |    - |   -  |                                       |   -  |    - |   -  |   -  |   -  |
  `----------------------------------'                                       `----------------------------------'
                                       ,-------------.       ,-------------.
                                       |   -  |   -  |       |   -  |   -  |
                                ,------|------|------|       |------+------+------.
                                |      |      |   -  |       |   -  |      |      |
                                |   -  |   -  |------|       |------|   -  |   -  |
                                |      |      |   -  |       |   -  |      |      |
                                `--------------------'       `--------------------'

La version informatique des écrans précédents :

Configuration clavier code au complet