Matt Biscay: développeur WordPress et WooCommerce pour SkyMinds
Calculer la durée totale des vidéos d'un dossier, bash, linux

Calculer la durée totale des vidéos d’un dossier

Dans le cadre d’une formation en ligne, j’ai cherché à connaître la durée totale des fichiers vidéos qui étaient contenus dans un dossier.

Il est toujours intéressant de donner le nombre d’heures de vidéos sur une fiche produit par exemple, pour que le client puisse avoir une idée avant d’acheter.

Pour ce faire, nous avons plusieurs options: ffmpeg d’une part ou alors mediainfo.

J’ai lancé un petit apt install factice sur le serveur : installer ffmpeg revient à installer 110 nouveaux paquets, soit 600 Mo. En comparaison, mediainfo ne requiert que 3 paquets, soit 2.3 Mo.

Nous utiliserons donc mediainfo pour nos tests.

Calculer la durée de chaque fichier

Voici comment calculer la durée de chaque fichier, en format lisible par tous:

 mediainfo --Output="General;%Duration/String%" *.mp4
38 min 6 s

Voici comment calculer la durée de chaque fichier, mais cette fois au format timecode (xx:xx:xx.xx) :

 mediainfo --Output="General;%Duration/String3%" *.mp4
00:38:06.12

Ces deux commandes nous donnent la durée de chaque fichier MP4 présent dans le répertoire.

Nous allons maintenant voir comment les additionner pour obtenir la durée totale des enregistrements du dossier.

Calculer la durée totale des fichiers d’un dossier

Nous allons utiliser la dernière commande, celle qui nous donne les durées au format timecode, et allons ajouter toutes ces durées pour obtenir la durée totale des enregistrements présents dans notre dossier.

Voici la commande:

mediainfo '--Output=Video;%Duration%\n' *.mp4 | awk '{ sum += $1 } END { secs=sum/1000; h=int(secs/3600);m=int((secs-h*3600)/60);s=int(secs-h*3600-m*60); printf("%02d:%02d:%02d\n",h,m,s) }'

Résultat:

21:03:48

Nous avons donc un peu plus de 21 heures d’enregistrements pour notre cours en ligne :)

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

Rendre la page panier WooCommerce réactive

Lors de mon dernier projet WooCommerce, j’ai remarqué que la page panier de WooCommerce n’était pas vraiment réactive sous Safari (iPhone, iOS) : le tableau ne s’empile pas comme il le devrait et toutes les colonnes sont comprimées. Les dernières colonnes sont hors du viewport.

Safari sous iOS (iPhone) semble être le seul concerné – je n’ai pas réussi à reproduire ce comportement sur FireFox, Chrome ou Opera.

Le site en question utilise Astra, qui est vraiment bien éprouvé, ainsi qu’Elementor comme constructeur de page.

Voici comment rendre le tableau du panier WooCommerce réactif, en utilisant quelques lignes de CSS.

Forcer la réactivité du panier WooCommerce

J’ai opté pour une solution propre, en CSS, en ne ciblant que les iPhones puisqu’ils sont les seuls concernés (Safari + résolution d’écran).

Voici donc le code utilisé pour rendre le panier WooCommerce réactif:

/*
Plugin Name: Sky WooCommerce Responsive Cart
Plugin URI: https://mattbiscay.com
Description: Make WooCommerce cart responsive
Version: 1.1
Author: Matt Biscay
Author URI: https://mattbiscay.com
*/

/* responsive cart */
@media only screen and ( max-width: 479px ) {
  
  .short-description, .product_meta, body.woocommerce div.product .woocommerce-tabs, body.woocommerce #content div.product .woocommerce-tabs { display: none; }
  body.woocommerce .images { float: none !important; width: auto !important; margin-bottom: 40px !important; clear: both !important; }
  
  table .product-thumbnail { display: none; }
  
  .woocommerce-page #content div.product form.cart .variations { margin-left: 0; }
  
  table.cart th, #content table.cart th, table.cart td, #content table.cart td, table.cart tr, #content table.cart tr, #content-area table tr, #content-area table td, #content-area table th { padding: .857em 0.287em; }
  
  .woocommerce .woocommerce .col2-set .col-1, .woocommerce-page .col2-set .col-1, .woocommerce .col2-set .col-2, .woocommerce-page .col2-set .col-2 { width: 100% !important; }
  .woocommerce .woocommerce form .form-row, .woocommerce-page form .form-row { width: auto !important; float: none !important; }
  
  #order_review .shop_table { margin-left: 0; }
  
  /* cart: tax on its own line */
  .includes_tax { display: block; }
  
}

/* cart weird bug on Safari: cart table is not collapsing */
/* this corrects the bug on iphones */

@media (max-width: 768px){
  .iphone .woocommerce table.shop_table_responsive tr,
  .iphone .woocommerce-page table.shop_table_responsive tr {
    display: flex;
    flex-direction: column;
    flex-basis: 100%;
    flex: 1;
  }
  
  .woocommerce table.shop_table_responsive tr td::before, .woocommerce-page table.shop_table_responsive tr td::before {
    content: attr(data-title) ' ';
    font-weight: 700;
    float: left;
  }
  
  p.no-shipping-options {
    clear: both;
    margin-top: 3rem;
  }
}

Lire la suite

Créer un enregistrement BIMI pour afficher votre logo dans les entêtes email de vos destinataires photo 1

Créer un enregistrement BIMI pour afficher votre logo dans vos emails clients et prospects

Les Brand Indicators for Message Identification (BIMI) – indicateurs de marque pour l’identification des messages en français – sont un moyen standardisé pour les entreprises d’utiliser leur logo comme indicateur visible pour aider les destinataires d’e-mails à reconnaître et à éviter les messages frauduleux.

BIMI s’appuie sur le protocole d’authentification de messagerie DMARC pour développer la confiance avec les clients actuels et potentiels.

Avantages de l’enregistrement BIMI

En publiant votre fiche BIMI et le logo associé dans le DNS, votre marque sera facilement reconnue et approuvée par les clients actuels et futurs.

Non seulement les clients actuels et potentiels sont convaincus que vos e-mails sont légitimes, mais ils gagnent également un niveau de confiance en voyant votre logo approuvé dans leur boîte de réception.

Chaque fois qu’un client reçoit un message de votre domaine en utilisant la norme BIMI, au moins trois impressions de marque uniques potentielles sont effectuées: liste de messages, adresse e-mail dans le message et dans le message lui-même.

Plus vite votre entreprise décide d’adopter le BIMI (lorsqu’il est disponible via votre fournisseur de messagerie sortante), plus votre marque sera reconnue.

Étape 1 : mettre en place SPF, Sender-ID, DKIM et DMARC (et HTTPS)

Habituellement, les logos sont automatiquement extraits de diverses sources et organisés par les fournisseurs de clients de messagerie. En conséquence, différents logos s’affichent en fonction du client de messagerie et de l’appareil. Avec BIMI, les marques contrôlent leurs logos officiels affichés, quelle que soit la taille de la marque.

Les symboles sont un moyen succinct et efficace de communiquer des informations sur votre entreprise. Un logo est un élément important de la marque de votre entreprise et a un impact significatif sur la perception du public d’une entreprise.

En fait, un logo est l’un des investissements de marque les plus importants qu’une entreprise puisse faire. Il attire l’attention, fait une première impression forte, est le fondement de votre identité de marque, de la sécurité, est mémorable, vous sépare de la concurrence, favorise la fidélité à la marque et est attendu par votre public.

La spécification BIMI s’appuie sur les normes d’authentification de messagerie existantes telles que Sender Policy Framework (SPF), DomainKeys Identified Mail (DKIM) et Domain-based Message Authentication, Reporting & Conformance (DMARC).

Les marques qui déploient correctement l’authentification des e-mails à l’aide de DMARC pourront tirer parti de BIMI. DMARC est une norme qui permet aux propriétaires de domaines (marques) de protéger leurs domaines en définissant des politiques d’authentification des e-mails.

DMARC fournit également des rapports qui aident à configurer l’authentification des e-mails à l’aide de SPF et DKIM sur toutes les sources.

Je vous conseille le tutoriel sur la mise en place de DMARC pour votre domaine, ainsi que celui sur l’authentification SPF, Sender-ID et DKIM pour tout paramétrer dans les règles de l’art.

Le domaine doit impérativement être servi en HTTPS.

Une fois toutes les sources valides identifiées et authentifiées, une politique DMARC restrictive (c’est-à-dire p=quarantine ou p=reject) peut être définie:

_dmarc IN TXT v=DMARC1; p=reject; rua=mailto:dmarc@example.com;

En utilisant cette stratégie, les propriétaires de domaine peuvent contrôler ce qu’il advient des messages non authentifiés (non approuvés), qu’ils finissent dans le spam ou qu’ils soient complètement rejetés par le fournisseur de messagerie destinataire.

DMARC aide les marques à se protéger contre divers types d’abus de domaine et d’attaques de phishing, mais courants.

En termes simples, vous souhaitez éventuellement avoir vos enregistrements DMARC avec une politique de quarantaine ou de rejet pour le domaine de votre marque, que vous implémentiez ou non BIMI.

Lire la suite

Créer un site staging pour WordPress sur un sous-domaine photo

Créer un site staging pour WordPress sur un sous-domaine

Le Centre de Kriya Yoga France n’avait pas de site staging, ce site de développement et de test qui permet de tester, développer ou mettre à jour de nouvelles extensions, sans affecter le site principal.

Une des extensions a eu besoin d’être débugguée par ses concepteurs mais pour des raisons de confidentialité, il nous est apparu intéressant et plus sécurisé de donner accès à un site de développement, fraîche copie du site original, pour le débuggage.

Si vous avez besoin de créer un site staging pour votre site WordPress et que votre hébergeur ne le propose pas, voici comment faire.

Étape 1 : créer un sous-domaine au niveau DNS

Nous choisissons la solution la plus simple: servir le site STAGING depuis un sous-domaine. Il suffit de créer un nouvel enregistrement DNS sous la forme:

staging IN A xxx.xxx.xxx.xxx

staging represente le sous-domaine et xxx.xxx.xxx.xxx représente l’adresse IPv4 du serveur.

Étape 2 : créer le server block sous NginX

Le domaine étant déjà actif, j’ai uniquement rajouté ce server block:

### STAGING ###
 server {
 listen              443 ssl http2;
 listen              [::]:443 ssl http2;
 server_name staging.kriyayoga.fr;
 root /home/www/kriyayoga/staging/public_html;
 set $root /home/www/kriyayoga/staging/public_html;
 index index.php index.htm index.html;
 error_log /var/log/nginx/kriyayoga_staging_error.log;
 #SSL
 ssl_certificate        /etc/nginx/ssl/kriyayoga.fr/fullchain.pem;
 ssl_certificate_key    /etc/nginx/ssl/kriyayoga.fr/privkey.pem;
 include snippets/mime-types.conf;
 #Exclusions
 include snippets/exclusions.conf;
 #Security
 include snippets/security.conf;
 #Static Content
 include snippets/static-files.conf;
 #Fastcgi cache rules
 include snippets/fastcgi-cache.conf;
 include snippets/limits.conf;
 include snippets/nginx-cloudflare.conf;
 #Gzip
 include snippets/gzip.conf;
 location / {
 try_files $uri $uri/ /index.php?$args;
 }
 location ~ .php$ {
 try_files $uri =404;
 include snippets/fastcgi-params.conf;
 fastcgi_pass unix:/run/php/php7.4-fpm.sock;
 #Skip cache based on rules in snippets/fastcgi-cache.conf.
 fastcgi_cache_bypass $skip_cache;
 fastcgi_no_cache $skip_cache;
 #Define memory zone for caching. Should match key_zone in fastcgi_cache_path above.
 fastcgi_cache kriyayoga;
 #Define caching time.
 fastcgi_cache_valid 60m;
 #increase timeouts
 fastcgi_read_timeout 6000;
 fastcgi_connect_timeout 6000;
 fastcgi_send_timeout 6000;
 proxy_read_timeout 6000;
 proxy_connect_timeout 6000;
 proxy_send_timeout 6000;
 send_timeout 6000;
 #these lines should be the ones to allow Cloudflare Flexible SSL 
 #to be used so the server does not need to decrypt SSL if you wish
 proxy_set_header X-Forwarded-Host $host;
 proxy_set_header X-Forwarded-Server $host;
 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
 proxy_set_header X-Forwarded-Proto https;
 proxy_set_header X-Real-IP $remote_addr;
 proxy_set_header X-NginX-Proxy true;
 }
 #Protect WooCommerce upload folder from being accessed directly.
 #You may want to delete this config if you are using "Redirect Only" method for downloadable products.
 #Place this config towards the end of "server" block in NginX configuration.
 location ~* /wp-content/uploads/woocommerce_uploads/ {
   if ( $upstream_http_x_accel_redirect = "" ) {
     return 403;
     }
     internal;
 }
 }

Testez la nouvelle configuration:

nginx -t

Puis redémarrez NginX:

service nginx reload

Note: il est important de noter que je n’ai pas besoin de créer de certificat SSL puisque mes certificats sont wildcard par défaut. Si ce n’est pas le cas chez vous, pensez à en générer pour votre sous-domaine.

Lire la suite

Grand Oral, bac, examen

Réflexions sur le Grand Oral du Bac

L’année 2021 a marqué l’avènement de la réforme Blanquer du lycée, avec pour la première fois la passation de l’épreuve du Grand Oral: les candidats ont deux questions à préparer qui concerne leurs deux spécialités (questions croisées ou non, au choix du candidat).

La préparation au Grand Oral

Pour les enseignants, cela a pris quasiment trois mois de préparation, de mars jusqu’à juin, pour que les élèves trouvent leur question problématisée, ainsi qu’un plan qui tienne la route.

J’ai noté qu’avec le contexte sanitaire très particulier de l’année scolaire ainsi que la très large part de contrôle continu continu (82%), les élèves avaient quasiment tous le bac d’office et le Grand Oral ne représentait alors qu’une variable d’ajustement de leur mention: soit la mention supérieure, soit la stagnation. Difficile dès lors de les motiver pour l’épreuve ou d’espérer qu’ils viennent s’inscrire aux oraux blancs.

L’épreuve du Grand Oral

J’ai cette année été invité comme enseignant spécialiste au jury du Grand Oral. Cela signifie que nous sommes deux enseignants: un enseignant spécialiste d’une discipline enseignée en spécialité de terminale et un autre enseignant lambda qui n’est pas spécialiste.

Le but est que le candidat puisse montrer ses connaissances au spécialiste, tout en vulgarisant suffisamment pour que le non-spécialiste puisse comprendre l’essence de l’exposé. Les deux notent l’éloquence et l’interaction de la présentation du candidat.

En pratique, mis à part les premiers candidats, tous les candidats d’un même jury peuvent connaître la question sur laquelle ils vont plancher puisque c’est forcément la question qui concerne l’enseignant spécialiste. Il est obligé de prendre la question qui correspond à sa spécialité. Dès lors, il y a peu de surprises pour les candidats.

Le cru 2021 a été très particulier car peu d’enseignants pouvaient vraiment dire à quoi allaient ressembler les prestations des candidats. L’épreuve est nouvelle, le nom grandiloquent et la grille d’évaluation assez opaque.

Personnellement, je m’attendais à quelque chose de grandiose, en rapport avec le nom. Il n’en est rien: ce sont juste des oraux, tels qu’on avait l’habitude d’en écouter autrefois, en section littéraire (L).

J’ai eu de très belles présentations, fouillées et structurées, bien argumentées et défendues, mais également des présentations faites à la va-vite, en 3 minutes, sans la moindre cohérence dans le discours, inspirées des anciennes notions du programme précédent (Mythes et Héros particulièrement).

Lire la suite

Nettoyer un site WordPress infecté par un script shell photo 1

Nettoyer un site WordPress infecté par un script shell

Il n’est pas rare de voir des sites WordPress infectés par des scripts shell, qui peuvent exploiter certaines failles du core WordPress, de plugins ou de thèmes.

Ces attaques de WordPress sont courantes et concernent les sites qui n’ont pas été protégés par un antivirus ou un plugin de sécurité comme iThemes Security.

Il peut donc arriver que certains malwares infestent votre site WordPress, de manière automatisée si certaines composantes (core, plugins, themes) ne sont pas mis à jour régulièrement.

La technique détaillée ci-dessous vous permet d’identifier et de supprimer ces fichiers dans vos dossiers WordPress.

Important: avant de commencer, faites une sauvegarde du site: fichiers et base de données.

Étape 1 : suppression des fichiers potentiellement infectés

Sur l’installation en question, ces fichiers n’appartiennent pas à WordPress ou sont infectés. Nous les supprimons à vue:

rm 1index.php index.php db.php del.php wikindex.php

Nous supprimons également les répertoires wp-admin et wp-includes de WordPress car souvent des fichiers malfaisants sont copiés dedans:

rm wp-admin -rf
rm wp-includes -rf

Étape 2 : réinstallation de WordPress

On réinstalle WordPress:

wp core download --force --skip-content --locale=fr_FR --allow-root

Lire la suite

The Handmaid's Tale: Chapter 41 analysis photo, Offred, June, Nick

The Handmaid’s Tale: Chapter 41 analysis

I WISH THIS story were different. I wish it were more civilized. I wish it showed me in a better light, if not happier, then at least more active, less hesitant, less distracted by trivia. I wish it had more shape. I wish it were about love, or about sudden realizations important to one’s life, or even about sunsets, birds, rainstorms, or snow.
Maybe it is about those things, in a sense; but in the meantime there is so much else getting in the way, so much whispering, so much speculation about others, so much gossip that cannot be verified, so many unsaid words, so much creeping about and secrecy. And there is so much time to be endured, time heavy as fried food or thick fog; and then all at once these red events, like explosions, on streets otherwise decorous and matronly and somnambulant.
I’m sorry there is so much pain in this story. I’m sorry it’s in fragments, like a body caught in crossfire or pulled apart by force. But there is nothing I can do to change it.
I’ve tried to put some of the good things in as well. Flowers, for instance, because where would we be without them?
Nevertheless it hurts me to tell it over, over again. Once was enough: wasn’t once enough for me at the time? But I keep on going with this sad and hungry and sordid, this limping and mutilated story, because after all I want you to hear it, as I will hear yours too if I ever get the chance, if I meet you or if you escape, in the future or in Heaven or in prison or underground, some other place. What they have in common is that they’re not here. By telling you anything at all I’m at least believing in you, I believe you’re there, I believe you into being. Because I’m telling you this story I will your existence. I tell, therefore you are.
So I will go on. So I will myself to go on. I am coming to a part you will not like at all, because in it I did not behave well, but I will try nonetheless
to leave nothing out. After all you’ve been through, you deserve whatever I have left, which is not much but includes the truth.

The Handmaid’s Tale, chapter 41.

This chapter is a turning point for Offred is no longer a victim but an active agent ready to give an extraordinary account of her affair with Nick and the salvaging afterward.

She will try to fulfill her quest or relationships and reciprocity through the experience with Nick and then honesty to her imaginary reader, promising him/her to tell the truth.

Dismemberment and fragmentation

Fragmentation annoys her and weighs heavily on her: she is a trapped mind wandering endlessly in a maze. The plotline constantly jumps about, each paragraph is unrelated to the previous and next one.

Fragmentation positions Offred as a victim of Gilead: the fragmented quality of her writing becomes a graphic representation of Gilead’s influence on the narrator’s psychological balance.

She is also a victim in the process of story-telling for she appears unable to control what she tells. This idea is reinforced by another quote: “it isn’t a story I’m telling”, underlining that her mission is not to make things up and to beautify reality but to render things as they truly are.

Her mission is to get a message across, it has a didactic purpose: “after all I want you to hear it”.

“I’m sorry that it’s in fragments, like a body caught in crossfire and pulled apart by force”

  • there is a parallel between the body and the text
  • the fragmented text represents her own fragmented body

The text becomes less fragmented as she manages to write about her affair with Nick (“write her body”).

Besides, both tale and body are dismembered for both were violated and maimed. The body is often raped by the commander in the same way as Offred’s tale is said to have been raped or maimed by the two professors who have supposedly reorganized it.

Gradually, the narrator evolves from a denunciation of fragmentation to a search for unity and the confirmation that she exists.

Lire la suite

The Handmaid's Tale: Chapter 25 analysis, red and white tulips in a garden

The Handmaid’s Tale: Chapter 25 analysis

That was in May. Spring has now been undergone. The tulips have had their moment and are done, shedding their petals one by one, like teeth. One day I came upon Serena Joy, kneeling on a cushion in the garden, her cane beside her on the grass. She was snipping off the seed pods with a pair of shears. I watched her sideways as I went past, with my basket of oranges and lamb chops. She was aiming, positioning the blades of the shears, then cutting with a convulsive jerk of the hands. Was it the arthritis, creeping up? Or some blitzkrieg, some kamikaze, committed on the swelling genitalia of the flowers? The fruiting body. To cut off the seed pods is supposed to make the bulb store energy.
Saint Serena, on her knees, doing penance.
I often amused myself this way, with small mean-minded bitter jokes about her; but not for long. It doesn’t do to linger, watching Serena Joy, from behind.
What I coveted was the shears.

Well. Then we had the irises, rising beautiful and cool on their tall stalks, like blown glass, like pastel water momentarily frozen in a splash, light blue, light mauve, and the darker ones, velvet and purple, black cat’s-ears in the sun, indigo shadow, and the bleeding hearts, so female in shape it was a surprise they’d not long since been rooted out. There is something subversive about this garden of Serena’s, a sense of buried things bursting upwards, wordlessly, into the light, as if to point, to say: Whatever is silenced will clamour to be heard, though silently. A Tennyson garden, heavy with scent, languid; the return of the word swoon. Light pours down upon it from the sun, true, but also heat rises, from the flowers themselves, you can feel it: like holding your hand an inch above an arm, a shoulder. It breathes, in the warmth, breathing itself in. To walk through it in these days, of peonies, of pinks and carnations, makes my head swim.

The willow is in full plumage and is no help, with its insinuating whispers. Rendezvous, it says, terraces; the sibilants run up my spine, a shiver as if in fever. The summer dress rustles against the flesh of my thighs, the grass grows underfoot, at the edges of my eyes there are movements, in the branches; feathers, flittings, grace notes, tree into bird, metamorphosis run wild. Goddesses are possible now and the air suffuses with desire. Even the bricks of the house are softening, becoming tactile; if I leaned against them they’d be warm and yielding. It’s amazing what denial can do. Did the sight of my ankle make him lightheaded, faint, at the checkpoint yesterday, when I dropped my pass and let him pick it up for me? No handkerchief, no fan, I use what’s handy.

Winter is not so dangerous. I need hardness, cold, rigidity; not this heaviness, as if I’m a melon on a stem, this liquid ripeness.

The Handmaid’s Tale, chapter 25.

The Garden of (Serena) Joy

Abundance and life

Spring is the time of birth of nature. Abundance is conveyed by the number of adjectives. The narrator drowns in this garden – “makes my head swim” – and light seems to come from everywhere.

The passing of time is never recorded precisely: ellipses of several days/weeks. Chronology is not always respected, through the use of analepses and prolepses.

The passing of time is marked by seasons, the natural time and flora.

The garden as a fruiting body

The environment becomes consistent: the garden is like a body. The importance of softness is emphasized by the alliteration in [s].

The thread of the present is marked by the changing flora and the narrator’s gradual metamorphosis is modeled on that of Nature’s.

Serena as the disturbing element

Serena is seen as the disturbing element in this Garden of Eden.

Birth of the narrator as a human being, conscious of herself

Presence of feminity, necessary to the birth process

Feminity is needed for the birth and the whole garden is seen as a fruiting body.

Lyricism opposes the sense of osmosis felt by the “pathetic fallacy”: when natural elements are attributed with human attitudes. The garden shows the image of a natural world, which is everything Gilead has lost.

Pathetic fallacy is a literary technique that corresponds to a personification with natural elements.

Thanks to Offred’s heightened literary imagination, she can respond to the beauty of the garden and see the poetics behind the natural: the trees are seen as “birds in full plumage”.

Lire la suite

Serveur dédié: gérez comptes et alias email avec PostfixAdmin photo

Serveur dédié: gérez comptes et alias email avec PostfixAdmin

Si vous possédez et gérez votre propre serveur email, il peut être très intéressant de proposer des comptes emails et des alias pour vos utilisateurs.

J’ai écrit il y a quelques années un tutoriel qui faisait cela à la main avec une base SQL et des domaines virtuels mais il y a aujourd’hui beaucoup plus simple avec PostfixAdmin.

PostfixAdmin

PostfixAdmin est une interface web open-source qui permet de gérer des comptes mails, des domaines et des alias sur un serveur mail Postfix.

il s’intègre avec

  • Postfix
  • un server IMAP/POP3 comme Dovecot ou Courier
  • une base de données (sqlite, mysql, postgresql)
  • Fetchmail (optionnel)

Il est très utile pour créer des alias à la volée ou des comptes mail rapidement.

Création du sous-domaine

Je trouve cela plus simple de créer un sous-domaine pour ce type d’application. Dans votre gestionnaire DNS, il suffit d’ajouter un enregistrement de type A:

XXXXX.EXAMPLE.COM IN A xxx.xxxx.xxx.xxx

XXXXX est votre sous-domaine sur EXAMPLE.COM et xxx.xxx.xxx.xxx l’adresse IPv4 de votre serveur.

Création de la base de données

Nous utilisons MySQL/MariaDB pour postfix donc on s’identifie sur la console mysql :

mysql -u root -p 

[MOT DE PASSE ROOT]

Et on lance:

CREATE DATABASE postfix; 
CREATE USER 'mymailadmin'@'localhost' IDENTIFIED WITH mysql_native_password BY '1nyXI7Y)$spmslgz4HhdE4Lc_vm&)Gh!MsZFf64645fek'; 
GRANT ALL PRIVILEGES ON postfix.* TO 'mymailadmin'@'localhost'; 
FLUSH PRIVILEGES; EXIT;

Nous avons donc un nouvel utilisateur et une nouvelle base de données, spécifiques pour PostfixAdmin.

Configuration NginX pour PostfixAdmin

On crée un nouveau server block spécifique à PostfixAdmin:

nano /etc/nginx/sites-available/postfixadmin.conf

Lire la suite

Installation de Nextcloud: votre propre service de cloud chez vous photo 1

Nextcloud: mise en place du cron et des alertes emails

Mise en place du cron

Sur votre instance Nextcloud, il est important de mettre en place un cron qui va permettre de lancer les tâches de maintenance à intervalles réguliers.

Dans Paramètres > Administration > Paramètres de base, sélectionnez l’option Cron pour les tâches de fond:

nextcloud cron 1280x746

Ensuite, créez un fichier pour l’utilisateur www-data depuis le terminal:

crontab -u www-data -e

et à la fin du fichier on ajoute une tâche qui va se lancer toutes les 5 minutes:

*/5  *  *  *  * php -f /home/www/nextcloud/cron.php

Pensez à changer le chemin pour celui de votre installation Nextcloud.

Et redémarrez le service cron pour appliquer les changements:

service cron restart

Notification automatique des nouvelles versions

Maintenant que le cron est en place, nous allons pouvoir planifier une tâche qui vérifiera chaque semaine s’il existe une nouvelle version de Nextcloud.

Cela peut sembler fou mais Nextcloud ne vous prévient pas lorsque de nouvelles mises à jour sont disponibles et il faut donc le mettre en place soi-même.

Nous ouvrons donc le fichier crontab pour notre utilsateur www-data :

crontab -u www-data -e

et nous ajoutons cette ligne, qui permet la vérification et notification des nouvelles versions par email, tous les vendredis à 19h:

0 19 * * 5 php /home/www/nextcloud/occ update:check # nextcloud update check, at 19:00 every Friday

Pensez à changer le chemin pour celui de votre installation Nextcloud.

Et redémarrez le service cron pour appliquer les changements:

service cron restart

Mise en place des alertes par email

Nextcloud est capable de vous alerter pour les mises à jour de sécurité ainsi que la gestion des mots de passe perdu pour les comptes utilisateurs mais encore faut-il qu’il soit configuré pour utiliser votre serveur mail correctement. Par défaut, rien n’est configuré.

Lire la suite

Grand Oral, bac, méthode, conseils

Conseils pour bien réussir le Grand Oral du Bac

Comment choisir vos deux questions ?

Pour votre épreuve du grand oral, vous devez en effet choisir et préparer deux questions portant sur les programmes de vos spécialités. Vous pouvez par exemple prendre une question pour chaque spécialité, ou bien choisir des questions qui couvrent les deux disciplines.

Quelques conseils pour choisir une question pertinente :

  • Prenez un sujet qui vous intéresse, sur lequel vous avez envie de réfléchir, de faire des recherches pour le grand oral. Par exemple, un thème que vous aurez envie d’approfondir tout au long de l’année.
  • Choisissez un sujet riche mais qui sera simple à problématiser, c’est-à-dire une thématique sur laquelle vous pourrez facilement trouver des documents, des supports pour vos recherches mais qui implique une problématique claire et pas trop large.
  • Enfin, prenez une question en cohérence avec votre projet d’études.

Remarque : n’oubliez pas que vos questions pour le grand oral devront être validées par vos professeurs, alors n’hésitez pas à leur demander conseil en cas de doute.

L’épreuve du Grand Oral

► La préparation (20 min)

Le jury choisit une des deux questions que vous avez préparées.

Les 20 minutes de préparation avant l’oral vous permettent de vous concentrer sur le sujet choisi. Au brouillon (que vous ne conserverez pas pendant l’oral) ou oralement si les conditions le permettent :

  • récitez les premières phrases de votre exposé, pour vous rassurer ;
  • restituez aussi votre plan ;
  • préparez éventuellement la production graphique que vous voulez présenter, sur le support fourni par le jury.

► La présentation (5 min)

  • Au début de la présentation, expliquez pourquoi vous avez choisi de préparer cette question, puis présentez votre exposé.
  • L’exposé se fait sans notes et en position debout.
  • Surveillez l’heure : ne dépassez pas 5 minutes !

► L’entretien sur votre présentation (10 min)

  • Le jury vous interroge ensuite sur votre présentation pour vous amener à préciser et à approfondir votre pensée, et vous posera des questions sur votre présentation.
  • Il pourra élargir les questions à tout le programme du cycle terminal de ses enseignements de spécialité.

Ce temps d’échange permet surtout de mettre en valeur vos connaissances liées au programme des spécialités suivies en première et en terminale, et vos capacités argumentatives.

► L’échange sur votre projet d’orientation (5 min)

  • Vous devrez montrer en quoi la question traitée éclaire votre projet de poursuite d’études, ou votre projet professionnel.
  • Insistez sur les étapes de la maturation de votre projet (rencontres, engagements, stages, mobilité internationale, intérêt pour les enseignements communs, choix de ses spécialités, etc.) et la manière dont vous souhaitez le mener après le baccalauréat.
Cloudflare, logo, banner

Résoudre l’erreur “HTTP/2 stream 0 was not closed cleanly: PROTOCOL_ERROR”

Le serveur héberge plusieurs sites et l’un d’entre eux, Utopique, retournait l’erreur curl: (92) HTTP/2 stream 0 was not closed cleanly: PROTOCOL_ERROR (err 1) lorsqu’on le visitait avec Chrome mais fonctionnait sans souci avec Firefox.

Le plus drôle dans l’histoire (enfin drôle, j’ai passé deux jours à éplucher mes server blocks, les logs et la configuration SSL), c’est que ce site utilise le même modèle de server blocks que les autres. Je soupçonnais principalement la configuration NginX alors qu’en fait, elle n’y était pour rien!

Le problème se situe en fait au niveau de Cloudflare, et apparaît notamment avec le réglage suivant: Caching > Configuration > Browser Cache TTL > Respect Existing Headers.

Pour résoudre le problème, il faut choisir un autre réglage que “Respect Existing Headers”.

On creuse un peu à l’aide de curl pour comprendre ce qu’il se passe:

curl -vvv -I https://utopique.net --http2

Voici le résultat de la commande:

 Trying 2606:4700:3036::ac43:dc02:443…
 TCP_NODELAY set
 Connected to utopique.net (2606:4700:3036::ac43:dc02) port 443 (#0)
 ALPN, offering h2
 ALPN, offering http/1.1
 successfully set certificate verify locations:
 CAfile: /etc/ssl/certs/ca-certificates.crt
 CApath: /etc/ssl/certs
 TLSv1.3 (OUT), TLS handshake, Client hello (1):
 TLSv1.3 (IN), TLS handshake, Server hello (2):
 TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8):
 TLSv1.3 (IN), TLS handshake, Certificate (11):
 TLSv1.3 (IN), TLS handshake, CERT verify (15):
 TLSv1.3 (IN), TLS handshake, Finished (20):
 TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1):
 TLSv1.3 (OUT), TLS handshake, Finished (20):
 SSL connection using TLSv1.3 / TLS_AES_256_GCM_SHA384
 ALPN, server accepted to use h2
 Server certificate:
 subject: C=US; ST=CA; L=San Francisco; O=Cloudflare, Inc.; CN=sni.cloudflaressl.com
 start date: Jul 10 00:00:00 2020 GMT
 expire date: Jul 10 12:00:00 2021 GMT
 subjectAltName: host "utopique.net" matched cert's "utopique.net"
 issuer: C=US; O=Cloudflare, Inc.; CN=Cloudflare Inc ECC CA-3
 SSL certificate verify ok.
 Using HTTP2, server supports multi-use
 Connection state changed (HTTP/2 confirmed)
 Copying HTTP/2 data in stream buffer to connection buffer after upgrade: len=0
 Using Stream ID: 1 (easy handle 0x564540aecc80) 
   HEAD / HTTP/2
   Host: utopique.net
   user-agent: curl/7.68.0
   accept: /
      TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
   TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
   old SSL session ID is stale, removing
   Connection state changed (MAX_CONCURRENT_STREAMS == 256)!
   http2 error: Invalid HTTP header field was received: frame type: 1, stream: 1, name: [access-control-allow-headers "origin, x-requested-with, content-type, accept"], value: []
   HTTP/2 stream 0 was not closed cleanly: PROTOCOL_ERROR (err 1)
   stopped the pause stream!
   Connection #0 to host utopique.net left intact
   curl: (92) HTTP/2 stream 0 was not closed cleanly: PROTOCOL_ERROR (err 1)    

Lire la suite