Unicode, c'est bien joli, mais c'est chiant à coller quand t'en as besoin. Du coup, tu lâches l'affaire.
Bon, ben j'ai bricolé une page pour copier ces caractères qu'on utilise le plus.
Le but est de copier rapidement dans le presse-papier le (ou les) caractères unicode désirés.
Quand on clique sur un caractère il se passe deux choses:
🥇 ledit caractère est copié dans le presse-papier
🥈 il est également ajouté à la suite dans le bouton du haut qui donne la possibilité de cumuler plusieurs caractères de suite. (clic sur le bouton copie le contenu du bouton, double-clic l'efface)
Et pour configurer ?
Vous noterez que les chaînes peuvent n'être qu'un seul caractère unicode ou toute une série, si vous en utilisez régulièrement.
Comme c'est du html+js+css, pas besoin d'un serveur, on peut l'utiliser en local. 🎉
Ok, mais à quoi ça sert en vrai ?!
Ben je sais pas moi ! Vu que vous pouvez mettre les caractères/chaînes que vous voulez, ça peut servir pour les matheux (coucou les profs) qui ont besoin des symboles de math simplement ou ponctuellement , en musique, ou en électronique... explorez unicode !
# DON'T BE A DICK PUBLIC LICENSE
> Version 1.1, December 2016
> Copyright (C) [year] [fullname]
Everyone is permitted to copy and distribute verbatim or modified
copies of this license document.
> DON'T BE A DICK PUBLIC LICENSE
> TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
1. Do whatever you like with the original work, just don't be a dick.
Being a dick includes - but is not limited to - the following instances:
1a. Outright copyright infringement - Don't just copy this and change the name.
1b. Selling the unmodified original with no work done what-so-ever, that's REALLY being a dick.
1c. Modifying the original work to contain hidden harmful content. That would make you a PROPER dick.
2. If you become rich through modifications, related works/services, or supporting the original work,
share the love. Only a dick would make loads off this work and not buy the original work's
creator(s) a pint.
3. Code is provided with no warranty. Using somebody else's code and bitching when it goes wrong makes
you a DONKEY dick. Fix the problem yourself. A non-dick would submit the fix back.
Merci à https://nicolas-delsaux.hd.free.fr/Shaarli/?X31NQQ
Et allez, encore une matinée de perdue pour un truc que j'avais pas prévu et qui devrait fonctionner parfaitement: la balise <video> et la balise <track> pour ajouter les sous-titres.
Pour afficher une video pour les élèves avec les sous-titres que j'ai traduit de youtube, en gros, je fais un truc comme ça:
En passant, je vous mets le lien vers un petit outil pour convertie en et de Base64.
Bon, yen a plein, hein, en particulier celui de Timo ... J'en ai quand même refait un from scratch pour pouvoir l'utiliser comme une appli online (le front end ci-dessous) ou bien comme une «API» utilisable via un bookmarklet par exemple: ainsi, en sélectionnant du texte puis en lançant le bookmarklet qui va bien, on peut encoder/décoder en un clic...
Bon, je bosse dessus parce que je suis entêté et que j'aime bien comprendre mais là... j'ai du mal.
Ce que j'ai fait
Côté frontend
J'ai épuré mon code JS au max
j'ai simplifié le formulaire en laissant tomber les noms de fichier: je n'envoie que le contenu de l'image en base64 et je génère un nom backend.
j'ai changé l'ajout des hidden servant à transmettre les images au format base64: au lieu de les ajouter au fur et à mesure de la génération des images redimensionnées, je les crée dans l'événement onSubmit du formulaire.
j'ai essayé de virer l'enctype du formulaire vu que, avec l'URL_rewriting à off j'obtenais une erreur 406 en distant... J'ai même essayé en text/plain pour voir... C'est pas ça.
côté backend
j'ai simplifié au max
j'ai ajouté la création d'un nom de fichier local (l'extension est déduite des données base64 qui démarrent comme suit: base64:image/jpeg ...)
j'ai regardé, en local, la taille des données envoyées:
Je sais, on a l'impression que c'est toujours la même image mais en fait non... c'est sans doute dû au fait que base64 est très verbeux et que le début est toujours le même pour des images.
Le tout fait un post d'environ 4.5 Mo ce qui n'est pas choquant dans un formulaire multipart/form-data et reste très en dessous des limites de PHP_INI sur le serveur.
Aucun fichier .htaccess ne vient non plus foutre le bran...
HELP
Encore une fois, ça marche impeccable en local.
J'ai commenté au max mon code pour le cas où quelqu'un se sent de regarder, parce que pour ma part, je commence à voir flou et à avoir des hallucinations... je vous mets un zip: http://warriordudimanche.net/vrac/Plinstagram.zip
Je me suis aperçu que mon plugin Plinstagram faisait des trucs étranges et refusait parfois de poster. Pensant à une erreur d'identification, j'ai repris le code mais rien n'y faisait.
Une fois la ruse très moche appliquée, ça semblait revenu à la normale. Puis j'ai décidé d'aller marcher un peu et j'ai pris des photos dans l'idée de tester à nouveau Plinstagram.
Et là, c'est le drame
J'ai beau tout essayer, pas moyen d'envoyer le post avec les photos... mais curieusement, j'aboutis à une erreur 404 et pas à une erreur d'exécution.
Je me dis que ça doit être un problème de taille de formulaire et je me rappelle que, comme un con, j'ai omis de virer l'input files du formulaire avant envoi.
J'explique rapidement comment fonctionne Plinstagram:
Côté JS
1 - l'utilisateur sélectionne des photos sur son ordinateur
2 - pour chaque image, le script js se charge de:
récupérer les images sélectionnées,
créer une miniature avec un canvas
stocker l'image réduite sous forme de donnée base64 dans un input hidden (avec le nom de fichier dans un autre input hidden) créés à la volée
Ainsi on obtient un $_POST[data] et un $_POST[filename] qui contiennent chacun un tableau avec les données de chaque image pour l'un et le nom de chaque image pour l'autre.
Quand on poste, le script vire l'input file pour éviter l'upload de grosses photos.
Côté PHP
Vient ensuite le hook AdminArticlePrepend de la page core/admin/article.php vers laquelle pointe le formulaire de plinstagram: celui-ci se charge de :
1 - parcourir l'array des images redimensionnées postées en base64,
2 - récupérer le nom de chaque image
3 - sauvegarder localement chaque image dans un sous-dossier dédié à l'article
4 - générer une galerie qu'il ajoute au corps du post
5 - finaliser la création des données de l'article.
À ce moment-là pluXML reprend la main et s'occupe du stockage de ces données.
Quand je teste en distant (sur WDD)
Avec une photo, tout se passe normalement. Si j'en mets ne serait-ce que deux, pluXML me renvoie à la page 404, comme si l'URL était fausse: or, il n'en est rien ! L'URL de la barre d'adresse est la bonne, celle du formulaire aussi... pourtant, avec plus d'une photo, la requête n'arrive jamais à core/admin/article.php
Pire, une fois sur la page 404, si je clique dans la barre d'adresse puis que j'appuie sur entrée, j'arrive sans encombre à la page voulue (mais sans les données de formulaire bien entendu): l'URL est donc bonne.
J'ai pensé à une redirection foireuse mais la seule redirection qui reste est celle qui se fait AVANT le formulaire et seulement dans le cas où l'utilisateur n'est pas connecté.
Et puis ça ne semble pas être la faute de mon script PHP vu qu'on n'arrive même pas jusqu'à lui (j'ai collé des exit('moncul'); partout pour voir et rien !)
Quand je teste en local... ô surprise!
TOUT FONCTIONNE SANS PROBLEME ! (le fameux «ça marche sur mon ordi»)
J'ai pensé à un problème de version de PHP: j'ai essayé de changer et c'est pas ça
j'ai songé à une limite de la taille de fichiers ou la limite de taille de post... c'est pas ça (puis ça générerait une erreur, pas un pseudo 404)
Pour résumer
Conclusion
J'en suis à me dire qu'il doit y avoir un genre de restriction pour la taille des données contenues dans des inputs et que cette restriction ne doit pas être la même en local.
Une autre piste que je dois explorer est une éventuelle incompatibilité entre deux plugins... Mais je vois pas lesquels et pis là, faut que j'aille pleurer d'abord.
EDIT dix minutes plus tard:
Tiens, la différence entre le local et le distant, c'est la configuration du rewrite URL dans pluXML: activée en distant. Je mets sur OFF et là, j'obtiens une erreur 406:
Not Acceptable: An appropriate representation of the requested resource could not be found on this server.
Dans la rubrique «je bosse une grosse fois pis c'est bon» j'ai eu besoin de pouvoir faire rapidement une page de révision de vocabulaire pour mes élèves; mais quand je dis rapidement, je veux que ce soit fissa avec une friction proche de zéro et sans avoir recours à une appli à la con: copier coller un lien dans l'ENT doit suffire.
J'ai donc opté pour les flashcards, qui sont très efficaces dans ce domaine et j'ai codé un truc vite fait qui ne représente pas une prise de tête quand on veut donner du boulot aux gamins.
En gros, tu écris les mots à apprendre sous la forme
question1:réponse1, question2:réponse2,...
puis tu récupères la page avec le lien à utiliser.
Sur la page, tu cliques sur la carte et elle se retourne.
Merci à tous pour vos témoignages anti-java qui font que je me sens moins seul et pour vos conseils en la matière !
@Antichesse (o ^ω^ o) Merci à toi en particulier pour ta proposition il se pourrait que je te prenne au mot o/
Je vais aller essayer la rubrique openclassroom dédiée à Kotlin DQP ( https://www.youtube.com/watch?v=QpNOl2BU7tE pour la référence ^u^ )
En ce moment, j'essaie de me remettre à Java en reprenant les cours openclassroom... c'est un langage que je n'ai jamais utilisé et j'aimerais vraiment être en mesure de coder des applis pour Android...
J'ai bien sûr commencé par le cours de base, même si les concepts me sont familiers. Pourtant, une comparaison avec d'autres langages m'aurait bien simplifié les choses (comme pour python)
Une fois ces infos ingurgitées je me suis penché sur l'utilisation d'un IDE dans cet environnement.
Et bien j'ai plusieurs choses à dire.
tout d'abord, les «cours» en ligne s'apparentent à des tutos et parfois, c'est vraiment trop limité, en particulier quand on passe à côté de certains trucs: il manque la possibilité de poser des questions, comme dans un vrai cours.
ensuite, un reproche qu'on pourrait faire à tous ceux que j'ai vus (à part Grafikart pour les autres langages), je trouve qu'ils choisissent mal leurs exemples et leurs illustrations, en particulier pour les notions abstraites. Je trouve qu'on y gagnerait à partir sur un projet concret, à le faire d'une certaine façon, au niveau 1, pour en démontrer les limites dans certains contextes (dev pro ou en équipe par exemple), voir les problèmes et comprendre l'UTILITÉ de ces concepts pour résoudre ces problèmes... (les interfaces, les classes abstraites etc...) Souvent, les tutos se contentent de régurgiter la doc, c'est nul.
parfois, la progression me semble très irrégulière: passer des boucles/tableaux/tests/gestion d'erreurs aux abstractions les plus hautes d'un coup, ça plonge dans la perplexité.
pour openclassroom, les quizz finaux sont parfois très mal formulés ce qui fait qu'on ne comprend pas vraiment ce que l'auteur attend: pourtant, la clarté de rédaction des consignes me semble primordiale quand on a des prétentions didactiques.
Plus j'avance dans mon «étude» de Java, plus je rencontre de problèmes qui entravent la programmation elle-même: installation qui gâtouille, versions diverses... Et je ne parle même pas de l'utilisation d'un IDE qui multiplie ces difficultés et la complexité de leur résolution de plusieurs ordres de grandeur.
Les IDE, là, c'est des pitin d'usines à gaz ! C'est juste pas possible de démarrer sans avoir une courbe
d'apprentissage de l'éditeur qui ridiculise celle de dwarf fortress, la lisibilité en moins ! Et vas-y que je te fous des options de partout, des structures imbitables, des libellés pour Bac+15... Namého ! Même pour arriver enfin à pondre ton «hello world», t'en a chié des contrebasses. Quand tu viens du dev web, c'est un choc.
Java en lui-même... me semble vraiment... Moche. Je trouve la façon de coder inutilement verbeuse et lourde. Alors, je sais que c'est parce que je n'ai pas atteint le «point d'habitude» qui fait que tu ne vois plus les choses non pertinentes dans le cas qui t'occupe, mais bon: en général, en lisant un bout de code, j'arrive à piger ce que ça fait, à moins de me trouver devant un bout de JS de très haute volée. Là, ça me semble toujours plus compliqué que nécessaire...
Et là vous me direz «Mais qu'est-ce que tu nous pètes les gonades avec tes états d'âme sur l'apprentissage d'un langage dont tu n'as pas vraiment besoin et que tu n'es donc absolument pas obligé d'apprendre ?»
Déjà, je répondrais que c'est pas très gentil et que j'attendais plus de solidarité de la part des développeurs
J'avais juste besoin de me vider la frustration de ne pas pouvoir apprendre plus facilement un autre langage pourtant très utilisé.
Le confinement nouveau est arrivé et avec lui plein de nouvelles raisons de se poser des questions exitentielles (non, j'ai pas fait de faute) (GAG)
Pour y répondre et vous guider dans vos choix, plutôt que de vous fier aux oracles, haruspices et autres politiciens qui vous noieront sous des mensonges, des billevesées voire même des promesses électorales, pourquoi ne pas utiliser la bonne vieille 8 ball magique ?
Du coup, je vous en propose une. Sous forme d'API. Oui.
https://learnxinyminutes.com/ pour des rappels en une page de l'essentiel d'un langage
J'ai appris qu'en Go il y a un type de variable complex128 qui permet un truc du genre c := 3 + 4i ... voilà qui serait pratique en python au lycée de ma fille [blague personnelle]
https://devtools.best/ Base Converter,Base64 Encoder/Decoder, Emoji Picker Tool, HTML Entities Encoder/Decoder, Json Prettier, Lorem Ipsum, Text Comparison Tool, Text Effects tool, Text Hash Generator, Text Statistics, UUID Generator, Url Encoder/Decoder
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
Je crée une image côté navigateur avec canvas
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é
de transformer le canvas en blob et de l'envoyer via un formdata
de transformer le canvas en blob et de l'envoyer comme un objet simple
de transformer le canvas en DataURL et de l'envoyer via un formdata
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...
Alors là, on est clairement dans le code du dimanche, et vous allez voir pourquoi...
J'avais envie de faire un outil de visualisation de données facile d'accès et simple, comme un microservice que je pourrais utiliser par la suite dans une de mes applis...
Comme toujours, avant même de voir si ça existerait pas déjà, je me demande comment faire le truc moi-même et ce que je vais pouvoir apprendre avec...
C'est alors que je me dis que le SVG ce serait bien:
redimensionnable
léger
universel
je ne connais pas la génération de SVG en PHP : youpi
Je me lance...
et j'arrive à des résultats pas trop dégueus mais tout se corse (chef-lieu Ajaccio) quand je dois placer le texte (nombres, noms de colonnes etc)
C'est emmerdant à center, c'est emmerdant à redimensionner: bref c'est emmerdant. Pour résumer.
J'en ai tellement chié pour un résultat tellement pas terrible que, d'un coup, je me suis rappelé que mon copain JerryWham avait fait une lib juste pour ça !
phpGraph
Une lib qui permet de transformer des données en graphique au format SVG directement, avec des options de configuration et des rendus différents (ligne, barres, camemberts etc), ça vous tente ? Ben c'est par là :
Ce n'est pas pour visualiser des données épiques, multidimensionnelles ou vraiment très nombreuses (les clés se chevauchent s'il y a trop de données et on peut les masquer en ajoutant hidekeys en paramètre.)
Ce sera sans doute appelé à évoluer mais bon, je me suis bien amusé et j'ai touché du doigt que faire du SVG, ça se fait pas entre deux portes au doigt mouillé...
Ainsi, il suffit d'utiliser la fonction «afficher l'image» de votre navigateur puis de cliquer sur le bookmarklet pour entrer le texte du meme et récupérer l'image générée.