ON AN ON - Ghosts photo

ON AN ON – Ghosts

On An On est formé par d’ex-membres du groupe Scattered : Nate Eiesland, Alissa Ricci et Ryne Estwing ont décidé d’essayer des choses qu’ils n’avaient pas l’habitude de faire avec leur ancien groupe et leur son déjà établi.

C’est avec le producteur de Broken Social Scene, Dave Newfeld, qu’ils enregistrent leur premier album, autour du morceau Ghosts :

There are spirits coming to find me
They’re not stopping until it’s done
I can feel them taking me over

I can see them from fifty-six miles away
But I can’t hear what they’re saying
They gotta believe me that I’ll never forget you

Every day the ghosts are going to fly
Every way I know I’m going to try
To keep you alive, to keep you alive

Take me out into the night
It was all you didn’t say, you had no fight
I was on the verge to scream
When you wouldn’t scream about anything
I don’t want to be your stupid fling or your magazine
That you look and turn the pages
Of someone else that you’ll never love

And I was on the verge to scream
When you wouldn’t scream about anything

Cela s’écoute très bien et cela va de l’avant. L’album Give In est sorti le 29 janvier 2013 chez Roll Call Records.

WordPress : résoudre le problème de la table wp_options à qui manquent une colonne Unique et une Primary Key photo

WordPress : résoudre le problème de la table wp_options à qui manquent une colonne Unique et une Primary Key

Chez Codeable, j’ai travaillé sur l’optimisation d’un site e-commerce propulsé par WooCommerce récemment, qui connaissait quelques problèmes de lenteur.

Sous phpMyAdmin, on trouvait également cette erreur:

Current selection does not contain a unique column

Si vous obtenez cette erreur, c’est que la structure de la table wp_options n’est pas à jour donc nous la vérifions avec wp-cli:

wp db query "DESCRIBE $(wp db prefix --allow-root)options" --allow-rootCode language: JavaScript (javascript)

Le résultat obtenu nous montre qu’il n’y a pas de clé primaire (primary key) qui est normalement option_id et qu’il n’y a pas de restriction unique imposée sur la colonne option_name:

+--------------+---------------------+------+-----+---------+-------+
| Field        | Type                | Null | Key | Default | Extra |
+--------------+---------------------+------+-----+---------+-------+
| option_id    | bigint(20) unsigned | NO   |     | NULL    |       |
| option_name  | varchar(191)        | YES  |     | NULL    |       |
| option_value | longtext            | NO   |     | NULL    |       |
| autoload     | varchar(20)         | NO   |     | yes     |       |
+--------------+---------------------+------+-----+---------+-------+Code language: PHP (php)

Et c’est là que le bât blesse – voici à quoi ressemble la structure standard de la table wp-options:

+--------------+---------------------+------+-----+---------+----------------+
| Field        | Type                | Null | Key | Default | Extra          |
+--------------+---------------------+------+-----+---------+----------------+
| option_id    | bigint(20) unsigned | NO   | PRI | NULL    | auto_increment |
| option_name  | varchar(191)        | NO   | UNI | NULL    |                |
| option_value | longtext            | NO   |     | NULL    |                |
| autoload     | varchar(20)         | NO   | MUL | yes     |                |
+--------------+---------------------+------+-----+---------+----------------+Code language: PHP (php)

Ajouter la Primary Key manquante à wp_options

On ajoute à la colonne option_id la clé primaire qui lui manque:

wp db query "ALTER TABLE $(wp db prefix --allow-root)options MODIFY option_id INT AUTO_INCREMENT PRIMARY KEY;" --allow-rootCode language: JavaScript (javascript)

Et on vérifie le résultat:

wp db query "DESCRIBE $(wp db prefix --allow-root)options" --allow-rootCode language: JavaScript (javascript)

Ajouter la contrainte Unique qui manque à wp_options

Pour ajouter la contrainte UNIQUE à la colonne option_name, on lance:

wp db query "ALTER TABLE $(wp db prefix --allow-root)options ADD UNIQUE (option_name);" --allow-rootCode language: JavaScript (javascript)

Là, il est possible que cela bloque, suivant ce qui se trouve dans votre table wp_options.

Résoudre le problème des doublons

Si vous obtenez une erreur comme :

ERROR 1062 (23000) at line 1: Duplicate entry 'jetpack_available_modules' for key 'option_name'Code language: JavaScript (javascript)

alors cela signifie qu’il existe des enregistrements option_name dupliqués, des doublons qui portent le même nom alors que chaque nom option_name devrait être unique.

On peut obtenir la liste des enregistrements option_name doublons avec cette requête:

wp db query "SELECT option_name, COUNT(*) optioncount FROM $(wp db prefix --allow-root)options GROUP BY option_name HAVING optioncount > 1 ORDER BY optioncount DESC;" --allow-rootCode language: JavaScript (javascript)

Par ordre ascendant, voici la liste des doublons:

+---------------------------------------------+-------------+
| option_name                                 | optioncount |
+---------------------------------------------+-------------+
| jetpack_callables_sync_checksum             |       47123 |
| jetpack_sync_full_config                    |          50 |
| jetpack_sync_full_enqueue_status            |          43 |
| jpsq_sync_checkout                          |          10 |
| jetpack_sync_full__params                   |           5 |
| jetpack_sync_settings_sync_via_cron         |           4 |
| jetpack_sync_full__started                  |           4 |
+---------------------------------------------+-------------+

On peut supprimer automatiquement tous les doublons option_name de deux manières différentes, soit en utilisant la plus vieille valeuroption_id(donc la plus petite valeur d’ID), soit en utilisant la valeuroption_id la plus récente (plus grande valeur d’ID).

Garder le doublon option_name le plus ancien

Voici la requête SQL qui montre uniquement le plus ancien enregistrement (MIN) option_id pour chaque doublon de valeur option_name:

SELECT *
FROM wp options
WHERE option_id NOT IN
    (SELECT *
     FROM
       (SELECT MIN(n.option_id)
        FROM wp_options
        GROUP BY n.option_name) x)Code language: CSS (css)

Une fois que vous avez vérifié le résultat, on peut passer à la suppression.

Cette requête SQL garde l’enregistrement (MIN) option_id le plus ancien de tous les doublonsoption_name et supprime tous les enregistrements plus récents que la valeur trouvée:

DELETE
FROM wp options
WHERE option_id NOT IN
    (SELECT *
     FROM
       (SELECT MIN(n.option_id)
        FROM wp_options n
        GROUP BY n.option_name) x)Code language: CSS (css)

Voici l’équivalent wp-cli:

wp db query "DELETE FROM $(wp db prefix --allow-root)options WHERE option_id NOT IN (SELECT * FROM (SELECT MIN(n.option_id) FROM $(wp db prefix --allow-root)options n GROUP BY n.option_name) x)" --allow-rootCode language: JavaScript (javascript)

Garder le doublon option_name le plus récent

Cette requête SQL ne montre que les enregistrements option_id les plus récents (MAX) pour tous les doublons option_name :

SELECT *
FROM wp_options
WHERE option_id NOT IN
    (SELECT *
     FROM
       (SELECT MAX(n.option_id)
        FROM wp_options n
        GROUP BY n.option_name) x)Code language: CSS (css)

Et voici la requête qui permet de garder les enregistrements option_id les plus récents (MAX) pour tous les doublons option_name en supprimant tous les doublons les plus anciens:

DELETE
FROM wp_options
WHERE option_id NOT IN
    (SELECT *
     FROM
       (SELECT MAX(n.option_id)
        FROM wp_options n
        GROUP BY n.option_name) x)Code language: CSS (css)

Voici l’équivalent wp-cli pour garder l’enregistrement option_name le plus récent:

wp db query "DELETE FROM $(wp db prefix --allow-root)options WHERE option_id NOT IN (SELECT * FROM (SELECT MAX(n.option_id) FROM $(wp db prefix --allow-root)options n GROUP BY n.option_name) x)" --allow-rootCode language: JavaScript (javascript)

Vérifier les clés et contraintes de la table wp_options

Ajoutons de nouveau la contrainte UNIQUE sur la colonne option_name :

wp db query "ALTER TABLE $(wp db prefix --allow-root)options ADD UNIQUE (option_name);" --allow-rootCode language: JavaScript (javascript)

Si vous n’obtenez pas d’erreur, vérifiez la table une nouvelle fois pour constater les changements:

wp db query "DESCRIBE $(wp db prefix --allow-root)options;" --allow-rootCode language: JavaScript (javascript)

Kaboom! Votre table wp_options possède maintenant une PRIMARY KEY sur la colonne option_id et la contrainte UNIQUE sur la colonne option_name:

+--------------+---------------------+------+-----+---------+----------------+
| Field        | Type                | Null | Key | Default | Extra          |
+--------------+---------------------+------+-----+---------+----------------+
| option_id    | bigint(20) unsigned | NO   | PRI | NULL    | auto_increment |
| option_name  | varchar(191)        | NO   | UNI |         |                |
| option_value | longtext            | NO   |     | NULL    |                |
| autoload     | varchar(20)         | NO   |     | yes     |                |
+--------------+---------------------+------+-----+---------+----------------+Code language: PHP (php)

Je vous conseille de vérifier la structure de la table de temps à autre, notamment si vous constatez une prise de poids anormale en très peu de temps

Serveur dédié : installation de MariaDB 10.3 photo

MariaDB ne veut plus redémarrer : quelques solutions

MariaDB ne veut plus se lancer

Sur le serveur chinois que j’ai monté pour un de mes clients sur Codeable, le site a commencé à afficher des erreurs étranges : erreur 502 pour nginx sur certaines pages et des nombres étranges en lieu et place des données de la base de données.

Après un redémarrage des services PHP, nginx et mysql, je constate que MariaDB veut bien s’arrêter mais ne veut plus de lancer.

Voici ce que donne:

systemctl status mariadb.serviceCode language: CSS (css)

Résultat:

● mariadb.service - MariaDB database server
   Loaded: loaded (/lib/systemd/system/mariadb.service; enabled; vendor preset: enabled)
   Active: failed (Result: exit-code) since Mon 2019-04-22 18:14:22 CST; 59s ago
  Process: 721 ExecStartPost=/bin/sh -c systemctl unset-environment _WSREP_START_POSITION (code=exited, status=0/SUCCESS)
  Process: 718 ExecStartPost=/etc/mysql/debian-start (code=exited, status=0/SUCCESS)
  Process: 12274 ExecStart=/usr/sbin/mysqld $MYSQLD_OPTS $_WSREP_NEW_CLUSTER $_WSREP_START_POSITION (code=exited, status=1/FAILURE)
  Process: 12179 ExecStartPre=/bin/sh -c [ ! -e /usr/bin/galera_recovery ] && VAR= ||   VAR=`/usr/bin/galera_recovery`; [ $? -eq 0 ]   && systemctl set-environment _WSREP_START_POSITION=$VAR || exit 1 (code=exited,
  Process: 12176 ExecStartPre=/bin/sh -c systemctl unset-environment _WSREP_START_POSITION (code=exited, status=0/SUCCESS)
  Process: 12173 ExecStartPre=/usr/bin/install -m 755 -o mysql -g root -d /var/run/mysqld (code=exited, status=0/SUCCESS)
 Main PID: 12274 (code=exited, status=1/FAILURE)
   Status: "MariaDB server is down"
systemd[1]: Starting MariaDB database server…
mysqld[12274]: 2019-04-22 18:14:19 140194687476288 [Note] /usr/sbin/mysqld (mysqld 10.1.26-MariaDB-0+deb9u1) starting as process 12274 …
systemd[1]: mariadb.service: Main process exited, code=exited, status=1/FAILURE
systemd[1]: Failed to start MariaDB database server.
systemd[1]: mariadb.service: Unit entered failed state.
systemd[1]: mariadb.service: Failed with result 'exit-code'.Code language: PHP (php)

Bon, chou blanc. Cela ne nous donne aucune information exploitable quand à l’erreur qui empêche le démarrage du service de base de données.

Solution: vérifier l’espace disponible sur le disque du serveur

On regarde ensuite ce que nous donnent les logs de MariaDB:

tail -f /var/log/mysql/error.logCode language: JavaScript (javascript)

Résultat:

2019-04-22 18:14:19 140194687476288 [Note] InnoDB: Completed initialization of buffer pool
2019-04-22 18:14:19 140194687476288 [Note] InnoDB: Highest supported file format is Barracuda.
2019-04-22 18:14:19 140194687476288 [Note] InnoDB: 128 rollback segment(s) are active.
2019-04-22 18:14:19 140194687476288 [Note] InnoDB: Waiting for purge to start
2019-04-22 18:14:19 140194687476288 [Note] InnoDB:  Percona XtraDB (http://www.percona.com) 5.6.36-82.1 started; log sequence number 11397472969
2019-04-22 18:14:19 140194687476288 [Note] Plugin 'FEEDBACK' is disabled.
2019-04-22 18:14:19 140194687476288 [ERROR] mysqld: Can't change size of file (Errcode: 28 "No space left on device")
2019-04-22 18:14:19 140194687476288 [ERROR] Can't init tc log
2019-04-22 18:14:19 140194687476288 [ERROR] AbortingCode language: PHP (php)

Là, c’est beaucoup plus intéressant. Visiblement, deux erreurs majeures sont à l’origine du non-démarrage du service:

  • il n’y a plus d’espace disponible sur le disque dur du serveur,
  • le fichier /var/lib/mysql/tc.log ne peut pas être initialisé.

Après un petit df, il s’avère que le client a installé un plugin de sauvegarde qui a littéralement saturé tout l’espace disponible.

Après un petit ménage, il ne reste plus qu’à gérer la seconde erreur, Can’t init tc log.

Le fichier /var/lib/mysql/tc.log peut parfois souffrir d’un problème de permission.

Dans le cas du client, on l’archive par précaution:

mv /var/lib/mysql/tc.log /var/lib/mysql/tc_bakup.logCode language: JavaScript (javascript)

Puis on relance le serveur MariaDB:

service mysql start

On vérifie le statut du service:

service mysql status

qui nous retourne:

service mysql status
● mariadb.service - MariaDB database server
   Loaded: loaded (/lib/systemd/system/mariadb.service; enabled; vendor preset: enabled)
   Active: active (running) since Mon 2019-04-22 18:17:22 CST; 1h 37min ago
  Process: 12467 ExecStartPost=/bin/sh -c systemctl unset-environment _WSREP_START_POSITION (code=exited, status=0/SUCCESS)
  Process: 12464 ExecStartPost=/etc/mysql/debian-start (code=exited, status=0/SUCCESS)
  Process: 12340 ExecStartPre=/bin/sh -c [ ! -e /usr/bin/galera_recovery ] && VAR= ||   VAR=`/usr/bin/galera_recovery`; [ $? -eq 0 ]   && systemctl set-environment _WSREP_START_POSITION=$VAR || exit 1 (code=exited,
  Process: 12337 ExecStartPre=/bin/sh -c systemctl unset-environment _WSREP_START_POSITION (code=exited, status=0/SUCCESS)
  Process: 12334 ExecStartPre=/usr/bin/install -m 755 -o mysql -g root -d /var/run/mysqld (code=exited, status=0/SUCCESS)
 Main PID: 12437 (mysqld)
   Status: "Taking your SQL requests now..."
    Tasks: 29 (limit: 4915)
   CGroup: /system.slice/mariadb.service
           └─12437 /usr/sbin/mysqld

Apr 22 18:17:20 iZuf6aj6jz83uxa0jgbgcrZ systemd[1]: Starting MariaDB database server...
Apr 22 18:17:21 iZuf6aj6jz83uxa0jgbgcrZ mysqld[12437]: 2019-04-22 18:17:21 139940495544896 [Note] /usr/sbin/mysqld (mysqld 10.1.26-MariaDB-0+deb9u1) starting as process 12437 ...
Apr 22 18:17:22 iZuf6aj6jz83uxa0jgbgcrZ systemd[1]: Started MariaDB database server.Code language: PHP (php)

A noter que l’erreur 502 de nginx n’était pas due à une mauvaise configuration du server block mais bien d’un manque d’espace disque.

C’est important à vérifier, avant de se lancer dans la dissection du fichier de configuration d’nginx (qui n’aurait pas réglé le problème dans ce cas précis).

Michael Molloy and Alex Evans - Rise and Fall photo

Michael Molloy and Alex Evans – Rise and Fall

“Rise & Fall” est une chanson écrite par Michael Molloy et Alex Evans.

La chanson a été enregistrée par Michael Molloy avant son décès, en septembre 2012, à la suite d’un accident de car survenu alors qu’il rentrait de Bestival.

Le single a reçu le soutien de Brian May, James Morrison, Wayne Rooney et Joey Barton. La chanson a été publiée par les organisateurs de Bestival, Sunday Best, sur leur label Sunday Best Recordings.

Joe Molloy, le frère de Michael, a déclaré:

«L’ambition de Michael était de faire reconnaître sa musique par le monde entier. Il n’a jamais rempli cette ambition et nous, sa famille, l’accomplissons pour lui. Michael ne pourra jamais revenir et nous ne cesserons jamais de le pleurer. Nous pensons à lui chaque heure de chaque jour. Mais la passion de Michael pour la musique et son talent étaient l’une des qualités qui le caractérisaient et nous souhaitons que le reste du monde, par le biais de sa musique, comprenne et apprécie, de façon modeste, ce qu’il était en tant qu’être humain spécial. La sortie du single est à la fois mémorable et festive et nous souhaitons remercier Sunday Best et toutes les personnes qui ont soutenu Michael pendant de nombreuses années. Ils savent qui ils sont. “

WordPress : nettoyer les tables wp_options et wp_postmeta photo

WordPress : nettoyer les tables wp_options et wp_postmeta

Nous allons aujourd’hui examiner deux tables importantes de votre base de données WordPress, wp_options et wp_postmeta.

C’est un domaine qui est souvent négligé en ce qui concerne les performances globales de WordPress et de la base de données.

Cela est très visible sur les sites les plus anciens et les plus gros et peut être la cause des temps de requête lents sur votre site en raison des données à chargement automatique laissées par les plugins et les thèmes tiers.

Voici quelques conseils pour vérifier, dépanner et nettoyer vos tables wp_options et wp_postmeta.

Que contient la table wp_options ?

La table wp_options contient toutes les données relatives aux options et paramètres de votre site WordPress telles que:

  • URL du site, URL de la page d’accueil, adresse électronique de l’administrateur, catégorie par défaut, publications par page, format d’heure, etc.
  • Paramètres pour les plugins, les thèmes, les widgets,
  • Données temporairement mises en cache.

La table wp_options contient plusieurs champs :

  • option_id
  • option_name
  • option_value
  • autoload

Le champ qui nous intéresse particulièrement est le champ autoload, qui contient un drapeau qui peut être soit “yes”, soit “no”. Cela contrôle essentiellement si la valeur est chargée ou non par la fonction wp_load_alloptions().

Les données à chargement automatique sont des données qui sont chargées sur chaque page de votre site WordPress. L’attribut autoload est défini sur «yes» par défaut pour les développeurs, mais tous les plugins ne doivent théoriquement pas charger leurs données sur chaque page.

Le problème que les sites WordPress peuvent rencontrer est celui où la table wp_options contient une grande quantité de données auto-chargées. Cependant, la table wp_options n’a pas non plus été conçue pour contenir des milliers de lignes.

Combien coûte trop de données autoloadées? Cela peut varier, bien sûr, mais idéalement, vous voulez que la taille de votre ordinateur soit comprise entre 300 Ko et 1 Mo.

Une fois que vous commencez à approcher la plage de 3 à 5 Mo ou plus, il existe très probablement des éléments pouvant être optimisés ou supprimés du chargement automatique.

Et tout ce qui dépasse 10 Mo doit être traité immédiatement. Cela ne signifie pas toujours que cela posera un problème, mais c’est un bon point de départ.

Vérifier la taille totale des données auto-chargées

On peut calculer la taille totale des données auto-chargées d’un site WordPress en effectuant la requête suivante sous MySQL:

SELECT SUM(LENGTH(option_value)) as autoload_size FROM wp_options WHERE autoload='yes';Code language: JavaScript (javascript)

La valeur d’autoload_size est exprimée en octets. Il y a 1024 octets dans un KB et 1024 KB dans un MB. Dans notre cas, 622 138 octets sont donc égaux à 0,62 MB. Donc pour ce site, c’est une bonne taille! Si vous restituez moins de 1 Mo, ne vous inquiétez pas. Cependant, si le résultat était beaucoup plus grand, passez à l’étape suivante.

Lire la suite

BRADAFRAMANADAMADA - Laisse pisser photo

BRADAFRAMANADAMADA – Laisse pisser

Voici une chanson de BRADAFRAMANADAMADA qui permet de remettre en perspectives toutes les petites choses et les petits tracas de la vie quotidienne :

Laisse pisser ! :)

Le Parlement Européen réforme la directive sur le droit d'auteur sur Internet photo

Le Parlement Européen réforme la directive sur le droit d’auteur sur Internet

Réforme de la directive sur le droit d’auteur sur Internet

Le Parlement européen a donné son aval à la directive sur le droit d’auteur, un ensemble de lois controversé destiné à mettre à jour le droit d’auteur en Europe à l’ère de l’internet.

Les députés ont voté à 348 en faveur de la loi et 274 contre. Une proposition de dernière minute visant à supprimer la clause la plus controversée de la loi – connue sous le nom d’article 13 ou «filtre de téléchargement» – a été rejetée de près par cinq voix seulement.

La directive va maintenant être transmise aux États membres de l’UE, qui disposeront de 24 mois pour la traduire en droit national. La directive sur le droit d’auteur est en préparation depuis plus de deux ans et a fait l’objet d’un lobbying acharné de la part des géants de la technologie, des détenteurs de droits et des activistes des droits numériques.

Julia Reda, eurodéputée du parti pirate allemand qui a beaucoup dirigé l’opposition à la directive, a déclaré que c’était “un jour sombre pour la liberté de l’internet”. Andrus Ansip, vice-président de la Commission européenne et grand défenseur de la loi, a déclaré qu’il était un «grand pas en avant» qui unifierait le marché numérique européen tout en protégeant la «créativité en ligne».

Les détails de la législation devront être décidés par les différents États membres de l’UE, mais la loi aura probablement un impact considérable sur le fonctionnement d’Internet en Europe et au-delà. Comme nous l’avons vu avec le GRPD, la législation de l’UE sur la protection des données, la législation européenne peut influencer la politique américaine.

Les partisans de la directive ont déclaré qu’elle équilibrerait le terrain de jeu entre les géants américains de la technologie et les créateurs de contenu européens, en donnant aux détenteurs de droits d’auteur le pouvoir sur la manière dont les plates-formes Internet distribuent leur contenu.

Les critiques disent toutefois que la loi est vague et mal conçue, et finira par restreindre la façon dont le contenu est partagé en ligne, ce qui freine l’innovation et la liberté d’expression.

La nouvelle police d’Internet: la “taxe sur les liens” et le “filtre de téléchargement”

Les clauses les plus controversées de la directive sur le droit d’auteur – l’article 11 ou la “taxe sur les liens” et l’article 13 ou le “filtre de téléchargement” – sont restées en grande partie intactes.

L’article 11 permet aux éditeurs de facturer des plateformes telles que Google Actualités lorsqu’ils affichent des extraits d’articles d’actualité, tandis que l’article 13 (renommé Article 17 dans la version la plus récente de la législation) donne à des sites tels que YouTube de nouvelles obligations pour empêcher les utilisateurs de télécharger du contenu protégé par le droit d’auteur.

Dans les deux cas, les critiques disent que ces lois bien intentionnées créeront des problèmes. L’article 13, par exemple, pourrait conduire à l’introduction de «filtres de téléchargement» qui analyseront tout le contenu de l’utilisateur avant son téléchargement sur des sites afin de supprimer les éléments protégés par le droit d’auteur. La loi n’appelle pas explicitement de tels filtres, mais les critiques disent que ce sera inévitable, car les sites cherchent à éviter les pénalités.

Les défenseurs de la directive disent que les allégations selon lesquelles l’article 13 «tue les mèmes» sont des exagérations et que la législation prévoit des protections pour la parodie. Mais les experts affirment que tous les filtres introduits seront probablement source d’erreurs et inefficaces.

Ils notent également que, compte tenu du coût de déploiement de cette technologie, la loi pourrait avoir l’effet inverse de son objectif: consolider accidentellement la domination des géants américains de la technologie sur les espaces en ligne.

Les effets possibles de la taxe sur les liens sont également difficiles à prévoir. La loi est principalement axée sur des services tels que Google Search et Google News, qui diffusent des extraits d’articles de presse. Google a déclaré que si les journaux choisissaient de facturer des licences pour ce matériel, ils seraient forcés de supprimer le contenu affiché dans Google News.

Les groupes du monde de la musique, de l’édition et du cinéma ont célébré l’adoption de la loi. “C’est un vote contre le vol de contenu”, a déclaré Xavier Bouckaert, président de l’European Magazine Media Association, dans un communiqué de presse. «Les éditeurs de toutes tailles et les autres créateurs auront désormais le droit de définir des termes et des conditions pour que les autres utilisateurs réutilisent leur contenu à des fins commerciales, ce qui n’est que juste et approprié.»

La plupart des gens craignent au contraire que leur expérience du Web ne soit affectée, car la législation aura également un impact considérable sur les hommes d’affaires.

«Quiconque développe une plate-forme avec des utilisateurs de l’UE impliquant le partage de liens ou de contenu est confronté à une grande incertitude», a déclaré Tal Niv, vice-président du droit et de la politique du dépositaire de codes GitHub, dans un communiqué. “Les conséquences sont notamment l’impossibilité de développer les fonctionnalités attendues par les internautes et l’obligation de mettre en oeuvre un filtrage automatisé très coûteux et inexact.”

Message de George Orwell

Cela va conduire à encore plus de chiffrement des réseaux… et c’est George Orwell (ou bientôt George TORwell!) qui adresse un important message à tous les utilisateurs des Internets !

Ajouter un lien avec le nombre d'articles et le total du panier WooCommerce photo

Mettre à jour la base de données de WooCommerce avec wp-cli

Il existe certaines situations dans lesquelles le plugin WooCommerce est mis à jour mais la mise à jour de la base de données du plugin échoue.

Cet échec de la mise à jour de la base de données est généralement causé par le délai d’attente de PHP, en particulier sur l’environnement d’hébergement partagé, puisque PHP ne dispose que de 60 secondes pour s’exécuter via une requête Web.

La non-concordance de version entre la version de la base de données WooCommerce et celle du plugin WooCommerce peut être à l’origine de problèmes.

Mise à jour de la base WooCommerce en ligne de commande

Pour résoudre ces problèmes, nous pouvons mettre à jour la base de données WooCommerce via la ligne de commande, en utilisant wp-cli.

1. Connectez-vous au serveur en SSH.

2. Naviguez jusqu’à la racine du site via SSH et exécutez la commande de mise à jour de WooCommerce:

wp wc update

Pour une grosse base de données, cela peut prendre un certain temps. Voici le résultat que vous devriez obtenir une fois le processus de mise à jour de la base de données terminé :

wp wc update

Calling update function: wc_update_350_db_version
Success: 2 updates complete. Database version is 3.5.0Code language: CSS (css)

3. Vérifiez dans WooCommerce > Status que la version de la base de données correspond bien à la version du plugin WooCommerce.

Et voilà votre base de données WooCommerce à jour!

Nouveau serveur : migration vers ORION photo

Nouveau serveur dédié : migration vers ORION

orion constellation hubble 1280x800
La nébuleuse d’Orion, prise par Hubble.

Vous lisez actuellement cet article depuis le nouveau serveur de SkyMinds, baptisé ORION.

De mail à ORION

Le serveur précédent a été le théâtre d’une multitude de tutoriels consacrés à la série Monter un serveur dédié de A à Z, tournait sous Debian (6, 7, 8, et 9) mais était un peu limité en termes de ressources (Intel Core2 Quad Q8300 @ 2.50GHz, 4 Go de RAM, 750 Go de disque). Tant qu’il n’y avait qu’un seul site à gérer, cela convenait mais avec près d’une dizaine de sites, on touchait les limites.

ORION est bien plus confortable : Intel Xeon W3530 @ 2.80GHz, 32 Go de RAM, 2 To de disque en RAID). De quoi pouvoir monter en charge tranquillement :)

Du changement dans notre stack

Qui dit nouveau serveur, dit refonte de la stack. Vu que nous partons d’un environnement vierge, autant partir du bon pied et utiliser toutes les dernières innovations. Le serveur précédent datait de 2012 et, même s’il tournait parfaitement, il a connu pas mal de mises à jour (parfois pas très stables).

J’ai donc décidé de changer d’OS pour ORION : même si j’adore travailler sous Debian, je me suis dit que j’allais tenter Ubuntu Server 18.04 LTS. Certains tutoriels ne sont pas exactement équivalents entre Debian et Ubuntu Server donc cela promet quelques nouveaux tutoriels !

Objectif performance

Le but du nouveau serveur est d’être un peu plus à l’aise au niveau des ressources, surtout si les sites lancés récemment prennent de l’ampleur. Cela donne également un peu plus d’oxygène au serveur de bases de données.

L’autre objectif est un objectif de performance : monter un serveur dédié de manière simple et efficace, en privilégiant la sécurité et la rapidité des sites hébergés.

Voilà, c’est tout pour la note de service. Les tutoriels sont en cours d’écriture, donc bientôt disponibles sur le site !

Désactiver les binary logs sous MySQL 8 photo

Désactiver les binary logs sous MySQL 8

mysql 8

J’ai récemment monté un nouveau serveur qui utilise MySQL 8 et après quelques jours d’utilisation, je me suis rendu compte que l’espace disque avait considérablement augmenté.

La cause ? Une multitude de fichiers logs binaires dans le répertoire d’exécution de MySQL 8 : il y en avait pour plus de 260 Go !

Les fichiers logs binaires enregistrent toutes les requêtes qui ont été effectuées par le serveur de bases de données. Inutile de dire qu’il est assez improbable que vous cherchiez à savoir quelles requêtes ont été lancées le mois dernier!

Désactivation des logs binaires

Sous MySQL 8, voici comment désactiver les logs binaires : éditez le fichier de configuration de MySQL:

nano /etc/mysql/mysql.conf.d/mysqld.cnf

et ajoutez cette ligne sous [mysqld] :

skip-log-bin

Vous pouvez également vous connecter au serveur MySQL en ligne de commande:

mysql -u root -p

et lancer la commande suivante dans l’invite de commande MySQL:

SET sql_log_bin = 0;
PURGE BINARY LOGS BEFORE '2019-03-31';Code language: JavaScript (javascript)

Relancez ensuite le serveur MySQL:

service mysql restart

Il ne vous reste plus qu’à vous rendre dans le dossier d’exécution de MySQL – /etc/mysql par défaut, sauf si vous l’avez modifié – et supprimer les fichiers binlog*.

Zelienople - The World Is A House On Fire photo

Zelienople – The World Is A House On Fire

Les chansons de Zelienople, basé à Chicago, hantent et s’écoulent librement, leurs paysages sonores cinématiques étant très développés grâce à l’utilisation d’enregistrements de terrain, de percussions de forme libre et de rebondissements structurels non conventionnels.

Leur approche a été qualifiée de «pop doom», avec son interprétation hantée et spacieuse d’Americana. Le trio composé de Mike Weis (percussions), Matt Christensen (chant, guitare) et Brian Harding (basse, saxophone) ont déjà amassé un auditoire dédié qui devrait grandir avec la sortie de leur album, The World Is A House On Fire.

La voix de Christensen résonne comme celle d’un moine dans un sanctuaire, avec des éclats monophoniques occasionnels renforcés par sa voix résonnante.

The World Is A House On Fire est un bon album planant et mélancolique.

The SEO Framework : résoudre l'erreur 404 du fichier sitemap.xml sous NginX photo

The SEO Framework : résoudre l’erreur 404 du fichier sitemap.xml sous NginX

Cela fait belle lurette que j’ai troqué Yoast SEO pour The SEO Framework, qui est bien mieux codé et plus performant.

Récemment, lors d’un changement de serveur, je me suis aperçu que l’un des sites avait son fichier sitemap.xml qui renvoyait une erreur 404 sous NginX.

Si cela vous arrive, deux solutions s’offrent à vous.

Vérification du server block

Commencez d’abord par vérifier que votre serveur block contient les bonnes directives pour gérer les règles de WordPress:

location / {
        # This is cool because no php is touched for static content.
        # include the "?$args" part so non-default permalinks doesn't break when using query string
        try_files $uri $uri/ /index.php?$args;
}Code language: PHP (php)

Sauvez votre server block puis relancez NginX. Il est possible que cela ne soit pas suffisant, si c’est le cas, nous allons ajouter une directive supplémentaire.

Une directive dédiée pour sitemap.xml

Ajoutons une directive supplémentaire à notre server block, qui permettra de rediriger vers la sitemap générée par The SEO Framework :

# sitemap.xml directive
# Matt Biscay
# https://www.skyminds.net/?p=30771
location = /sitemap.xml {
	rewrite ^/sitemap.xml$ "/?the_seo_framework_sitemap=xml" permanent;
}Code language: PHP (php)

Sauvez les changements et rechargez NginX – boom, la sitemap est de retour!