#20213

What are the differences in die() and exit() in PHP? - Stack Overflow

Au niveau de PHP, aucune différence.

Au niveau des requêtes client/serveur, par contre :

// die():
HTTP/1.1 304 Not Modified 
Connection: close
// exit():
HTTP/1.1 304 Not Modified 
Connection: Keep-Alive 
Keep-Alive: timeout=5, max=100

die() ferme la connexion.
exit() ne ferme pas la connexion.

https://stackoverflow.com/questions/1795025/what-are-the-differences-in-die-and-exit-in-php

#20189

Note : astuce Free Mobile (erreur 38 - message non envoyé)

Avec Free Mobile, je rencontrais des difficultés pour envoyer des SMS depuis la France sur des numéros étrangers (néerlandais en l’occurrence).

Le SMS ne partait pas : il y avait juste un bref popup « erreur 38 ».

En fait j’avais activé l’option « forfait bloqué » dans mon espace client Free Mobile.
Ceci bloquait toute forme d’action hors-forfait et entraînant une surconsommation (donc les SMS vers l’étranger).

En désactivant l’option, les SMS partent correctement (et seront facturés). Cela a pris environ 5 minutes pour s’activer.

https://lehollandaisvolant.net/?mode=links&id=20210701183150

#20156

Vitesse de la lumière — Wikipédia

Petite astuce mnémotechnique, que je ne connaissais pas :

La constante lumineuse restera désormais là, dans votre cervelle

« La (2) constante (9) lumineuse (9) restera (7) désormais (9) là (2) , dans (4) votre (5) cervelle (8) »

Soit 299 792 458 m/s.

Et pour simplifier encore plus, cela correspond à peur de choses près à 1 milliard de km/h. (1 079 252 849 km/h).

https://fr.wikipedia.org/wiki/Vitesse_de_la_lumière

#20127

Mon TOP des outils de compression d’images – Korben

Quelques outils à garder sous le coude.

Perso c’est GIMP, avec la postérisation (pour les PNG) ou la lissage avec le plugin GMIC / smooth-anisotropic (pour les JPG).

Ensuite je balance un coup de "optipng" ou "jpegoptim" via un clic-droit sur le fichier et un script local.

Pour les images sur https://couleur-science.eu/ , j’essaye de toujours avoir des images d’illustration de moins de 100 ko. Les images sont un peu lisses, mais à la qualité tout à fait correcte, et on ne voit pas du tout qu’elles sont compressées à mort (parfois je descend jusqu’à 30 % de qualité jpeg, mais ça ne se voit pas ^^).

https://korben.info/top-outils-compression-images.html

#20126

20.04 - VLC is still running even I closed it already. How to I close it? - Ask Ubuntu

J’avais ce problème sous Linux Mint où VLC ne voulait pas se fermer totalement une fois un média fini. Ce n’était pas systématique, mais je devais alors utiliser un kill -9.

Cette astuce semble marcher pour le moment :

setting Video Output to 'XVideo output (XCB)' also works

VLC → Outils → préférences → préférences avancées → chercher "module de sortie vidéo".
Trouver le paramètre intitulé spécifiquement « paramètre généraux de modules de sortie vidéo » puis « module de sortie vidéo » et mettre « Sortie vidéo “Xvideo (XCB)” ».
Enregistrer, puis relancer VLC

https://askubuntu.com/questions/1250477/vlc-is-still-running-even-i-closed-it-already-how-to-i-close-it/1307248#1307248

#20114

Conditional HTTP GET: The fastest requests need no response body | Ilija Eftimov ⚡️

Tiens, une petite astuce pour des requêtes (AJAX par exemple) plus rapides : utiliser les en-têtes, les etags et les codes HTTP plutôt qu’une réponse dans le corps de la réponse.

Perso j’utilise des réponses à base de code HTTP, mais je n’avais pas pensé aux etags.

https://ieftimov.com/post/conditional-http-get-fastest-requests-need-no-response-body/

#20063

How to allow a restricted port? | Firefox Support Forum | Mozilla Support

Je veux acceder à un serveur Web sur un autre PC via son IP avec un port bidon (42). Firefox me l’interdit, Vivaldi aussi.

Dans Fx voilà comment l’autoriser.

About:config > (string) network.security.ports.banned.override > 42

(ça va autoriser ce port, qu’il considère comme chelou ; pour en mettre plusieurs, séparez-les par des virgules)

https://support.mozilla.org/en-US/questions/1083282

#20002

Opting your Website out of Google's FLoC Network - Paramdeo Singh

Pour dire « non » au Floc de Chrome, il faut maintenant optout. Ça se fait au niveau de la configuration sur serveur ou du site.

En pratique, il faut que le serveur envoie une en-tête au client :

Permissions-Policy: interest-cohort=()

Pour Apache et le .htaccess, il s’agit de mettre ça dedans :

<IfModule mod_headers.c>
  Header always set Permissions-Policy: interest-cohort=()
</IfModule>

ÉDIT : Baronsed me rappelle à juste titre que la prise en compte de ce paramètre est au bon vouloir du navigateur. Google peut donc très bien l’ignorer.
Pire, ils pourraient aussi choisir de « punir » les sites qui mettent ça en plombant leur classement.

Quand on sait que Google refuse désormais dans Google News les sites que n’utilisent pas AMP, je pense que c’est effecitvement ce qui va se produire.

Pour ma part, rien à foutre, je me fiche de Google.
Si ce n’est pas votre cas, renseignez-vous bien avant pour savoir quoi faire.

https://paramdeo.com/blog/opting-your-website-out-of-googles-floc-network

#20001

How to Improve CSS Performance | Calibre

TL;DR :
– osef des sélecteurs et du contenu du CSS. Les navigateurs sont rapides pour ça.
– bossez plutôt sur la taille du CSS à charger et sur la façon dont il se charge (async, preload, nombre de fichiers CSS…)

https://calibreapp.com/blog/css-performance

#19963

[astuce] Firefox et le about:newtab en sombre

Dans firefox, le thème par défaut est celui qui s’adapte le mieux au thème GTK du système (sous Linux Mint Mate).

Le thème sombre du système se répercute bien sur les onglets et le chrome, mais pas la page d’un onglet vierge, qui est alors clair.
Je pourrais utiliser le thème sombre de Firefox, mais comme j’ai dit, ce dernier n’est pas intégré correctement avec le thème GTK.

Ici, une astuce qui prend le CSS du nouvel onglet du thème Firefox sombre pour l’utiliser dans le thème Firefox par défaut.

Dans le dossier .profile de Firefox, allez dans le dossier chrome, et faites-y un fichier userContent.css.

Copiez-y ceci :

@-moz-document url(about:newtab) {
	body {
		--newtab-background-color: rgba(42, 42, 46, 1)!important;
		--newtab-text-primary-color: rgba(249, 249, 250, 1)!important;
		--newtab-border-primary-color: rgba(249, 249, 250, 0.8)!important;
		--newtab-border-secondary-color: rgba(249, 249, 250, 0.1)!important;
		--newtab-button-primary-color: #0060DF!important;
		--newtab-button-secondary-color: #38383D!important;
		--newtab-element-active-color: rgba(249, 249, 250, 0.2)!important;
		--newtab-element-hover-color: rgba(249, 249, 250, 0.1)!important;
		--newtab-icon-primary-color: rgba(249, 249, 250, 0.8)!important;
		--newtab-icon-secondary-color: rgba(249, 249, 250, 0.4)!important;
		--newtab-icon-tertiary-color: rgba(249, 249, 250, 0.4)!important;
		--newtab-inner-box-shadow-color: rgba(249, 249, 250, 0.2)!important;
		--newtab-inner-box-shadow-color-nte: rgba(21, 20, 26, 0.5)!important;
		--newtab-tile-shadow-secondary: rgba(21, 20, 26, 0.75)!important;
		--newtab-link-primary-color: #45A1FF!important;
		--newtab-link-secondary-color: #50BCB6!important;
		--newtab-text-conditional-color: #F9F9FA!important;
		--newtab-text-secondary-color: rgba(249, 249, 250, 0.8)!important;
		--newtab-textbox-background-color: #38383D!important;
		--newtab-textbox-border: rgba(249, 249, 250, 0.2)!important;
		--newtab-textbox-focus-color: #45A1FF!important;
		--newtab-textbox-focus-boxshadow: 0 0 0 1px #45A1FF, 0 0 0 4px rgba(69, 161, 255, 0.3)!important;
		--newtab-background-button-color: rgba(80, 80, 80, 0.5)!important;
		--newtab-background-button-text-color: #CDCDD4!important;
		--newtab-background-button-hover-color: rgba(114, 114, 114, 0.5)!important;
		--newtab-background-button-active-color: rgba(173, 173, 173, 0.5)!important;
		--newtab-feed-button-background: #38383D!important;
		--newtab-feed-button-text: #F9F9FA!important;
		--newtab-feed-button-background-faded: rgba(56, 56, 61, 0.6)!important;
		--newtab-feed-button-text-faded: rgba(249, 249, 250, 0)!important;
		--newtab-feed-button-spinner: #D7D7DB!important;
		--newtab-contextmenu-background-color: #4A4A4F!important;
		--newtab-contextmenu-button-color: #2A2A2E!important;
		--newtab-modal-color: #2A2A2E!important;
		--newtab-overlay-color: rgba(12, 12, 13, 0.8)!important;
		--newtab-section-header-text-color: rgba(249, 249, 250, 0.8)!important;
		--newtab-section-navigation-text-color: rgba(249, 249, 250, 0.8)!important;
		--newtab-section-active-contextmenu-color: #FFF!important;
		--newtab-search-border-color: rgba(249, 249, 250, 0.2)!important;
		--newtab-search-dropdown-color: #38383D!important;
		--newtab-search-dropdown-header-color: #4A4A4F!important;
		--newtab-search-header-background-color: rgba(42, 42, 46, 0.95)!important;
		--newtab-search-icon-color: rgba(249, 249, 250, 0.6)!important;
		--newtab-search-wordmark-color: #FFF!important;
		--newtab-topsites-background-color: #38383D!important;
		--newtab-topsites-icon-shadow: none!important;
		--newtab-topsites-label-color: rgba(249, 249, 250, 0.8)!important;
		--newtab-topsites-outer-card-hover: rgba(180, 180, 180, 0.1)!important;
		--newtab-topsites-context-menu-hover: rgba(180, 180, 180, 0.1)!important;
		--newtab-card-active-outline-color: #4A4A4F!important;
		--newtab-card-background-color: #38383D!important;
		--newtab-card-hairline-color: rgba(249, 249, 250, 0.1)!important;
		--newtab-card-placeholder-color: #4A4A4F!important;
		--newtab-card-shadow: 0 1px 8px 0 rgba(12, 12, 13, 0.2)!important;
		--newtab-snippets-background-color: #38383D!important;
		--newtab-snippets-hairline-color: rgba(255, 255, 255, 0.1)!important;
		--newtab-background-primary-text-color: #CDCDD4!important;
		--newtab-focus-outline: rgba(80, 145, 241, 0.5)!important;
		--newtab-focus-border: #B5D3FF!important;
		--newtab-focus-border-selected: #B5D3FF!important;
		--newtab-primary-action-background: #4484E2!important;
		--newtab-primary-action-background-off: #6A6A6F!important;
		--newtab-seperator-line-color: #53515F!important;
		--customize-menu-primary-text-color: #E0E0E6!important;
		--customize-menu-check-fill: #E0E0E6!important;
		--customize-menu-background: #38383D!important;
		--customize-menu-secondary-action-background: #515156!important;
		--customize-menu-secondary-action-background-hover: #606065!important;
		--customize-menu-secondary-action-background-active: #6F6F74!important;
		--customize-menu-seperator-line-color: #53515F!important;
		--customize-menu-first-shadow: rgba(21, 20, 26, 0.5)!important;
		--customize-menu-second-shadow: rgba(21, 20, 26, 0.75)!important;
		--customize-menu-primary-action-text: #E0E0E6!important;
		--customize-menu-line-color: #B9B7CC!important;
		--newtab-search-first-shadow: rgba(21, 20, 26, 0.5)!important;
		--newtab-search-second-shadow: rgba(21, 20, 26, 0.75)!important;
		--newtab-search-text-color: #B1B1BD!important;
		--newtab-card-first-shadow: rgba(21, 20, 26, 0.5)!important;
		--newtab-card-second-shadow: rgba(21, 20, 26, 0.75)!important;
		--newtab-wordmark-color: #FFF!important;
	}

}

Enregistrez le fichier.
Fermez l’éditeur.

Maintenant, dans Firefox, allez dans about:config et créez une clé toolkit.legacyUserProfileCustomizations.stylesheets de type boolean et mettez-là à true.

Relancez Firefox.

Voilà.

Maintenant ça ressemble à ça :
https://lehollandaisvolant.net/img/7a/screenshot-firefox.png

Alors qu’avec le thème sombre de Firefox, on avait la barre sous les onglets qui n’étais pas pareil que la barre de titre (aux couleurs du système) et avec le thème par défaut (comme là), la barre des onglets était bonne, mais la page newtab était claire.

D’ailleurs là, le fond de la page newtab n’est pas exactement la même couleur que celle de la barre de titre.

ÉDIT : pour ceux qui se demandent, je suis en train de faire un thème sombre pour mes sites.
Je commence actuellement par mes petits outils en ligne (c’est pas encore en ligne). Après je ferais le blog, puis peut-être CS (le site est déjà relativement sombre).

https://lehollandaisvolant.net/?mode=links&id=20210407183042

#19928

How to Improve CSS Performance | Calibre

Quelques astuces pour les performantes d’une page web lié aux CSS.

En gros : mettez le CSS au début du code (le CSS ne bloque pas le reste du rendu) et le JS à la fin (le JS est bloquant, donc faut pas bloquer le chargement dès le début) ; c’est pas nouveau comme pratique.

Et apprenez comment fonctionne un navigateur : https://www.dailymotion.com/video/xp69td

C’est intéressant et ça vous donnera moult pistes pour faire des pages plus rapides.

https://calibreapp.com/blog/css-performance

#19904

Il réduit les temps de chargement de GTA Online : Rockstar le remercie et prépare un update | Les Joies du Code - Humour de développeurs : gifs, memes, blagues

C’est cool de la part de Rockstar !
J’imagine que Nintendo, Sony ou d’autres studios un peu cons l’aurait attaqué en justice pour avoir décompilé leur binaires…

~

Sinon, d’un point de vu technique, ça semble être le problème similaire à ça :

for (var i = 0 ; i < tableau.length() ; i++) {
  // code ici
}

Pour les non-programmeurs : la boucle for permet d’itérer sur un tableau (qui est un ensemble de N variables à la suite). Chaque variable du tableau est repéré par son indice i.
Avec for, on commence par mettre i à 0 (pour la zéroième case, donc la première en fait). Ensuite, on vérifie que i est plus petit que la taille du tableau : si le tableau fait 10 cases, on doit pas chercher la case n°11 ou 12, mais s’arrêter à 10. Enfin, à chaque tour de la boucle for, on incrémente i : au second tour, on regarde la case 2, puis la case 3, et ainsi de suite.

Le problème ici ? c’est qu’à chaque tour de boucle, il effectue le calcul « i < tableau.length() », c’est à dire qu’il regarde le tableau, calcule la longueur, et voit si l’itérateur i est bien en dessous.

Si vous ne programmez pas, vous ne pouvez pas voir le problème, mais en vrai, calculer la longueur d’un tableau prend du temps. Et ici, ce calcul est fait à chaque bouclage.

La solution ? Calculer la longueur du tableau une fois, et mettre le résultat dans une variable :

var longueur = tableau.length();
for (var i = 0 ; i < longueur ; i++) {
  // code ici
}

Ou mieux, en JS comme en PHP, on peut faire ça, pour garder ça sur une ligne :

for (var i = 0, longueur = tableau.length() ; i < longueur ; i++) {
  // code ici
}

Notons qu’ici, on rajoute quelques octets de code, on rajoute une variable intermédiaire, mais on gagne énormément en vitesse : la longueur du tableau est calculée une seule fois au début.

En vrai, ceci est une de ces petites astuces à la con qui peut TOUT changer dans un code, et elle est applicable à tous les langages de programmation (à noter qu’on aurait pu utiliser également la boucle while).

Bref, ce genre de détails de code m’a déjà permis de gagner énormément de temps dans mes scripts.

~

Un autre exemple ? En JS, en manipulant le DOM : ajouter un élément HTML dans le DOM prend du temps : il y a l’ajout lui-même, le reflow (calcul de sa position sur l’écran et décallage des éléments déjà à l’écran), le repaint (son affichage effectif sur l’écran), etc.
Si l’on a une boucle for() qui ajoute itérativement plusieurs éléments, ne les ajoutez pas à chaque bouclage !

Faites plutôt un HTMLFragment, auquel vous ajoutez les éléments. Une fois la boucle for() terminée, vous ajoutez le HTMLFragment à la page. Au lieu d’avoir un calcul du reflow/repaint de la page pour chaque élément, on ne l’a qu’une seule fois.

Et ne vous dîtes pas « mais de toute façon je n’ajoute que 5 éléments ». Non : un jour vous vererz, votre boucle sera plus grande, de 1000 à 10000 éléments par exemple. Et là cela prendre un temps de malade et vous ne saurez pas d’où ça vient.

L’optimisation commence très bas et très tôt dans le code source.

~

Dernier exemple : mon blog utilisait autrefois un moteur de blog où chaque article, chaque commentaire était un fichier texte, dans un dossier correspondant au mois en cours. Un peu comme PluXML.
C’était assez lent, mais j’ai réussis à améliorer d’un coup la vitesse. Comment ? En partant du simple constat qu’un commentaire ne pouvait toujours qu’être posté après l’article qu’il commente.

Il était donc inutile de parser les commentaires de janvier-2010 pour un article datant de février-2010. Et vu que la page principale du blog n’affichait toujours que les derniers articles, cette page s’affichait toujours très vite.

Bon, depuis j’ai basculé mon blog sur du SQLite, bien plus rapide et plus adapté : on peut trier immédiatement les commentaires associés à un article. Les bases de données sont optimisés pour ce genre de tri, ce qui n’est pas le cas de PHP.

https://lesjoiesducode.fr/reduit-temps-chargement-jeu-gta-online-rockstar-games-update

#19626

Note : raccourcis menu démarrer Windows

Le menu démarrer Windows 10 permet de faire des recherches sur son ordi et même en ligne. Depuis W7 c’est un outil central.

Sous W10, on peut taper un truc dans le menu démarrer et sélectionner (en haut) où l’on souhaite chercher : applications, documents, en ligne, paramètres…

Sachez qu’il existe un raccourcis pour ça :

Pour chercher "firefox" dans les documents ou leur contenus :

doc: firefox

Pour chercher "firefox" dans les logiciels :

app: firefox

Dans les paramètres :

settings: firefox

Sur le web :

web: firefox

Dans les images :

photos: firefox
images: firefox

Dans la musique :

music: firefox

Dans les vidéos :

videos: firefox

Dans les dossiers :

folders: firefox

Y’en a peut-être d’autres. Petite astuce qui permet de gagner un peu de temps.

Sous Linux Mint, je suis toujours utilisateur de Synapse pour faire ça. On tape, et on utilise les touches ← et → ou "tabulation" pour passer d’une catégorie à une autre.

https://lehollandaisvolant.net/?mode=links&id=20201015092653