PROJET AUTOBLOG


Planet-Libre

source: Planet-Libre

⇐ retour index

Simon Vieille : Équivalent du MATCH AGAINST de MySQL sur PostgreSQL

vendredi 22 février 2019 à 09:50

Le blog est propulsé sur un système de gestion de contenu écrit sur Symfony. Les données sont gérées dans une base MariaDB et ça tourne très très bien :)

Pour apprendre à utiliser PostgreSQL, je me suis donné comme défi de rendre compatible ce blog avec PostgreSQL. Fort heureusement, j'ai un ORM et 90% du boulot est géré par 3 lignes de configuration.

Le moteur de recherche est un peu plus compliqué à migrer puisque j'ai généré des requêtes en dehors de l'ORM. Son fonctionnement est relativement standard car quand un utilisateur saisi des mots clés, une première requête SQL va donner un score aux articles du blog publiés et je vais afficher ceux qui dépassent une valeur donnée.

Pour ce faire, j'utilise MATCH AGAINST de MySQL/MariaDB et la requête donne ça :

SELECT
    post.id,
    post.title,
    post.tags,
    MATCH(post.title) AGAINST(:search) AS MATCH_TITLE,
    MATCH(post.content) AGAINST(:search) AS MATCH_CONTENT,
    MATCH(post.tags) AGAINST(:search) AS MATCH_TAGS
FROM post
WHERE
    post.active = 1 AND
    post.published_at < :date
ORDER BY
    MATCH_TITLE DESC,
    MATCH_TAGS DESC,
    MATCH_CONTENT DESC

Pour obtenir des résultats équivalents avec PostgreSQL, la requête doit changer car MATCH AGAINST n'existe pas et comme PostgreSQL offre des outils beaucoup plus complets, c'est moins évident. Je trouve d'ailleurs que la documentation est assez peu claire à ce sujet. J'ai mis du temps à pondre une requête qui fonctionnait. La voici :

SELECT
    post.id,
    ts_rank(to_tsvector(post.title), query) as match_title,
    ts_rank(to_tsvector(post.tags), query) as match_tags,
    ts_rank(to_tsvector(post.content), query) as match_content
FROM
    post,
    plainto_tsquery(:search) query
WHERE
    post.active = true AND
    post.published_at < :date
ORDER BY
    match_title DESC,
    match_tags DESC,
    match_content DESC

Dans les 2 cas, :search: correspond aux mots clés et :date: représente la date où la recherche est faite.

Les scores ne sont pas du même ordre de grandeur mais je retrouve des résultats équivalents sur les 2 moteurs de base de données.

Gravatar de Simon Vieille
Original post of Simon Vieille.Votez pour ce billet sur Planet Libre.

genma : Quels astuces simples et pratiques dans mon usage au quotidien de Firefox

mardi 19 février 2019 à 09:00

Deux versions de Firefox en parallèle ?

Sur mon poste de travail que j'utilise au quotidien, je suis amené à avoir différents usages avec le navigateur : usage personnel et usage professionnel. Comme je n'aime pas mélanger et que je peux être amené à avoir besoin de deux navigateurs en même temps, je cumule deux fonctions : l'usage de Firefox Nigthly et la fonctionnalité d'avoir plusieurs profils complets pour Firefox. (Sur ces deux sujets, je vous renvoie vers ces anciens articles que sont Pourquoi j'utilise Firefox nightly ? et Plusieurs Firefox et plusieurs profils en même temps).

J'utilise donc Firefox Nigthly pour les usages personnels, Firefox version stable pour les usages professionels.

Customisation graphique

Pour différencier les deux navigateurs et les fenêtres associées (parfois j'ouvre plusieurs onglets, parfois une ou plusieurs fenêtres dédiées), et donc pour m'y retrouver entre les deux navigateur et savoir lequel est lequel, j'ai installé un thème qui facilite ainsi l'identification :

Un thème Quantum pour Firefox

thème Quantum pour Firefox

Un thème Firefox Quantum Nigthly

thème Quantum pour Firefox

Ainsi au premier coup d'oeil, je suis à même de savoir quel navigateur et dans quel contexte je suis. Et plus mon navigateur est plus joli (après ça, ça reste une question d'esthétique et de goût).

Partage d'onglets

Parfois quand je trouve un article intéressant dans le cadre d'une navigation depuis le navigateur "professionnel", je peux être intéressé par le fait de récupérer cet URL pour ensuite l'ajouter dans Wallabag (lecture pour plus tard) ou dans Shaarli (conservation en favori) ou inversement. J'utilise donc la superbe fonctionnalité de copie d'onglet d'un navigateur à un autre, telle que présenter dans le billet de blog de Mozfr.org Vous vous textotez des liens à vous-même ? « Envoyer l'onglet » fait mieux !

Ca repose sur Firefox Sync, il faut créer un compte et des données (l'URL de l'onglet) passe donc pas les serveurs de Mozilla. J'ai confiance, je connais un des administrateurs. Et je ne synchronise rien (pas les mots de passes, pas les marques-pages, pas les extensions), je n'utilise que la fonctionnalité de transfert d'un onglet d'un navigateur à un autre, dans mon cas les deux navigateurs étant sur la même machine. Ou parfois depuis le Firefox de mon smartphone vers le Firefox sur mon PC personnel, pour les "à lire plus tard".

Conteneurisation

J'ai donc défini plusieurs profils mais au sein d'un même profil j'utilise également la fonctionnalité de conteneurisation de Firefox, tel que présenté ici Onglets contextuels avec les Containers

Ainsi pour des services en lignes pour lesquels j'ai plusieurs comptes, je peux ouvrir un compte par onglet conteneurisé. Pratique, utile et indispensable.

Gravatar de genma
Original post of genma.Votez pour ce billet sur Planet Libre.

La vache libre : TLP/TLPUI quelques réglages intéressants

mardi 19 février 2019 à 00:18
TLPUI

Sur mon précédent Laptop je n’étais très attentif à la gestion de l’alimentation et de la batterie, dans la mesure où celle-ci était amovible. La plupart de temps mon laptop fonctionnait sur secteur et la batterie a passé le plus clair de son temps dans le sac. Je suis de ceux qui achètent un PC portable pour le gain de place, mais qui en font un usage sédentaire. Avec ma nouvelle machine je suis toujours aussi sédentaire, mais à mon grand regret la batterie n’étant pas amovible je dois faire avec. Je ne peux pas ouvrir pour voir si je peux la virer sans perdre la garantie constructeur. J’attendrai donc deux ans. Je me suis donc intéressé à la façon dont je pouvais gérer et optimiser tout ça. Comme c’est un peu le gratin dans le domaine, j’ai regardé de plus près les options avancées de TLP et j’ai testé au passage son GUI dont j’ignorais encore l’existence il n’y a pas si longtemps. Il y a quelques options vraiment pas mal quand on fouine un peu.

Outre la durée de vie de la batterie, ce qui m’a poussé à m’intéresser aux options de TLP (qui de base sont ajustées de manière assez efficace pour qu’on ait pas à y toucher) c’est la gestion de la température. On a beau vous dire que l’autonomie de votre nouvelle machine va être tout simplement énorme, vous n’allez pas passer quatre heures et ce même en usage normal, sans devoir jouer du cordon. Pour moi qui suit planté devant pendant des heures ça passe vite et si on veut faire bien, à savoir maintenir un niveau de charge optimal se situant en 40 et 80%, ça devient sportif. J’ai déjà le museau collé au compteur dès que je prend la bagnole, alors si je dois plus le coller sur la jauge de mon PC je vais frôler la crise de nerf.

J’ai donc transigé en partant du principe que de nos jours une batterie c’est « intelligent » et que par conséquent si je reste sur secteur, une fois à 100% la charge sera suspendue et ne reprendra qu’une fois que le niveau baisse. Je me suis dit aussi que ça limitera les cycles, même si maintenir un niveau de charge élevé n’est pas forcement recommandé pour la durée de vie de la batterie. Bref, il n’y a pas de bon compromis en fait. Ou le nez sur la jauge, ou du 100% la plupart du temps. J’ai donc effectué un cycle de charge complet et là j’ai constaté par hasard une augmentation de la chaleur d’environ 30 degrés. En charge (processeur/GPU) normale sensors m’indique environ 30°, alors que sur secteur je passe en moyenne à 60°.

Dans un premier temps je me suis dit que c’était normal, car une batterie qui charge ça chauffe. On le sait. Sauf qu’une fois à 100% ça ne baisse plus. J’ai lancé un watch -n 30 sur sensors et j’ai surveillé un bon bout de temps, mais rien à faire. J’ai essayé d’être pragmatique et j’ai considéré dès lors que pour un PC Gamer 60° ce n’était sans doute pas excessif. J’ai lancé quelques vidéos HD toujours en surveillant et ça semblait plafonner à ces températures. C’est alors que je me suis rappelé que TLP était installé sur ma machine et que les températures en mode BAT (batterie) devaient être plus basses du fait qu’il privilégie l’autonomie en bridant les perfs. J’ai alors décidé de jeter un œil aux réglages en me servant du GUI et j’ai trouvé quelques options intéressantes.

J’ai tout d’abord entré la commande suivante pour voir si TLP était réellement actif :

sudo tlp-stat -s

ce qui m’a été confirmé par le retour suivant :

+++ TLP Status
State = enabled
Last run = 21:26:33, 1 sec(s) ago
Mode = battery
Power source = AC

On peut voir au passage que je suis en mode BAT (batterry) alors que la source d’alimentation est sur AC (courant alternatif), ce qui est très intéressant pour moi. Je suis en effet parti du principe que la puissance de ma machine était largement suffisante quand je l’utilise sur batterie et que par conséquent je pouvais très bien me contenter de la même chose quand je suis sur secteur.

Comme le montre l’image ci-dessous TLP le permet :

Il suffit de s’assurer que l’option TLP_DEFAULT_MODE soit sur BAT (c’est le profil par défaut) et de passer l’option TLP_PERSISTENT_DEFAULT de 0 à 1 avant de sauvegarder le tout. TPL appliquera alors le profil par défaut (BAT) même quand la machine tournera sur secteur.

Après avoir avoir appliqué cette option la température a déjà baissé de 20° pendant que la batterie se recharge. Ça me va très bien comme ça.

On peut bien entendu choisir l’inverse et délaisser le mode BAT pour le mode AC quand la machine tourne sur batterie. Vous ne briderez pas les performances de votre machine une fois la prise secteur débranchée, mais vous perdrez bien entendu énormément en autonomie. À vous de voir ce qui vous convient en fonction de ce dont vous avez besoin à l’instant T.

Comme je l’ai évoqué plus haut, la nouvelle génération de batteries présentes sur nos machines ont un niveau de charge optimal se situant aux alentours de 40 et 80% (c’est pareil pour vos smartphones). Si on effectue à chaque fois un cycle de recharge complet sa durée de vie sera d’à peu près 500 recharges, contre environ 1200 si on s’astreint à rester dans la tranche 40/80. Comme c’est fastidieux personne ne le fait vraiment sur le long terme, mais là encore TPL peut nous aider et s’en charger (qu’il est bon ce jeu de mot).

Vous pouvez indiquer les seuils de charge mini/maxi dans la section ThinkPad Battery et il s’occupe de tout. Vous n’aurez plus à vous en soucier et votre batterie restera dans la fourchette optimale. Génial non?!

J’ai remarqué une autre section très intéressante, car elle m’a permis de désactiver le Bluetooth une fois pour toute, ce qui si on en croit cette discussion issue des forums Ubuntu n’est pas chose facile.

Comme vous pouvez-le voir sur la capture ci-dessous, la section « radio » permet de choisir d’activer ou de désactiver (à l’arrêt ou au démarrage) certains modules, dont le bluetooth ou le wifi.

J’ai également procédé au passage à un réglage dans l’onglet « Processor », pour demander à TLP d’utiliser les même réglages qu’en mode batterie (balance_performance), car cela me suffit amplement.

Il y a pas mal d’autres réglages, mais pour le moment je suis à peu près satisfait par ceux que j’ai affiné. J’ai ce qu’il me faut en ressources et je sais qu’au besoin j’en ai encore sous le pied. La température de mon PC est à un bon niveau sur secteur, la charge se fait de manière optimale, automatiquement et le bluetooth s’est fait la malle jusqu’à ce que je lui dise de revenir.

La dernière chose à laquelle je dois m’atteler c’est la vitesse de mes ventilateurs. J’ai l’impression qu’ils tournent mieux sous Windows que sous Linux (où il ont l’air d’être plus lents). Mais ça c’est autre chose et TLP ne peut rien faire.

En ce qui concerne le GUI de TLP c’est pas mal, mais ça ne fait rien de plus que l’édition du fichier. C’est juste plus lisible, plus pratique, ce qui est déjà très bien.

Si vous préférez l’édition à la patte ceci fait très bien l’affaire :

sudo gedit /etc/default/tlp 

Amusez-vous bien!

Gravatar de La vache libre
Original post of La vache libre.Votez pour ce billet sur Planet Libre.

Full Circle Magazine FR : Premier numéro de 2019 !

lundi 18 février 2019 à 17:54

Bonjour à tous et à toutes,

La petite équipe française de traduction du magazine Full Circle est très heureuse de pouvoir vous proposer le numéro 141, celui de janvier 2019, en français. Il est disponible sur notre page NUMÉROS ou directement, en cliquant sur la photo de couverture ci-dessus.

issue141.png

Outre les bonnes rubriques habituelles, Python, Inkscape, Mon opinion, Mon histoire, Q. ET R., et j'en passe, vous y trouverez, notamment :

Amusez-vous bien !

Bab, le scribeur et d52fr et moi-même, AuntieE, les traducteurs/relecteurs

Gravatar de Full Circle Magazine FR
Original post of Full Circle Magazine FR.Votez pour ce billet sur Planet Libre.

Articles similaires

Frédéric Micout : Centralisation des logs avec Graylog

lundi 18 février 2019 à 12:00

L'auto-hébergement c'est super mais quand on commence à avoir plusieurs services qui tournent, il faut quand même superviser un peu tout ça. Jusqu'à présent, je comptais sur quelques scripts pour cela. Mon serveur a peu d'activité et ça suffit à peu près même si ce n'est pas parfait. L'un des problèmes tient au fait que j'utilise plusieurs machines virtuelles (via virtualbox) et que je dois donc tout traiter machine par machine. Un autre problème est lié au fait que côté visualisation, ben ça reste des logs plus ou moins brutes. Bref, il ne me manquait qu'un peu de temps pour travailler sur ce sujet.

Force est de constater que pas mal de solutions diverses existent. Après une recherche rapide, deux d'entre elles ont retenu mon attention. La stack ELK (Elasticsearch + Logstash + Kibana) et Graylog (+ elasticsearch + mongodb). C'est cette seconde solution que j'ai décidé de déployer, non pas qu'elle soit forcement meilleure que l'autre (je n'en sais rien) mais mon cas d'usage est assez basic donc, les deux doivent faire l'affaire (je changerai peut être d'avis ensuite).

J'ai opté pour une installation de chacun de ces outils (mongodb, elasticsearch et graylog) à partir des .deb dans une machine virtuelle à part. Pour les fans de docker, pas de soucis non plus : http://docs.graylog.org/en/3.0/pages/installation/docker.html. Autant le dire tout de suite, graylog et elasticsearch demandent beaucoup de RAM pour fonctionner de manière convenable. Beaucoup, ça veut dire 1 Go chacun par défaut. C'est probablement peu pour une gros serveur mais pas forcement pour une machine plus modeste. J'ai tenté de réduire ces paramètres (voir les paramètres Xms et Xmx dans les fichiers de configuration) et en gros, c'est juste inutilisable. J'ai donc alloué 4 Go de mémoire vive à ma machine virtuelle sur les 8 Go installé sur mon serveur. Au passage, le problème serait à peu près identique avec la stack ELK. Pas de jaloux donc...

Dans un premier temps, je me concentre sur les services qui sont ouverts sur l'extérieur, à savoir le serveur mail et le serveur web. J'utilises pour cela Rsyslog sur chaque machine dont je veux rapatrier les logs. Dans le fichier "/etc/rsyslog.conf ", ajouter pour envoyer les logs UDP (@) ou TCP(@@) (dans le cas présent, j'envoie mes logs en UDP d'où le commentaire sur la ligne correspondant à TCP):

*.* @IP_MACHINE_GRAYLOG:514;RSYSLOG_SyslogProtocol23Format
#*.* @@IP_MACHINE_GRAYLOG:514;RSYSLOG_SyslogProtocol23Format

Concernant les logs apache, j'ai simplement ajouté ce qui suit dans la config de chaque VHost :

ErrorLog "|/usr/bin/logger -t apache -p local0.info"
CustomLog "|/usr/bin/logger -t apache -p local0.info" combined

Je rapatrie aussi les logs de mon NAS Synology. Pour le faire, j'ai simplement ajouté le paquet "centres de journaux" et je n'ai eu ensuite qu'à activer le transfert de log en indiquant l'adresse IP du serveur de log, le port (514) et le protocole (UDP) à employer.

Au passage, puisque les logs ne transitent que sur mon réseau local, je n'ai pas cherché à chiffrer les échanges. C'est un choix qui n'est pas gravé dans le marbre mais dans la mesure où je considère mon réseau local sûr, pas de soucis normalement ...

Côté serveur Graylog, j'ai ajouté les règles iptables suivantes afin de rediriger l'ensemble des paquets arrivant sur le port 514 vers le port 1514, ceci afin de pouvoir les capturer ensuite :

iptables -t nat -A PREROUTING -p tcp --dport 514 -j REDIRECT --to 1514
iptables -t nat -A PREROUTING -p udp --dport 514 -j REDIRECT --to 1514

La configuration à proprement parler de Graylog s'effectue dans le fichier "/etc/graylog/server/server.conf". En fait, peu de choses à modifier si ce n'est le mot de passe admin et l'URI permettant d'accéder au serveur (ici, uniquement depuis le réseau local ; la version 3 de Graylog tout juste sortie simplifie cette partie en unifiant ces paramètres par rapport à la version 2.5 que j'avais d'abord installé). J'ai aussi modifié ce qui suit afin de ne pas répliquer les données et de toutes les regrouper dans un seul shard (à priori, je resterai quoi qu'il arrive assez loin des limites pouvant me faire reconsidérer la question) :

elasticsearch_shards = 1
elasticsearch_replicas = 0

Une fois cela fait, reste à lancer le tout et à prévoir de démarrer ces service à chaque démarrage :

# systemctl enable elasticsearch.service
# systemctl start elasticsearch.service

# systemctl enable mongod.service
# systemctl start mongod.service

# systemctl enable graylog-server.service
# systemctl start graylog-server.service

Après une phase de démarrage qui peut durer plusieurs minutes, Graylog est accessible via une interface web sur le port 9000. À ce stade, il faut définir des entrées dans Graylog car pour le moment, c'est un coquille vide. J'ai créé deux "input" avec un attribut "Global" (rien à modifier sinon):

Là si tout va bien, dans l'onglet "search", on verra progressivement arriver nos logs et les graphs associés. Il est possible de filtrer les entrées en fonction de nos besoins, de paramétrer la période de visualisation, les champs que l'on veut voir apparaître, etc... Chose super cool, la possibilité de paramétrer des tableaux de bord dans lesquels on aura la possibilité de retrouver que l'on aura pré-paramétré. Les résultats sont présentés de manière synthétique sous forme de graphe et il est possible d'accéder rapidement aux données ayant produit ces tableaux.

Une fois installé et configuré, Graylog est réactif et intéressant à l'usage. C'est visuel et intuitif. :D . Cela fera l'objet d'un autre billet dans quelque temps ...

Gravatar de Frédéric Micout
Original post of Frédéric Micout.Votez pour ce billet sur Planet Libre.