À la une de SQLPAC en 2020

MathJax - Tex : guide pratique, aide-mémoire

mathjaxPlus efficace qu’un long tutoriel, des exemples d’équations MathJax / Tex mettant en œuvre les situations les plus courantes.
  • Matrices
  • Fractions
  • Fonctions par morceaux
  • Tableaux
  • Centrer des équations sur le signe =
  • Numéroter des équations, appliquer des signets
  • Styles
  • Et plus à venir au fil du temps…

MathJax - Tex : guide pratique, aide-mémoire

Utiliser les variables CSS pour changer un style de page sans rechargement

cssLors de la conception d’un site, éviter les rechargements des pages pour mettre à jour des données ou des styles est souvent un prérequis. Les variables CSS sont très utiles pour changer un style de page sans recharger la page. Pour développer un bouton bascule (toggle) qui permet de passer du style "jour" au style "nuit" sans recharger la page : une variable cookie, un peu de Javascript et principalement des variables CSS.

Utiliser les variables CSS pour changer un style de page sans rechargement

Google PageSpeed - LightHouse 6, nouveautés CLS (Cumulative Layout Shift) et LCP (Largest Contentful Paint)

lighthouseLes métriques de performances des pages Web sont modifiées avec LightHouse 6, elles sont plus réalistes et proches de l’expérience utilisateur. Une métrique particulièrement intéressante est introduite : CLS (Cumulative Layout Shift). La statistique CLS quantifie la stabilité visuelle des pages Web pour éviter les mauvaises expériences utilisateur. Tous les outils sont à disposition avec Chrome et LightHouse pour diagnostiquer les éléments concernés dans l’instabilité visuelle d’une page et en peu d’étapes, le score CLS peut être optimisé, mais tout va dépendre bien entendu de la complexité des pages et du code.

Google PageSpeed - LightHouse 6, nouveautés CLS (Cumulative Layout Shift) et LCP (Largest Contentful Paint)

Mesurer et stocker les métriques des performances des pages avec les API Google PageSpeed Insights et Python

lighthouseLa vitesse des pages est un des critères clés dans les algorithmes de classement des moteurs de recherche Google. Les API Google PageSpeed Insights donnent la possibilité d’extraire par programmation les résultats des audits LightHouse exécutés sur des pages Web depuis les laboratoires Google. Avec très peu de lignes de code Python, les statistiques principales peuvent être récupérées et stockées dans une table pour historisation : utile lorsqu’on planifie des benchmarks avant/après migrations, mises à jour.

Mesurer et stocker les métriques des performances des pages avec les API Google PageSpeed Insights et Python

Python, configuration applicative - variables d’environnement, fichiers ini et YAML

pythonBien entendu, aucune configuration applicative codée en dur dans des programmes, programmes Python ou non. Comment lire (écrire) des données de configuration avec Python à partir de variables d’environnement, de fichiers INI ou de fichiers YAML ? Les packages os, configparser et PyYAML répondent très simplement à ces besoins. configparser pour les fichiers INI et yaml pour les fichiers YAML ont leurs avantages et inconvénients si on se hasarde à les comparer pour faire un choix. Le format JSON n’est pas abordé ici, il fait l’objet d’une publication dédiée.

Python, configuration applicative - variables d’environnement, fichiers ini et YAML

Python, manipuler les dictionnaires avec la notation dot

pythonPython n’est pas Javascript. Habitudes, difficile de les éradiquer. Comment utiliser la notation dot avec Python sur un dictionnaire ? Cela peut être réalisé nativement avec une classe ou SimpleNamespace mais quand les dictionnaires sont imbriqués, cela devient fastidieux sans avoir à développer sa propre bibliothèque. Des packages de la communauté Python existent pour faire le job : Prodict, python-box.

Python, manipuler les dictionnaires avec la notation dot

Python, gestion des requêtes HTTP avec les packages requests et httplib2

pythonDans les échanges entre applications via des API, des requêtes HTTP avec la méthode GET ou POST sont de plus en plus utilisées. Avec Python, 2 packages très intéressants pour exécuter des requêtes HTTP : requests et httplib2. Le package requests est le plus simple syntaxiquement et intègre en natif un décodeur JSON, quant au package httplib2, une fonctionnalité très intéressante : la mise en cache pour éviter les appels réseaux non nécessaires dans certains contextes applicatifs avec des données relativement statiques.

Python, gestion des requêtes HTTP avec les packages requests et httplib2

Python, parsing des arguments avec les packages argparse and getopt

python2 packages natifs sont disponibles avec Python pour gérer efficacement les lignes de commandes et arguments d’un programme Python : argparse et getopt. argparse est de loin le package le plus évolué et offre le plus de productivité, quant à getopt une ressemblance très forte à ses habitudes de gestion des arguments en shell ou en C.

Python, parsing des arguments avec les packages argparse and getopt

Python, lire et écrire des données JSON avec le package natif json

pythonUne des premières choses à savoir quand on aborde le langage Python dans le contexte technologique actuel (échange de données, API…) : comment lire et écrire des données JSON dans un programme Python ? Python intègre le package json en natif pour ces opérations avec les méthodes load, loads, dump et dumps. Si on vient du monde Javascript, quelques habitudes de programmation avec les données Json non utilisables directement en Python (dot notation…).

Python, lire et écrire des données JSON avec le package natif json

Javascript - Lister les event listeners actifs sur une page Web

javascriptLors du développement d’un site Web, des écouteurs d’événements, appelés event listeners par abus de langage en français, sont implémentés soit par des librairies tierces, soit par soi même. Dans certaines circonstances, lors du démarrage des tâches d'améliorations des performances ou lors du debug de problèmes de comportement avec les event listeners à cause d’une librairie tierce, il s’avère utile d’obtenir une cartographie de tous les event listeners. Comment obtenir cette liste complète : les événements définis avec addEventListener et ceux définis avec l’attribut correspondant ? Ce n'est pas aussi trivial que cela pourrait l’être.

Javascript - Lister les event listeners actifs sur une page Web

Installation d’une instance standalone MariaDB ColumnStore 1.2.3 sur Ubuntu

mariadbL’installation d’un système MariaDB ColumnStore standalone sur Ubuntu, afin de découvrir le produit, est plutôt simple bien que la documentation officielle laisse penser le contraire. La prise en main est par ailleurs rapide avec la conjugaison des utilitaires mcsadmin et mcsmysql. Un point de départ technique sur cette base de données orientée stockage colonnes pour le traitement analytique temps réel de données distribuées et à très forte volumétrie.

Installation d’une instance standalone MariaDB ColumnStore 1.2.3 sur Ubuntu

InfluxDB v2, prise en main. Préparation de la migration de la version 1.7

influxdbLa migration vers InfluxDB v2 nécessite des ajustements, de nombreuses fonctionnalités d’InfluxDB v1 sont remplacées dans la version 2. La procédure de migration des versions 1.x vers la version 2 n’est pas encore dévoilée, mais très probablement elle préconisera des méthodes d’export/import. La terminologie change quelque peu avec la version 2 : une base de données devient un bucket et une organisation est obligatoirement attachée à un bucket. Rien ne change en revanche pour le protocole Ligne InfluxDB. Une prise en main d’un serveur InfluxDB Server v2 est abordée dans cet article ainsi que les ruptures à prévoir lors des migrations des versions 1.x :
  • InfluQL est remplacé par le langage Flux, les Continuous queries par les Tasks.
  • Le support natif des protocoles Graphite, OpenTSDB… est supprimé, Telegraf devra être mis en place.
  • Le plugin Flux pour Grafana n’est pas tout à fait prêt.

InfluxDB v2, prise en main. Préparation de la migration de la version 1.7

Protéger le port SSH sur Ubuntu avec Fail2ban - Installation et configuration

ubuntuSur les serveur Ubuntu, ufw (Uncomplicated Firewall) est un bon outil pour appliquer des règles de parefeu sur les ports sans avoir à utiliser les commandes iptables qui sont assez difficiles, mais ce n’est pas suffisant pour protéger le port 22 des services SSH. Fail2Ban est l’outil complémentaire à ufw afin de protéger un système Ubuntu des attaques sur SSH. Fail2Ban est un package Python qui interagit comme ufw avec iptables et il peut être installé dans un environnement virtuel Python.

Protéger le port SSH sur Ubuntu avec Fail2ban - Installation et configuration

Architecture, installation et utilisation d’une base de données Time Series InfluxDB 1.7

influxdbInfluxDB est une base de données Time Series performante proposant une compression de données efficace. L’architecture est simple et bien conçue (rétentions des mesures, fragments…) et l’ingestion des données facile à mettre en place, en natif ou via des protocoles Time Series standards (OpenTSDB, Graphite…). Les requêtes sont de type SQL et le reporting est intuitif avec Grafana ou Chronograf. Cette présentation d’InfluxDB v 1.7 souligne également les ruptures à prévoir avec la prochaine version majeure 2.0.

Architecture, installation et utilisation d’une base de données Time Series InfluxDB 1.7

Python - Comprendre et démystifier virtualenv

pythonAvec Python, lors de l’installation d’un produit, beaucoup de dépendances peuvent être aussi installées. Il devient fastidieux de gérer la pollution de la distribution globale Python: dépendances, conflits de versions de packages, binaires… Les packages utilisés par la plupart des utilisateurs peuvent être installés dans la distribution système et les packages nécessaires à un seul utilisateur/produit dans un environnement virtuel avec virtualenv. Comment créer et utiliser des environnements virtuels avec virtualenv ? Comment les packages et versions sont gérés dans les distributions virtuelles et système ? C’est le sujet de cet article.

Python - Comprendre et démystifier virtualenv

Procédures planifiées de bascules Failover - Failback avec la réplication en continu PostgreSQL (streaming replication)

postgresqlDe nombreux articles traitent de la promotion d’un serveur de secours PostgreSQL en serveur principal avec la commande pg_ctl promote. Beaucoup d’entre eux concluent que le serveur de secours doit être reconstruit lorsque le serveur principal est de retour. Qu’en est-il d’une maintenance programmée, maintenance incluant des arrêts, sur le serveur primaire ? Doit-on reconstruire le système primaire/standby ? Évidemment la réponse est : NON. En supposant qu’il y a suffisamment d’espace disque pour conserver les fichiers WAL pendant la tâche de maintenance, en gérant prudemment le point de réplication (replication slot) et l’option de récupération recovery_timeline_target durant les procédures failover/failback, il n’y a pas besoin de reconstruire le système standby impliquant des sauvegardes/restaurations de bases de données et/ou d’utiliser pg_rewind.

Procédures planifiées de bascules Failover - Failback avec la réplication en continu PostgreSQL (streaming replication)