PROJET AUTOBLOG


Warrior du Dimanche

Site original : Warrior du Dimanche

⇐ retour index

How to save a base64 image from javascript with php | Our Code World

jeudi 21 janvier 2021 à 15:41

Bon, on ne m'enlèvera pas de la tête que c'est pas super intuitif, ni super simple, mais bon, je n'ai trouvé que ça qui fonctionne...

Mon souci

  1. Je crée une image côté navigateur avec canvas
  2. je veux l'envoyer à mon serveur pour stockage

On pourrait croire que c'est simple, hein... ben j'ai pas trouvé, personnellement.

J'ai essayé

  1. de transformer le canvas en blob et de l'envoyer via un formdata
  2. de transformer le canvas en blob et de l'envoyer comme un objet simple
  3. de transformer le canvas en DataURL et de l'envoyer via un formdata
  4. de transformer le canvas en DataURL et de l'envoyer comme un objet simple

Mais à chaque fois, j'ai pas été foutu de récupérer les données côté PHP (bon, je me doute qu'il doit y avoir un pacson de trucs que j'ignore encore, hein...)

Ensuite, j'ai pensé

«et si je passais les données au format base64, je devrais pouvoir les récupérer facilement...» car je pratique couramment un optimisme ridicule au sujet duquel il m'arrive encore de sombrer dans la stupéfaction à grand fracas...

Dont acte: je recommence à farfouiller avec des fetch, des posts pis tout mais sans succès: les données décodées font une image invalide.

en désespoir de cause

Je décide de procéder moins élégamment: je copie les données vers un formulaire caché que je poste en target blank pour pas perdre ma page de travail... Oui, je sais, c'est sale, c'est moche, c'est pas secure, j'en ai conscience, c'est pas la peine de m'enfoncer, j'ai déjà assez honte comme ça...

Je reçois bien de la base 64, je décode... Et l'image n'est toujours pas valide. Puis une recherche m'apprend qu'il faut virer l'en-tête base64 côté serveur avant de décoder pour que ça fonctionne...

Je teste et... ça marche.

SUPER INTUITIF MERCI

<link rel="stylesheet" href="http://www.warriordudimanche.net/./plugins/Galart/style.css"/> <link rel="stylesheet" href="http://www.warriordudimanche.net/./plugins/Galart/assets/lightbox.css"/> <script src="http://www.warriordudimanche.net/./plugins/Galart/assets/lightbox.js"> <script>[].forEach.call(document.querySelectorAll("[lightbox]"), function(el) { el.lightbox = new Lightbox(el);});

► Commentaires

ComposeKey - Community Help Wiki

jeudi 21 janvier 2021 à 14:03

Oui, j'avais posté il y a super longtemps un billet sur des astuces pour les accents espagnols sous ubuntu/int ( https://www.warriordudimanche.net/article691/59b41f3ca6ec8 ) puis je me suis rendu compte que la méthode la plus simple (mais VRAIMENT plus simple) est de trouver une disposition de clavier adéquate...

Pour les accents espagnols, le meilleur clavier azerty est le clavier Occitan:

Je n'utilise plus jamais le clavier français.

<link rel="stylesheet" href="http://www.warriordudimanche.net/./plugins/Galart/style.css"/> <link rel="stylesheet" href="http://www.warriordudimanche.net/./plugins/Galart/assets/lightbox.css"/> <script src="http://www.warriordudimanche.net/./plugins/Galart/assets/lightbox.js"> <script>[].forEach.call(document.querySelectorAll("[lightbox]"), function(el) { el.lightbox = new Lightbox(el);});

► Commentaires

Advent of Code 2020 - 10 enseignements et bonnes pratiques en PHP

jeudi 21 janvier 2021 à 13:08

Un excellent article, très simple d'accès. Résumé pour mémoire mais je vous conseille d'aller lire le tout tant c'est clair et bien documenté:

1.Tout typer

... pour pouvoir compter sur le type des données

2.Protéger ses classes par défaut

3.Utiliser les comparaisons strictes

... pour éviter les confusions false/0 etc

4.Se passer des «if»

En utilisant l'opérateur ternaire condition ? valeur retournée si true : valeur retournée si false;

Pourquoi ? Parce que c'est plus court mais aussi parce qu'on peut placer la condition directement dans une assignation ou à la place d'un paramètre: $count += ($value === CONTROL_VALUE) ? 1 : 0;

Par contre, je trouve qu'on y perd BEAUCOUP en lisibilité et en organisation.

5.La fonction « sscanf »

Pour analyser une chaîne selon un format (et à la place d'un explode plus lourd). C'est l'inverse de printf(). ( https://www.php.net/manual/fr/function.sscanf.php )

6.L'inversion de valeurs en une ligne

et avec autant de valeurs qu'on veut

[$var1, $var2, $var3, $var4] = [$var4, $var3, $var2, $var1];

7. L’opérateur de décomposition « … »

$intersection = array_intersect(...$bigArray); au lieu de $intersection = array_intersect($bigArray[0], $bigArray[1], $bigArray[2]); // Etc.

8. Toujours ajouter un compteur de boucle pour sortir des while

Ça m'a rappelé un épisode de BigBang Theory dans lequel Sheldon est prisonnier d'une boucle dans son algorithme HowToMakeANewFriend... (c'est Howard qui l'en sort en implémentant un compteur comme condition de sortie).

$block++;
    if ($block > 1000) {
        break;
    }

9.Utiliser les fonctions liées aux tableaux

Je plussoie vigoureusement ce point particulier

Avant de se lancer dans un traitement de tableau en créant une fonction ou une méthode exprès, relisez la doc de toutes les fonctions commençant par Array_ ... histoire de ne pas réinventer la roue.

joebarteam6p43.jpg

10.Manipuler les tableaux avec les callbacks et les Collections

Pour manipuler un tableau, penser à utiliser array_map plutôt que foreach si c'est possible:

<link rel="stylesheet" href="http://www.warriordudimanche.net/./plugins/Galart/style.css"/> <link rel="stylesheet" href="http://www.warriordudimanche.net/./plugins/Galart/assets/lightbox.css"/> <script src="http://www.warriordudimanche.net/./plugins/Galart/assets/lightbox.js"> <script>[].forEach.call(document.querySelectorAll("[lightbox]"), function(el) { el.lightbox = new Lightbox(el);});

► Commentaires

GitHub - hoffstadt/DearPyGui: Dear PyGui: A fast and powerful Graphical User Interface Toolkit for Python with minimal dependencies

mercredi 20 janvier 2021 à 15:04
ooh ! Une lib Python pour faire **facilement** des GUI **jolies** !

Genre

from dearpygui import core, simple

def save_callback(sender, data):
    print("Save Clicked")

with simple.window("Example Window"):
    core.add_text("Hello world")
    core.add_button("Save", callback=save_callback)
    core.add_input_text("string")
    core.add_slider_float("float")

core.start_dearpygui()

donne

alt

J'ai pas creusé mais ça me semble intéressant tant je trouve rebutant cet aspect sous python...


<link rel="stylesheet" href="http://www.warriordudimanche.net/./plugins/Galart/style.css"/> <link rel="stylesheet" href="http://www.warriordudimanche.net/./plugins/Galart/assets/lightbox.css"/> <script src="http://www.warriordudimanche.net/./plugins/Galart/assets/lightbox.js"> <script>[].forEach.call(document.querySelectorAll("[lightbox]"), function(el) { el.lightbox = new Lightbox(el);});

► Commentaires

Cas d'école II (le retour)

samedi 16 janvier 2021 à 13:57

Dans un billet précédent j'évoquais les remontées de chiffres parfois fantaisistes dans l'éducation nationale en narrant la façon dont les choses se passaient dans mon collège...

Ben vendredi on a eu du nouveau: des cas avérés de COVID chez les enseignants...

Tout a commencé mardi...

...avec une de mes collègues qui, commençant à souffrir de symptômes, a fait le test et a été déclarée positive au covid19. Elle a immédiatement alerté le collège et les personnes pouvant être cas contact. Chaque personne alertée a elle aussi fait le test, bien entendu. Après un jour, c'étaient trois collègues qui étaient positifs...

C'est le moment qu'a choisi notre chef pour nous envoyer un email dans lequel il nous rappelait - avec force mots soulignés pour bien nous montrer les notions importantes à retenir pour nous pauvres cons - qu'il fallait absolument produire un arrêt de travail ou une attestation de la CPAM sous peine de se voir notifé une constatation d'absence de service fait... Puis, tranquilou détendu du gland, il nous rappelle à la «stricte application des règles sanitaires en particulier dans la salle des professeurs (souligné)», sous-entendant par là que si on est positif, c'est de notre faute et pas de la sienne.

Pour résumer

Non seulement il ne prend aucune nouvelle des collègues ni ne se fend d'un mot gentil, d'une parole de soutien, d'un zeste d'humanité mais en plus il nous culpabilise pour se dédouaner de sa gestion pour le moins chaotique du protocole...

Rappelons que depuis l'année dernière, nous ne disposons plus de nos classes pour nous isoler et que nous en sommes réduits à nous «reposer» en salle des profs, tous ensemble... et boire un café s'avère difficile quand on conserve son masque.

Or, ceux qui nous font ce reproche - le chef, la gestionnaire et son mari, correspondant TICE de l'établissement et prof de techno - disposent de leur bureau individuel ou salle de cours et d'un logement de fonction à 100 mètres de leur bureau... Facile dans ces conditions d'aller s'isoler pour retirer son masque, se gratter les noix, se curer le pif ou, plus probablement, se pochtronner en pleine journée au point de ne plus rien pouvoir gérer après...

atta atta, c'est pas fini !

Sur ce, vendredi arrive et avec lui l'annonce qu'une autre personne est positive: nous sommes à 4 positifs sur 4 testés. C'est ce qu'on appelle un cluster.

Le chef choisit d'arriver en fin de récréation de 10h30 pour faire un point et il est colère le gars (comme tous les alcoolos)... Là, il minimise la situation, dit qu'il attend les ordres de sa hiérarchie pour savoir comment communiquer l'information aux élèves.

Oui, tu as bien lu...

...vendredi, trois jours après la première alerte de la collègue, aucune info n'avait été donnée aux familles. Pire, d'après le chef, on lui a FORMELLEMENT INTERDIT DE COMMUNIQUER AVANT AVIS DU RECTORAT (je mets en majuscules parce que je ne peux pas dodeliner comme l'orateur). (oui, c'est un gars qui dodeline beaucoup)

dodeline.gif

Il a ajouté qu'il nous interdisait d'en parler aux élèves. N'y tenant plus, je suis intervenu en disant qu'on ne pouvait pas m'ordonner de mentir aux élèves et que ces derniers commençaient à poser des questions. Là il a tenté de me décocher un regard noir - ne parvenant qu'à me montrer des globes d'un jaune pisseux injectés de sang - en me disant qu'il fallait répondre qu'une information serait faite dans la journée. Soutenant son regard, j'ai répété cette phrase en la mettant entre guillemets puis, sans cesser de le regarder, j'ai ajouté «c'est noté» attendant qu'il baisse les yeux. Comme il manque de courage, c'est ce qu'il a fait.

La seule mesure annoncée consiste en une «désinfection complète de l'établissement par un robot UV» à propos duquel il croit bon d'ajouter - sans doute pour renforcer sa crédibilité - qu'il «ressemble à R2D2». (sic)

RIEN D'AUTRE. Ni demande de tests du personnel, ni fermeture rien. Et surtout: silence !

Ce qu'on peut raisonnablement en penser

C'est que l'état, et ses bons petits soldats - tiennent absolument à maîtriser toute l'information autour des infections, quitte :

Encore une fois

cette situation ne concerne que mon collège et ne saurait -j'espère- être représentatif de l'ensemble des établissements de France... Mais j'en ai tellement plein le joufflu, je suis tellement sous pression dans ce bahut de merde que j'avais besoin d'en parler.

C'est chose faite.

EDIT :

Je viens de vérifier mes emails, deux autres personnes sont déclarées positives depuis hier et deux autres sont en attente de test.

Voilà.

<link rel="stylesheet" href="http://www.warriordudimanche.net/./plugins/Galart/style.css"/> <link rel="stylesheet" href="http://www.warriordudimanche.net/./plugins/Galart/assets/lightbox.css"/> <script src="http://www.warriordudimanche.net/./plugins/Galart/assets/lightbox.js"> <script>[].forEach.call(document.querySelectorAll("[lightbox]"), function(el) { el.lightbox = new Lightbox(el);});

► Commentaires