https://phpbestpractices.org/ : A short, practical guide for common and confusing PHP tasks (Storing passwords, PHP and MySQL, PHP tags, Auto-loading classes, Single vs. double quotes, define() vs. const, Caching PHP opcode, PHP and Memcached, PHP and regex, Serving PHP, Sending email, Validating email addresses, Sanitizing HTML, PHP and UTF-8, Working with dates and times, Checking null and false values, Removing accent marks (diacritics) )
Je dirais que le Mandalorien est à l'opposé du spectre du livre de Bobafett: là où on déteste Bobafett malgré quelques (rares) bonnes choses, on aime inconditionnellement Mando malgré quelques passages plus faibles...
Qui pourrait se douter que sous ce titre sibyllin se trouve un billet évoquant Bozon ?
Vu qu'à la maison il m'est rigoureusement impossible de mener ne serait-ce qu'un début de réflexion sur le moindre bout de code - c'est en effet parfois à peine si on me laisse enlever mes chaussures quand j'arrive - je mets à profit la surveillance du brevet pour réfléchir à une version de bozon.
Mais pourquoi ?
Plusieurs personnes m'ont contacté pour me demander si cette appli avait le moindre avenir et j'ai répondu que non puisque nextcloud fait mieux que bozon.
Mais finalement, nextcloud semble faire TROP au goût des utilisateurs ne cherchant qu'a partager rapidement des fichiers... Et beaucoup trouvent nextcloud trop lourd, lent et difficile à installer.
par conséquent, me revoilà parti
Première chose, me replonger dans le code de la v3 jamais diffusée
Et s'aviser du boulot colossal déjà effectué à l'époque... 😳
J'avais repensé toute la logique de l'appli... Tellement que ça m'avait conduit à créer par la suite de toutes pièces un framework complet...
Hélas, depuis lors, ledit framework a bien évolué et il est désormais au-dessus du code de bozon certains aspects (en particulier pour le templating, la bdd et la sécurité)
Du coup que faire ? Reprendre à zéro avec mon framework ou reprendre l'ancien ?
Je réfléchis...
En tout cas,
je vais restreindre l'appli au seul rôle qui lui convient : le partage simple mais complet de fichiers et de dossiers
limiter sa logique au backend et utiliser le js le moins compliqué possible (quitte à avoir des raffraichissements de page pas très 2023)
ne pas chercher à implémenter la synchronisation, une API ou le webdav...
La question reste : où vais-je trouver le temps et la tranquillité nécessaires..
En même temps, les migrants tiennent une solution: s'ils veulent être secourus en cas de naufrage, ils n'ont plus qu'à faire la traversée en sous-marin...
Ok, si on lit l'article, il est effectivement mentionné assez tôt qu'il est impossible de planter des arbres à cet endroit...
Pour autant, de faux arbres en «métal et d’aluminium» me paraissent un choix pour le moins discutable, en particulier par ces temps de canicule :
le métal en général et l'alu en particulier me semblent de trop bons conducteurs de chaleur... ils doivent chauffer très vite... si c'est pour se retrouver avec des radiateurs brûlants... Il y avait sans doute d'autres choix de matériaux moins thermiques, plus isolants et plus écologiques que l'aluminium (?)
Ce n'est pas parce qu'on ne peut pas planter des arbres dans le sol qu'il s'avère impossible de planter des arbres hors sol voire de planter autre chose que des arbres... Les moyens de créer de l'ombre en végétalisant intelligemment ne manquent pas, ne serait-ce qu'en créant un toit en treillis sur lequel on fait courir des plantes grimpantes (peu de racines contrairement aux arbres)...
Si l'objectif est celui de la lutte contre les excès thermiques, on pouvait sans doute commencer par éviter l'urbanisation telle qu'elle a été faite, refaire des jardins, remettre de l'herbe là où le goudron est omniprésent, faire moins de parkings ou les enterrer plus profond afin que les gens au-dessus puissent vivre... Parce que là, au bout du compte, le parking est prioritaire sur la surface: c'est lui qui dicte ce qu'on peut faire ou pas... et par extension, on priorise la voiture sur les gens.
Peut-être cette oeuvre n'est-elle pas si légitime que ça du point de vue écologique ou logique tout court...
Peut-être pouvait-on faire mieux, plus efficace, plus écologique, moins cher et moins bobo... quitte à ne pas se faire de la pub ou de la récupération politique (un truc "culturel" qui se voit beaucoup)...
Peut-être est-il objectivement absurde - même après lecture attentive de l'article - de choisir cette "solution" pour faire de l'ombre dans une ville bétonnée, goudronnée à outrance et entièrement dédiée à la bagnole...
Peut-être que, finalement, Seb et Timo n'ont pas si tort que ça d'avoir envie de se cogner la tête sur les murs...
Voici un tract distribué en boîte-aux-lettres dans une commune près de chez moi, reçu par un de mes collègues... au cas où vous auriez encore des doutes sur le fait que l'extrême droite (que je refuse d'appeler ultradroite tant le terme a servi à ramener Lepen et sa clique vers la gauche) a la bride sur le cou.
Mais après, hein, faut pas traiter les électeurs d'extrême droite de fachos, hein, sinon ouinouin colère...
poe.com, un [bon?!] moyen de tester ChatGPT sans numéro de téléphone, en ne donnant qu'une adresse email, éventuellement jetable.
Je me suis dit, tiens, si je testais avec la génération d'un bout de code ?
Par manque de temps comme par curiosité, je lui ai soumis un truc qui me trotte dans la tête : la séparation des mots espagnols en syllabes (beaucoup moins simple qu'il n'y paraît à priori )
Ben je crois que j'ai cassé chatGPT... Je lui prompte:
crée une fonction php efficace permettant de séparer les mots espagnols en syllabes
Après quelques bouts de code qui pouvait sembler fonctionnels, la découpe ne se faisait jamais correctement.
Je lui fournis un mot ne fonctionnant pas, une explication du problème et lui demande de corriger:
cette fonction a des problèmes de caractères unicode, teste-le avec le mot español et recommence
En affinant et en redemandant de tester avec certains mots, l'appli me propose de nouvelles modifs mais aucune n'est fonctionnelle, contrairement à ce qu'affirme le chatbot: il me dit que la fonction découpe correctement les mots demandés... Donc soit elle ment soit elle ne teste pas le code (LOL)
Je lui demande donc de recommencer et c'est là qu'on rigole:
ça ne fonctionne toujours pas: ton code ne sépare pas bien les syllabes et il le fait dans le désordre (les syllabes ne sont pas dans l'ordre du mot) recommence
On voit que le bouzin part dans une sorte de boucle générative assez drôle, mélangeant les portions de code avec ses propres commentaires, répétés et entrecoupés...
function syllabifier($word) {
$syllable_patterns = array(
'/(qui|gue|gui|[aeiouáéíóúü])[aeiouáéíóúü]*|[bcdfghjklmnpqrstvwxyzñ]+/i',
'/(que|qe|qui|qüe)[aeiouáéíóúü]*/i',
'/(gui|güi)[aeiouáéíóúü]*/i'
);
$syllables = array();
preg_match_all('/./u', $word, $matches);
$characters = $matches[0];
while (!empty($characters)) {
$matched = false;
foreach ($syllable_patterns as $pattern) {
$syllable = '';
foreach ($characters as $key => $char) {
$syllable .= $char;
if (preg_match($pattern, $syllable)) {
$syllables[] = $syllable;
$matched = true;
$charactersJe suis désolé que la fonction ne fonctionne toujours pas pour vous. Je vais essayer de proposer une nouvelle version de la fonction qui prend en compte les cas particuliers de la langue espagnole et qui retourne les syllabes dans l'ordre du mot. Voici la fonction modifiée :
```php
function syllabifier($word) {
$syllable_patterns = array(
'/(qui|gue|gui|[aeiouáéíóúü])[aeiouáéíóúü]*|[bcdfghjklmnpqrstvwxyzñ]+/i',
'/(que|qe|qui|qüe)[aeiouáéíóúü]*/i',
'/(gui|güi)[aeiouáéíóúü]*/i'
);
$syllables = array();
preg_match_all('/./u', $word, $matches);
$characters = $matches[0];
while (!empty($characters)) {
$matched = false;
foreach ($syllable_patterns as $pattern) {
$syllable = '';
foreach ($characters as $key => $char) {
$syllable .= $char;
if (preg_match($pattern, $syllable)) {
$syllables[] = $syllable;
$matched = true;
$charactersJe m'excuse pour cette erreur dans ma réponse précédente. Voici la version corrigée de la fonction :
```php
function syllabifier($word) {
$syllable_patterns = array(
'/(ll|[aeiouáéíóúü])[aeiouáéíóúü]*|[bcdfghjklmnpqrstvwxyzñ]+/i',
'/(que|qe|qui|qüe)[aeiouáéíóúü]*/i',
'/(gui|güi)[aeiouáéíóúü]*/i'
);
$syllables = array();
preg_match_all('/./u', $word, $matches);
$characters = $matches[0];
while (!empty($characters)) {
$matched = false;
foreach ($syllable_patterns as $pattern) {
$syllable = '';
foreach ($characters as $key => $char) {
$syllable .= $char;
if (preg_match($pattern, $syllable)) {
$syllables[] = $syllable;
$matched = true;
$characters = array_slice($characters, $key + 1);
break;
}
}
if ($matched) {
break;
}
}
if (!$matched) {
$syllables[] = $charactersJe m'excuse pour cette erreur dans ma réponse précédente. Voici la version corrigée de la fonction :
```php
function syllabifier($word) {
$syllable_patterns = array(
'/(ll|[aeiouáéíóúü])[aeiouáéíóúü]*|[bcdfghjklmnpqrstvwxyzñ]+/i',
'/(que|qe|qui|qüe)[aeiouáéíóúü]*/i',
'/(gui|güi)[aeiouáéíóúü]*/i'
);
$syllables = array();
preg_match_all('/./u', $word, $matches);
$characters = $matches[0];
while (!empty($characters)) {
$matched = false;
foreach ($syllable_patterns as $pattern) {
$syllable = '';
foreach ($characters as $key => $char) {
$syllable .= $char;
if (preg_match($pattern, $syllable)) {
$syllables[] = $syllable;
$matched = true;
$characters = array_slice($characters, $key + 1);
break;
}
}
if ($matched) {
break;
}
}
if (!$matched) {
$syllables[] = $charactersJe suis désolé pour cette confusion. Voici une nouvelle version de la fonction qui devrait fonctionner correctement pour le mot "español" et qui retourne les syllabes dans l'ordre du mot :
```php
function syllabifier($word) {
$syllable_patterns = array(
'/(que|qui|gue|gui|güe|güi|[aeiouáéíóúü])[aeiouáéíóúü]*|[bcdfghjklmnpqrstvwxyzñ]+/i',
'/(que|qe|qui|qüe)[aeiouáééóúí]+/i',
'/(gui|güi)[aeiouáéíóúü]+/i'
);
$syllables = array();
preg_match_all('/./u', $word, $matches);
$characters = $matches[0];
while (!empty($characters)) {
$matched = false;
foreach ($syllable_patterns as $pattern) {
$syllable = '';
foreach ($characters as $key => $char) {
$
Tiens, il existe une API qui permet de transformer du texte en Bionic Reading, cette technique améliorant la lecture en mettant en gras le début du mot.
Je m'interrogeais justement sur la pertinence d'implémenter ça sur mon appli de documents en espagnol pour les élèves éprouvant des difficultés de lecture...
Bon, il faudra que je fasse une couche d'interface afin que les données des élèves ne transitent pas vers le site de l'API, comme pour celle de synthèse vocale... mais rien de trop ardu.
Pas d'accès à l'article complet mais une chose est certaine, le chômage peut baisser grâce à plein de stratégies plus sournoises, qu'elles soient de calcul ou de politique de l'emploi:
décompte des stagiaires ?
décompte des petits emplois ineptes et peu rémunérés ? (l'angleterre était une championne une époque: j'avais vu une personne payée à tenir le piquet d'un panneau sur le trottoir toute la journée)
décompte des temps partiels subis ?
décompte des emplois saisonniers ? (travaux d'étudiants l'été par exemple...)
et j'en oublie sans doute.
Le plein emploi... Lol. Si c'est pour avoir une population occupée à des mini jobs sous-payés, précaires et dénués de sens, tu peux te les coller là où le soleil de brille pas macronichou...
Il commence à en avoir assez le Bronco, de toutes ces applis et webapps, services et API dans lesquelles il faut SYSTÉMATIQUEMENT un compte cro$oft, google, openai, monculsurlacomode pour pouvoir ne serait-ce que tester... Et à chaque fois, bien entendu, lesdits comptes nécessitent de se retrouver à poil devant eux, numéro de téléphone inclus.
Je comprends que ça ne dérange pas Korben qui sert régulièrement la soupe des GAFAM tout en tentant d'avoir une image de geek révolutionnaire, parce qu'il en vit, mais là, je cale.
En effet, là encore:
on te file une appli, sur github, avec des versions pour chaque os et tu te dis: «ha!? c'est bien toussa...»
On te vend du rêve en te disant qu'il n'est plus nécessaire d'utiliser un Edge, un chrome ou même une extension pour ça: l'appli suffit.
Tu installes et tu lances et tu as la furieuse impression qu'il s'agit d'un simple wrapper remplaçant le navigateur sauf que là, il t'est impossible de vérifier ce qui entre et sort...
Dès le lancement, il te demande un compte cro$oft
Oui, je sais...
Je suis pas si con, hein, je comprends bien la stratégie derrière, vu qu'elle n'a rien de nouveau: on fournit un truc «révolutionnaire» ou un gadget amusant (du filtre rigolo à l'IA en passant par un espace de microblogging narcissico schizophrène) pour le prix de zéro euro mais-signez-ici-pour-la-saisie-de-votre-vie-entiere-ma-ptite-dame-appuyez-bien-fort-ya-un-carbone-merci... L'objectif étant moins de fournir le service-prétexte que de se gaver de grosse-donnée.
Clairement, la cible n'est pas le bricoleur qui cherche à tester pour comprendre et se faire une opinion sur l'intérêt, les limites et les dangers du bouzin (c'est moi) mais le quidam lambada, utilisateur compulsif et ignorant, scrupuleusement maintenu dans cet état par des entités qui l'élèvent comme du bétail.
Je sais aussi
... qu'il y a des «astuces» pour contourner ça, mais si c'est pour utiliser des «services» complémentaires (genre twitter ou un site aussi opaque que suspect), je ne vois pas l'intérêt de sauter par dessus une fosse au lion pour se jeter dans une fosse septique...
Conclusion
Je pourrais résumer ma pensée à l'égard de ces «services» par l'image suivante:
Je testerai quand on pourra faire SANS la coloscopie façon fistinière, merci bien...
Macron se cache sur les champs elysees sauf que lui, pour se cacher, il supprime la liberté d'aller et venir de l'ensemble de la population locale... Il se cache en enfermant les autres quoi...
La liberté de circulation est le droit pour tout individu de se déplacer librement dans un pays, de quitter celui-ci et d'y revenir. Elle est garantie par l'article 13 de la Déclaration universelle des droits de l'homme depuis 1948.
Il y a quelques jours, j'ai vu passer un article sur le contenu idéal d'un Readme ( https://warriordudimanche.net/article1840/6448d4a15a710 ) et en partageant le lien sur mastodon, on a émis l'idée de coder un assistant de génération qui permette de faire ça simplement...
Nicolas Delsaux* m'a alors passé quelques exemples d'applis déjà réalisées et - pour autant que j'ai pu en juger avec un test rapide - très bien foutues et très complètes:
le malheur était déjà en train de se produire: impossible d'empêcher mon cerveau de travailler en background façon «à la volette»
Du coup, si je voulais pouvoir faire autre chose, il fallait d'abord vider ma tête de ce «projet» LOL.
Voici donc ReadmeToaster
L'objectif est de pouvoir faire un readme rapidement, de pouvoir modifier «simplement» les éléments du contenu (ordre ou items), de pouvoir ajouter des captures d'écran, sélectionner une license...
La capture d'écran parle d'elle-même: on peut même choisir de générer des fichiers séparés pour certaines parties (Roadmap, Changelog...)
Configuration
La configuration des items se fait via le fichier config/patrs.json qui contient les objets, leur type (select/text/textarea etc), leur titre/label, leur placeholder, leur attribut name etc.
"Name":{
"type":"text",
"title":"The project name",
"name":"name",
"placeholder":"ReadmeToaster",
"class":"name",
"required":"required"
},
"Description":{
"type":"textarea",
"title":"A short description (what's the project's purpose ?)",
"name":"description",
"placeholder":"A tiny webapp to create normalised readme files",
"class":"description"
},
"Installation":{
"type":"textarea",
"title":"How to install or deploy ?",
"name":"installation",
"placeholder":"Just copy the folder onto your server and that's it... Noooo, I'm kidding !",
"class":"install"
},
"Contribute":{
"type":"textarea",
"name":"contribute",
"placeholder":"* translations,n* bug finding",
"class":"text",
"title":"Explain how to contribute"
},
"Contribute in a separated file":{
"type":"checkbox",
"name":"contribute_separate",
"title":"Put contribute in a separate file",
"placeholder":"",
"class":"",
"value":"contribute_text"
},
On peut ainsi facilement ajouter, modifier ou déplacer des items dans le frontend sans mettre les doigts dans le code. Si on peut pouvoir séparer un contenu dans un fichier à part, on colle un item checkbox dont le nom est ITEM_separate.
Le fichier généré sera un zip contenant tous les fichiers, y compris les éventuelles captures d'écran fournies.
Contre la taxe sur les super profits
Contre l’augmentation du SMIC
Contre l’augmentation du nombre d’hébergements d’urgence pour les sans-abri
Contre le rétablissement de l’ISF
Contre l’augmentation des moyens pour lutter contre la fraude fiscale
Contre allouer 1 milliard d’euros pour lutter contre les violences faites aux femmes
Contre la revalorisation des retraites au niveau du SMIC
Contre l’encadrement des salaires dans les entreprises
Contre l’assurance chômage après un abandon de poste
Contre le gel des prix des loyers
Contre l’augmentation de la taxe des hébergements vacants
Contre le blocage des prix des produits de première nécessité
Contre la gratuité des cantines scolaires
Contre le renforcement de l’aide juridictionnelle
Contre la revalorisation des minima sociaux au niveau du seuil de pauvreté
Contre l’augmentation des moyens alloués aux hôpitaux
Contre la revalorisation des salaires des fonctionnaires de 10 %
Contre la revalorisation des salaires des sapeurs-pompiers
Contre le maintien de la redevance audiovisuelle
Contre la baisse de la TVA sur les transports en commun
Contre l’augmentation de la TVA sur les produits de luxe
Contre l’augmentation de la fiscalité sur les résidences secondaires
Contre la taxe sur les revenus excédant 3 millions d’euros
Contre l’augmentation du nombre de greffiers et magistrats
Contre, la revalorisation des bourses étudiant au niveau de l’inflation
Contre une garantie d’autonomie de 1063€ pour les étudiants et étudiantes
Contre une revalorisation des appels de 10 %
Contre la gratuité des fournitures scolaires pour la rentrée
Contre l’augmentation du budget des universités
Contre le conditionnement des aides publique aux grandes entreprises, au respect de contraintes écologiques
Contre la suppression de la niche fiscale sur le Kérosène aérien
Contre l’instauration d’un impôt sur la fortune climatique
Contre la taxation des yachts et Jets privés
Petite note sur un usage du dataset en js (l'attribut «data-quelquechose»)
Ici il utilise un attribut «data-json» pour stocker, modifier des données et transformer le formulaire dynamiquement.