An Hour with Pink Floyd: KQED photo

An Hour with Pink Floyd: KQED

‘An Hour with Pink Floyd: KQED’ sees the band filmed performing live in April 1970 by San Francisco cable TV station KQED:

Taken from the version featured on 2016 ‘The Early Years 1965-1972’ box set, the film includes performances of Atom Heart Mother, Cymbaline, Grantchester Meadows, Green is the Colour and Careful with that Axe Eugene.

Appearing as part of the @YouTube Film Festival until May 17th.

Auto Draft photo 1

Mise à jour du serveur vers Ubuntu Focal Fossa (20.04 LTS)

Ce soir, on lance la mise à jour du serveur: nous passons notre version d’Ubuntu Server de Bionic Beaver (18.04 LTS) à Focal Fossa (20.04 LTS).

On commence par les précautions d’usage: faire ses sauvegardes et vérifier qu’elles sont bien intègres avant de commencer la mise à jour. C’est votre bouée en cas de soucis!

Étape 1: avoir l’installation d’Ubuntu actuelle à jour

Assurez-vous d’avoir une installation à jour avant de commencer:

apt update && apt dist-upgrade

On reboot ensuite pour appliquer les changements:

shutdown -r now

Étape 2: installation de screen et ouverture du port 1022 pour SSH

Comme nous allons lancer la mise à jour via un terminal SSH, il est possible que pour une raison ou un autre la connexion soit coupée. Cela arrive et cela peut être vraiment tendu à certaines étapes de la mise à jour (kernel anyone?).

Pour prévenir cela, on vérifie que screen est bien installé:

apt install screen

On peut lancer une session screen avec:

screen

et si la connexion SSH est interrompue lors de la mise à jour, on peut se raccrocher à la session de mise à jour avec la commande:

screen -Dr

Ensuite, au niveau du pare-feu, on ouvre le port 1022. C’est via ce port que l’on pourra reprendre la MAJ en cas de pépin. Suivant la configuration du serveur, on peut utiliser iptables:

iptables -I INPUT -p tcp --dport 1022 -j ACCEPT

ou alors ufw:

ufw allow 1022

Lire la suite

Solution pour l'erreur cURL error 7: Failed to connect to XXX port 443: Connection refused photo 1

Solution pour l’erreur cURL error 7: Failed to connect to XXX port 443: Connection refused

Sur un serveur hébergé en Chine continentale, j’ai eu la surprise de ne pas être en mesure de mettre à jour wp-cli:

wp cli update

Error: Failed to get url 'https://api.github.com/repos/wp-cli/wp-cli/releases?per_page=100': cURL error 7: Failed to connect to api.github.com port 443: Connection refused.Code language: JavaScript (javascript)

Visiblement, certaines adresses sont injoignables, notamment lorsqu’elles utilisent le port 443 (https).

Evidemment, on peut télécharger wp-cli manuellement et le réinstaller mais si vous souhaitez une solution plus rapide, voilà comment j’ai procédé.

Première solution: édition de /etc/hosts

1. On récupère l’adresse IP de l’adresse api.github.com:

curl --ipv4 -v https://api.github.com

Résultat: 13.250.94.254 port 443Code language: JavaScript (javascript)

2. On édite le fichier /etc/hosts du serveur:

nano /etc/hosts

3. On y ajoute l’adresse IP correspondante à api.github.com:

13.250.94.254 api.github.comCode language: CSS (css)

Et voilà, le téléchargement depuis github est de nouveau accessible.

Lire la suite

PHP: résoudre l'erreur "file_get_contents(): SSL operation failed with code 1" photo

PHP: résoudre l’erreur “file_get_contents(): SSL operation failed with code 1”

J’ai récemment joué avec l’API de YouTube pour pouvoir récupérer diverses informations sur les vidéos afin d’ajouter au site les données structurées idoines.

Il se trouve qu’en local, lorsque l’on utilise file_get_contents(), on peut obtenir une erreur de ce type lorsque le serveur n’est pas configuré avec le bundle de certificats OpenSSL:

Warning: file_get_contents(): SSL operation failed with code 1. OpenSSL Error messages: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed in ...php on line 2

Warning: file_get_contents(): Failed to enable crypto in ...php on line 2

Warning: file_get_contents(https://........f=json): failed to open stream: operation failed in ...php on line 2
Code language: JavaScript (javascript)

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

Méthode 1: configuration de PHP côté machine/serveur

1. Vérifiez qu’OpenSSL est bien installé sur votre machine (il devrait l’être sur le serveur!).

2. Ajoutez cette ligne à la configuration de PHP, dans votre php.ini:

openssl.cafile=/usr/local/etc/openssl/cert.pemCode language: JavaScript (javascript)

3. Redémarrez le service PHP.

Méthode 2 : une fonction qui utilise curl au lieu de file_get_contents()

Au lieu de m’embêter à configurer OpenSSL ou à toucher à PHP dans un conteneur docker (Local), il se trouve que l’on peut réécrire la fonction file_get_contents() avec une fonction maison qui utilise curl.

Voici la fonction en question:

/*
Custom CURL function that mimicks file_get_contents()
@returns false if no content is fetched
Matt Biscay (https://mattbiscay.com)
*/
function sky_curl_get_file_contents( $URL ){
	$c = curl_init();
	curl_setopt( $c, CURLOPT_RETURNTRANSFER, 1 );
	curl_setopt( $c, CURLOPT_URL, $URL );
	$contents = curl_exec( $c );
	curl_close( $c );
	if( $contents ) :
		return $contents;
	else:
		return false;
	endif;
}Code language: PHP (php)

La fonction retourne false si la requête échoue, ce qui est très utile pour éviter de faire des appels à des valeurs d’un tableau qui n’existe pas.

On peut alors réfléchir à un autre moyen de peupler les champs de données structurées (mais c’est un sujet à aborder une autre fois).

Redémarrer la machine virtuelle de Local by Flywheel photo

Local : résoudre les problèmes d’importation de la base de données

Aujourd’hui, on importe la base de données d’un site existant dans la nouvelle version de Local Lightning, estampillée 5.4.1.

D’habitude, je lance Adminer > Import, je sélectionne mon fichier de base de données et boom, la base est importée. Mais aujourd’hui, rien ne se passe comme prévu: Adminer mouline, mouline, perd la moitié du design de sa page et n’importe pas la base.

SSH à la rescousse

Je me dis qu’on aura peut-être plus de chance depuis la console SSH. Dans Local, faites un clic droit sur le site > Open Site Shell. Une fenêtre de terminal apparaît alors.

Utilisation de WP-CLI

On commence d’abord par la méthode wp-cli. On copie notre fichier adminer.sql sous /app/public et on lance la commande suivante:

wp db import ./adminer.sqlCode language: JavaScript (javascript)

Résultat:

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)Code language: JavaScript (javascript)

Cela commence bien. La version 5 de Local utilise MySQL 8 donc certaines choses ne sont peut-être pas tout à fait au point. Comme il n’y a pas de socket mysql dans /tmp/mysql.sock, nous allons manuellement spécifier notre socket MySQL dans notre commande. Local nous donne l’adresse du socket dans l’onglet Database:

wp db import ./adminer.sql --socket="/Users/matt/Library/Application Support/Local/run/rvrb6Ce-Z/mysql/mysqld.sock"

Résultat:
ERROR 1067 (42000) at line 23841 in file: './adminer.sql': Invalid default value for 'comment_date'
Code language: JavaScript (javascript)

La bonne nouvelle, c’est que l’on peut se connecter à la base de données MySQL. Mais tiens donc, nous sommes déjà tombés sur cette erreur Invalid default value for comment_date !

Configuration de MySQL

Pour régler le problème sous Local, la marche à suivre diffère un peu de ce que nous avions lancé sur notre serveur puisqu’il n’y a pas une mais deux variables de configuration de mysqld à modifier.

On se connecte au serveur mysql:

mysql -u root -proot

Commençons par voir ce que les variables sql_mode contiennent:

SELECT @@GLOBAL.sql_mode; SELECT @@SESSION.sql_mode; Code language: CSS (css)

Résultat:

+------------------------------------------------------------------------------------------+
| @@GLOBAL.sql_mode                                                                        |
+------------------------------------------------------------------------------------------+
| ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION |
+------------------------------------------------------------------------------------------+
1 row in set (0,00 sec)

+------------------------------------------------------------------------------------------+
| @@SESSION.sql_mode                                                                       |
+------------------------------------------------------------------------------------------+
| ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION |
+------------------------------------------------------------------------------------------+Code language: JavaScript (javascript)

Le problème est, comme la dernière fois, la présence de ces deux instructions: NO_ZERO_IN_DATE,NO_ZERO_DATE.

On enlève donc ces deux instructions de nos deux directives:

SET @@GLOBAL.sql_mode="ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION";
SET @@SESSION.sql_mode="ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION";Code language: CSS (css)

Voilà ce que nous obtenons au final:

+------------------------------------------------------------------------------------------+
| @@GLOBAL.sql_mode                                                                        |
+------------------------------------------------------------------------------------------+
| ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION |
+------------------------------------------------------------------------------------------+
1 row in set (0,00 sec)

+------------------------------------------------------------------------------------------+
| @@SESSION.sql_mode                                                                       |
+------------------------------------------------------------------------------------------+
| ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION |
+------------------------------------------------------------------------------------------+
1 row in set (0,00 sec)Code language: JavaScript (javascript)

On peut désormais importer notre fichier SQL:

mysql -u root -proot local < ./adminer.sql 

Hop l’import de la base de données se passe maintenant sans aucun problème.

David Gilmour - Live At Pompeii photo

David Gilmour – Live At Pompeii

45 ans après le “Live At Pompeii” de Pink Floyd dans le légendaire amphithéâtre romain, Davig Gilmour est revenu pour deux spectacles spectaculaires en juillet 2016, dans le cadre de sa tournée pour l’album Rattle That Lock.

Les performances étaient les tout premiers concerts de rock pour un public dans l’amphithéâtre romain en pierre, et, pendant deux nuits seulement, la foule de 2600 personnes se tenait exactement là où les gladiateurs auraient combattu au premier siècle de notre ère.

Magnifique.

Tash Sultana - Tiny Desk concert (NPR) photo

Tash Sultana – Tiny Desk concert (NPR)

Natasha Sultana, de son nom de scène Tash Sultana, nait le 15 juin 1995 à Melbourne et est un(e) auteure-compositrice-interprète et musicienne multi-instrumentriste Australienne, d’un père originaire de Malte et d’une mère australienne. À l’âge de trois ans, son grand-père lui offre sa première guitare.

Tash Sultana subit l’influence d’artistes néo-soul tels que Erykah Badu, D’Angelo, Lauryn Hill mais également rock comme Jimi Hendrix, Pink Floyd, Fleetwood Mac ou encore Led Zeppelin, ou Bob Marley et Amy Winehouse.

Sultana se produit en solo sur scène, pieds nus et enregistre ses instruments au fur et à mesure grâce aux pédales d’effets: c’est la technique du looping. Autodidacte, Sultana joue d’une vingtaine d’instruments dont la guitare (basse, électrique, folk), la mandoline, le piano, la trompette et le saxophone.

Voici Tash Sultana lors de l’un des Tiny Desk Concert organisé par NPR:

C’est très dub planant, vraiment à part.

Pink Floyd - PULSE concert photo

Pink Floyd – PULSE concert

Pendant cette période de confinement, Pink Floyd offre gratuitement des concerts complets pour les fans. pendant le confinement.

Jusqu’à récemment, le groupe diffusait des extraits de chansons individuelles sur YouTube, mais avec le Royaume-Uni confronté à trois semaines supplémentaires de confinement pendant la pandémie de Covid-19, et la plupart des autres pays du monde connaissant des restrictions à des degrés divers, le groupe a décidé de passer à des concerts complets.

Voici la version restaurée et rééditée des masters originaux en 2019 de Pulse, filmé live le 20 Octobre 1994 à l’Earls Court de Londres:

L’édition de Pulse d’hier soir est tirée du coffret Later Years, qui est sorti l’année dernière et qui a été réédité.

Enjoy!

Gravity Forms : activer l'anti-spam honeypot sur tous les formulaires photo

Gravity Forms : supprimer les entrées mais garder les fichiers uploadés sur le site

Gravity Forms garde en base de données toutes les entrées des formulaires. Sur un site qui génère énormément de demandes (formulaire de contact, demandes d’informations, formulaire de commande ou pré-commande…).

Cela signifie des milliers d’enregistrements dans la base de données, ce qui n’est pas toujours souhaitable, pour des raisons de stockage et de performance.

Supprimer les entrées des formulaires Gravity Forms

Si vous avez besoin de supprimer les entrées créées par Gravity Forms une fois que le message a été envoyé, vous pouvez utiliser cette fonction:

// Delete all entries from form ID  1.
add_action( 'gform_after_submission_1', 'sky_remove_form_entry' );
function sky_remove_form_entry( $entry ) {
    GFAPI::delete_entry( $entry['id'] );
}Code language: PHP (php)

Dans l’exemple ci-dessus, on ne supprime que les entrées du formulaire qui a l’ID 1. Si vous souhaitez supprimer toutes les entrées de tous les formulaires Gravity Forms d’un site, il suffit d’enlever le _1de la cible de l’action gform_after_submission:

// Delete all entries from all forms.
add_action( 'gform_after_submission', 'sky_remove_form_entry' );
function sky_remove_form_entry( $entry ) {
    GFAPI::delete_entry( $entry['id'] );
}Code language: PHP (php)

Garder les fichiers uploadés lors de la suppression des entrées

Attention: supprimer les entrées Gravity Forms revient également à supprimer les fichiers qui auront été uploadés via les formulaires. C’est tout à fait normal puisqu’ils font partie des champs du formulaire.

Pour garder les fichiers uploadés, même si les entrées associées sont supprimées, il faut utiliser le filtre gform_field_types_delete_files:

add_filter( 'gform_field_types_delete_files', '__return_empty_array' );Code language: JavaScript (javascript)

Supprimer les fichiers associés à un champ upload particulier

Si vous souhaitez supprimer tous les fichiers qui auront été uploadés via un champ upload particulier, il suffit de préciser ce champ dans le tableau $field_types avant de le passer à gform_field_types_delete_files:

add_filter( 'gform_field_types_delete_files', 'sky_delete_custom_upload_field' );
function sky_delete_custom_upload_field( $field_types ) {
    $field_types[] = 'my_custom_upload_field';
    return $field_types;
}Code language: PHP (php)

Dans cet exemple, notre champ upload s’appelle my_custom_upload_field.

Family in Death for a Salesman photo

Family in Death of a Salesman

  1. Death of a Salesman : an extended introduction
  2. Family in Death of a Salesman
  3. Death of a Salesman: Tragedy versus Social Drama
  4. Death of a Salesman: the play’s structure, a memory play

In an article entitled The Family in Modern Drama, Arthur Miller insisted that all “great plays” finally grapple with one central issue: “How may a man make of the outside world a home?”.

Making the outside world a home would imply being “well-liked”: managing to turn anonymous, business relations into close family ties – that is to say being able, like Dave Singleman, “to go… into twenty or thirty different cities, and pick up a phone, and be remembered and loved and helped by so many different people?” (p.63).

In Death of a Salesman, the dream of social success cannot be disentangled from the idyllic vision of society as a large, tightly-knit family.

Yet, there is every reason to believe that Dave Singleman, as his patronymic shows, is a bachelor, when the foundation of the much-vaunted American ideal remains the nuclear family: the nuclear family as an agent of socialization and as a stabilizing influence.

Precisely in Death of a Salesman spectators are given privileged access into the private sphere of a family and occasionally turned into voyeurs. It seems that far from offering a secure, reassuring nest the family also reverberates the tensions of society at large in the 1950s.

1. The Green World patriarchal clan

Willy, through his conversation with Ben (38-41) harks back to his infancy. The image of the father is mythologized by both sons – the elder Ben and the younger Willy – even if Father Loman deserted his wife and children to lead an adventurous life.

The mother is hardly ever referred to. She must nevertheless have had a hard life providing sustenance and comfort for her two sons. When Ben followed in his father’s footsteps by running off for adventure, Mother Loman still had Willy to look after.

Willy, who recalls sitting on “Mamma’s lap” (38), suffered from his father’s absence. The lack of paternal care resulted in his feeling “kind of temporary about (himself)” (40).

Mother Loman’s caring presence is trivialized: “fine specimen of a Lady, Mother” (35) and the “old girl” when reunion with the vanished father is Ben and Willy’s single purpose. Ben starts for Alaska hoping to find his father (37) and Willy elects a father figure through his total devotion to Dave Singleman, another salesman.

Willy has remained so obsessed with the myth of his Father that he entreats Ben to tell Biff and Happy about their grandfather, so they can learn “the kind of stock they spring from” (38). So, in a way, it is as if all the Loman men sprang directly from their father’s side and as if their mother had had no part to play in their birth.

An Edenic myth is implied which seems to preclude, or at least downplay woman’s role in the procreation process.

Lire la suite

Eddy B and Tim Gunter - Underdog photo

Eddy B and Tim Gunter – Underdog

A young nigga with a dollar and a dream
And these Nikes on my feet, tryna stay up out the streets
So I’m rhyming pulling 187s all on these beats
Stead of on the concrete
Cemeting my future while they were focused on what they chief
But shit, I’m like a chief, head honcho
Tell me that it’s impossible I’ll get it to you pronto
Been workin’ all these late nights and these early mornings like Alonzo
So one day they’ll be callin’ me great, just call me Gonzo
But, I’m never actin’ nor is anybody pulling strings
Everything I have came from sacrificing everything
I traded workin’ 9 to 5 for the minimum
For workin non-stop so my life be like a cinema screen
But in the end I wouldn’t have it any other way
Got on my knees and for this rap to work is what I prayed
And now it’s happening, crunchin’ numbers like captain
A serial (cereal) killer compelling listeners with this passion for words
Never actin, my verbs were truly fashioned to serve
Not only masses but curbs, not just the hood, but the burbs
Know you hear it everytime I grace the mic, then I give it to God
Feeling blinded by the lights, and it’s on!

Hook:

Let me see you put ’em up
Reach the sky, touch the stars up above
Cause it’s, one time for the underdog
One time for the underdog

You got the world on your team
Even if that ain’t what it seems
It’s one time for the underdog
One time for the underdog

A 20 year old dreamin’ of whippin’ Monte Carlo’s
And gold jewlery lookin’ like I cam from El Dorado
Pick up the pen and pad, stead of spittin gin and vag
I’m paintin’ pictures with my words, just call me young picasso
These haters only gas me up and then I mash the throttle
Binge drinkers think its safe to say should drop the bottle
Cause what I’m spittin’ is proof, and truth is hard to swallow
When rappers losin’ they heads, that’s word to sleepy hollow
Nowadays they tryna flex, Johnny Bravo
And I’ll be Rocky in the second fight against Apollo
Underdog, but you see, I won the war
Askin me if I can spit is askin’ me to raise the bar
I been in this place before, matter fact most of my life
They told me I would fail, die before I prove ’em right
Pennin’ verses on my lunch bag, now I’m doin shows
Lady luck blew me a kiss, now I’m a prince, never a toad
Bet your bottom, I’m the greatest, that’s on everything I own
And though it isn’t much, I want the world like Al Capone
I’m coming for the glory, this a sermon to the masses
The kid you shitted on is telling you to wipe his ass