Je parle une autre langue

Posté le 26 mars 2016 dans Développement

Mais ni le chinois, l’allemand, le tchèque ou l’espagnol. Même pas une langue parlée, du moins pas par les humains.

Il s’agit du Python.

Python

Pourquoi Python

  • Syntaxiquement sexy et léger ;
  • Langage établi et mature, je ne voulais pas utiliser Ruby et consorts (qui de toute façon ne me plaisent pas) ;
  • Simple et intuitif à apprendre ;
  • Puissant et disponible sur tous les OS ;
  • Open source, et la communauté derrière Python est très portée sur la propreté de faire les choses comme il faut, le plus joliment possible ;
  • Il y a des packages (librairies) pour faire, sérieusement, TOUT ce qu’on veut ;
  • Et également car je suis une personne sur Twitter depuis plusieurs années qui publie des tweets / articles toujours intéressants, même si je ne comprenais pas trop le Python à l’époque. Si je l’avais pas suivis, j’aurais jamais eu l’envie de commencer à Pythonner.

Whoa, I know Python

Mon langage de prédilection est le PHP mais au-delà de l’apparence et des fonctionnalités de Python, je pense qu’un développeur ne peut pas se proclamer “bon” s’il ne connaît pas au moins deux langages différents, question de diversité technique et donc de valeur sur le marché du travail. Évidemment je ne prends pas en compte Javascript, SQL, ce genre de langages (et encore moins HTML).

Laissez-moi vous présenter ce que j’ai déjà fait avec Python, pour vous donner une idée de quoi est capable la bête.

Level 0

J’ai commencé il y a plus d’un an. J’ai d’abords lu plusieurs guides sympas, histoire de savoir à quoi j’avais affaire. Bref, de la théorie dans un premier temps. J’ai eu un aperçu de ce qu’il était possible de faire avec Python.

Level 1

Hop, un jour j’installe Python pour Windows (ça m’a prit environ 20 secondes), un petit PyCharm (un IDE pour Python) version gratuite - car le piratage say le mal - et c’est parti.

J’ai commencé à coder, avec uniquement les packages natifs de Python, des petits scripts pour résoudre des challenges sur NewbieContest histoire d’apprendre (j’ai déjà parlé du principe de ces genres de sites ici). J’ai tout de suite été étonné par la facilité de sa syntaxe : ça m’a donné encore plus envie d’utiliser Python.

Jusqu’à présent, j’ai fait quelques scripts, quelques classes, bref : rien de bien méchant, juste des scripts à la con pas forcément propres. Mais bon, à ce qu’il paraît, il n’y a pas de mauvais scripts 🙂

Level 2

J’ai ensuite eu envie de créer quelque chose de “visible” et de fonctionnel, genre une petite application web avec une base de données derrière, un truc plus compliqué quoi. J’ai donc porté un de mes projets en Python, à l’origine codé en PHP, History of Heroes. Il permet d’historiser les stats de vos héros de Diablo III et d’en afficher des graphiques. Tout à fait inutile, on est d’accord.

Le code source de la version Python est dispo ici si ça intéresse éventuellement quelqu’un, et utilise Flask (un micro-framework web), Jinja2 (un moteur de template), SQLAlchemy (un ORM) qui tape dans une petite base de données SQLite et l’API de Battle.net.

Ça m’a pris deux semaines à peine pour convertir mon projet PHP en Python. Mais j’ai eu quelques moments difficiles quand même. Et je ne connaissais pas pip à l’époque, bien que PyCharm gérait tout pour moi magiquement.

Level 3

Après avoir fait des choses kikoulol, j’ai voulu en faire d’autres mais qui servent vraiment à quelque chose, mais pas forcément “visible” comme un site web. J’ai donc enchaîné avec des scripts à lancer en ligne de commande via des CRONs :

Level 3.1

Le premier, Transalerts, vérifie plusieurs fois matin et soir s’il y a un problème au niveau des transports en commun que j’emprunte moi-même ainsi que ma compagne. S’il y a une merde : ça envoie un SMS récapitulatif à l’un et/ou l’autre avant de les emprunter. Pour ce faire j’utilise les APIs de Free Mobile (pour envoyer les SMS), de la SNCF et du Grand Lyon (TCL), et aussi d’un peu d’huile de coude (car ces APIs sont de loin d’être bien documentée).

Level 3.2

Le deuxième se nomme Wink. C’est un petit script qui permet de monitorer périodiquement une grappe de serveurs à l’aide de Glances et de m’envoyer un mail récapitulatif s’il se passe quelque chose (down, gros usage CPU / RAM / espace disque, etc…). J’utilise Envelopes pour envoyer des mails via SMTP. Projet qui ne sert pas à grand chose du coup, vu qu’il existe moult autres solutions qui fonctionnent carrément mieux et 100% faites pour.

Level 3.3

Le troisième, Crues en France, va périodiquement informer via un compte Twitter et une page Facebook des alertes aux crues en France. Évidemment je n’ai pas monté mon réseau de surveillance hydrologique hein : la source de mes données est Vigicrues. J’ai utilisé Twython (client Twitter), Facepy (client Facebook), Feedparser (parseur de flux RSS) et Tinydb (un MongoDB mais en version mini et 100% Python).

Bon j’avoue que là aussi j’ai galéré, mais pas à cause de Python.

Un des présentateurs météo de BFMTV a suivi ce compte pendant une semaine puis s’est barré, certainement parce qu’à l’époque le compte spammait beaucoup avant que j’optimise les tweets envoyés 😀

Level 4

A ce moment je me dis : Python est tellement intuitif et facile d’utilisation que chaque challenge est résolu en peu de temps, ça en devient lassant.

J’ai donc commencé il y a peu deux autres projets persos ambitieux sous forme de vrais logiciels avec une interface utilisateur (GUI) :

Level 4.1

Un client graphique pour Kanboard. Avec WxPython pour l’interface en tandem avec son API JSON-RPC.

Level 4.2

Une bataille navale multi-joueur. Pour l’instant je m’attache uniquement à la logique du jeu en utilisant NumPy (pour manipuler aisément des matrices), je pense utiliser ensuite ZeroMQ pour la partie réseau et à nouveau WxPython pour l’interface.

Bonus level

J’ai déjà pris mes petites habitudes de vieux briscard, comme pour PHP, d’utiliser dans quasiment tous mes projets les mêmes packages :

  • Comment ne pas citer en premier lieu Requests, qui permet de dompter les requêtes HTTP du bout des doigts ;
  • Vient ensuite Arrow, pour manipuler facilement des dates et heures ;
  • envparse ensuite, pour éviter de modifier des paramètres de config dans les fichiers Python et de commiter vos clés secrètes ;
  • Click, un ensemble d’outils pour créer des scripts Python en ligne de commande ;
  • Pillow pour manipuler des images ;
  • et pyinstaller pour créer des fichiers binaires de vos scripts (par exemple, un seul .exe peut contenir tout votre programme et ses dépendances et s’exécute sans rien installer).

Whoa.

Conclusion

Si vous êtes expert dans un langage et que vous souhaitez en apprendre un autre : vous n’aurez aucun mal à vous adapter.

Si vous souhaitez apprendre comment coder depuis zéro : vous n’aurez aucun mal à comprendre. Et il y a IndexError pour vous aider. Mais pas que.