Qyu.re Mon alternative personnelle à Codeanywhere

4 min de lecture

Codeanywhere, c’était mon éditeur de code que j’aimais d’amour.
Celui qui me laissait ouvrir un fichier sur un serveur FTP, le corriger, enregistrer, et voir le site bouger dans la foulée.

Je l’utilisais depuis 2013. J’en parlais déjà ici : Avec quoi je code ?
Treize ans de lune de miel.

Puis le support de la version que j’utilisais s’est arrêté.
Ça faisait déjà quelques années que le support me renouvelait mon compte manuellement, en me prévenant que, si ça se trouve, ça ne tiendrait que quelques mois.
Ça a tenu plusieurs années.

Mais au milieu de l’été, ça s’est arrêté pour de vrai.
En plein développement de Ets-Allio.fr.

La chiasse.

J’ai cherché, j’ai cherché, j’ai trouvé des trucs surement mieux, mais plus compliqués. Rien qui ne correspondait à mon utilisation.

Aujourd’hui, tout passe par des conteneurs, des repos GitHub, des pipelines, des environnements qui se montent et se démontent surement. Je n’utilise pas les notices de meubles Ikea.
C’est surement propre. Surement carré. Surement pro.

Mais c’est chiant. Et ce n’est pas ma façon de coder.

Tout ce que je veux c’est l’inverse.
DU SIMPLE.
Ouvrir un fichier, le modifier, enregistrer. Fin de la partie.
Ctrl + O, tiptiptip, Ctrl + S, Alt + F4. Mic drop.

Et tout ça,… directement en prod !

Pas de build, pas de branche à merger pour corriger une virgule, pas d’usine à gaz.

Rajouter ce putain de point virgule oublié ne mérite pas un pipeline de prod.

Le cahier des charges tenait en 2 mots.

Refaire Codeanywhere.

Avec toutes les fonctions que j’utilisais déjà au quotidien.
Plus celles que j’aurais aimé y trouver.

C’est tout.
En réfléchissant, c’est déjà beaucoup.

J’avais le NDD qyu.re qui dormait dans ma collection de noms de domaine.
(Oui, j’en collectionne. Non, je ne me soigne pas.)
Autant lui donner un vrai boulot plutôt que de le laisser prendre la poussière.

J’avais aussi en candidat partir.la, mais ça aurait été con de le cramer là-dessus.
Il mérite peut-être mieux qu’une arborescence de fichiers et du texte en monotype.

Ce que fait l’outil, la liste complète (?)

Connexion et comptes

  • Coffre de serveurs FTP / FTPS, mots de passe chiffrés.
  • Multi-utilisateurs, avec partage d’accès révocable (lecture seule ou écriture).
    Ça, c’est une fonction qui manquait sur Codeanywhere. Ici j’ajoute un serveur, et je peux le partager avec Lionel, ou Laure, ou n’importe qui qui bosse avec moi sur un projet, sans avoir à partager les identifiants.
  • Relais HTTPS pour les serveurs qu’on ne peut pas joindre en direct, et un diagnostic de connexion intégré (Qyu.re est hébergé sur O2switch qui ne veut pas communiquer en FTP avec OVH).

Éditer

  • Arborescence, onglets multi-fichiers, plusieurs serveurs ouverts en même temps.
    Les onglets, c’est la vie. #team+50
  • Coloration syntaxique (HTML, CSS, JS, PHP, SQL, logs) et autocomplétion.
  • Recherche / remplacement dans les fichiers ouverts ou sur tout un dossier, arborescence de dossier ou tout le serveur.
  • Beautify / Minify.
  • Validation de la syntaxe avant d’enregistrer.
    J’aimais Codeanywhere justement car tu pouvais rajouter ton point-virgule qui manquait dès la première erreur 500.
    Maintenant, je n’ai même plus l’occasion d’oublier ce point-virgule ou cette accolade fermante imbriquée dans une cascade de 9.
  • Conversion d’encodage et de fins de ligne, édition des fichiers non-UTF-8.
  • Thème clair / sombre, panneaux redimensionnables, position du curseur mémorisée.

Gérer les fichiers

  • Uploader, télécharger, dupliquer, déplacer, zipper, dézipper, corbeille.
    La corbeille. Sur ton serveur de prod, … Que celui qui n’en a jamais rêvé… comprenne qu’il est surement tout à fait normal comparé à moi.
    Et oui, tout ça pour un fichier ou un dossier (et ses sous-dossiers).
  • chmod (une case à cocher à la FileZilla, pas un chiffre à retenir), usage disque, propriétés.
  • Lecture de la fin des gros logs et suivi en direct (tail -f).

Voir

  • Aperçu des images + zoom + compression.
    Même plus besoin de télécharger une image, de la passer sur TinyPNG et de la réuploader. Un bouton et le panda vient directement te faire ça à domicile sur ton serveur.
  • CSV en mode texte ou tableur.
    Pareil, tu bosses sur ton CSV en prod, on est pas là pour faire semblant.
  • SVG éditable en code avec visualisation des modifs en direct.
    Qui d’autre édite ses SVG en code par ici ?

Travailler à plusieurs

  • Révisions : chaque enregistrement est archivé, avec diff et restauration.
    Ça, je l’utilisais pas mal sur Codeanywhere. On pouvait d’ailleurs s’en servir comme une « poubelle », si tu supprimais un fichier, tu en recréais un au même endroit avec le même nom et tu pouvais retrouver son contenu via la révision.
  • Présence en temps réel et journal d’activité : qui édite quoi, en ce moment.
    Ça évite qu’on écrase un fichier qu’un autre est en train d’éditer.

Les trucs plus récents

Chaud comme je suis, j’ai encore rajouté des trucs suivant mes besoins et je vais continuer à le faire.

  • Serveur MCP.
    Mon IA peut éditer les fichiers à ma place, avec des droits bornés : un seul serveur, voire un seul dossier, en lecture seule si je veux.
  • Upload de photo en masse.
    J’ai eu besoin de scanner un livre. Long. Chiant.
    Donc j’ai rajouté une fonction dans Qyu.re pour le faire.
    Je mitraille avec le téléphone, les photos partent direct sur le serveur, sans jamais être enregistrées dans la pellicule, métadonnées EXIF supprimées, et redimensionnées au passage.

Et le plus beau dans tout ça :

Je n’ai pas écrit une ligne de code

Tout est vibecodé.
Avec Claude.

Je dis ce que je veux.
Claude fait.
Je teste, je râle, il refait, je valide.

Voilà

Ce n’est pas à vendre, c’est juste l’outil dont j’ai besoin, et qui me sert tous les jours.

Si vous en avez besoin, je vous crée un compte, ou vous file le code.

Codeanywhere je l’aimais d’amour.
Qyu.re Faisons des enfants.

Anti-spam pour formulaire de contact universel

1 min de lecture

Cela va faire maintenant 20 ans (!?) que j’utilise une technique anti-spam que je trouve miraculeuse.
Elle est pourtant SI SIMPLE que je me demande encore tout le temps pourquoi elle n’est pas universelle…

Mais si elle était universelle, elle ne fonctionnerait simplement plus.

Je protège tous mes formulaires de contact avec cette technique depuis donc de très nombreuses années.

La technique se base facilement sur le fait que les robots spammeurs veulent remplir tous les champs de votre formulaire.

J’ajoute donc un champ URL dans mon formulaire et je le cache en CSS.

<style>
    #monform input[type=url]{display:none}
</style>
 
<input id="url" name="url" type="url">

 

Et en récupérant mon formulaire, je vérifie si le champ URL est rempli.
S’il l’est, c’est que ce n’est pas un humain qui a rempli le formulaire (sinon, il n’aurait pas vu le champ).
Et donc ça dégage.

<?php

// Tu recup tes variables et leur fait un petit traitement de sécurité au besoin ici

$message = $_GET['m'];
$email = $_GET['e'];
[…]
$url = $_GET['u'];


// Tu t'assures que tous les champs requis sont là et surtout que le champ URL est vide
// C'est le empty($url) qui est important ici

if (isset($message) && isset($email) […] && empty($url)) {
    // Tu fais tes expéditions d'email comme tu le veux (Perso, je passe par l'API Mailjet)
    […]
    // Important, si tu envoies une confirmation de réception à l'expéditeur, n'envoies pas le message d'origine
    // Les spammeurs pourraient utiliser ton accusé de réception pour faire passer leurs SPAM.
}

// Et si le champ URL est rempli, tu réponds à l'expéditeur d'aller se faire voir dans d'autres contrés.
elseif (isset($url)) {
    echo '<center><img src="https://pbs.twimg.com/media/CNzgBseWwAQ90Nw.png:large" alt="Hahaha"/><br>Please bitch</center>';
}


?>

Remerciez Xakan pour sa demande.

GaroGorille – Jour 1 La genèse

3 min de lecture

Gare au Gorille , c’est le coach en assurance qu’est pas sexy, mais qu’est sympa quand même.

Mais d’où m’est venue cette idée ?

En effet, je n’ai aucun lien avec le monde de l’assurance.
Comme tout le monde, c’est un domaine où je n’ai pas envie de mettre les pieds, et plus j’en reste loin et mieux je me porte.

Rien que de penser à devoir déclarer un sinistre, j’en ai des sueurs froides…
Car je ne sais pas par où commencer à chercher, qui contacter, voir même simplement si je suis couvert.

Si vous êtes aussi dans ce cas-là, levez-vous tapez dans vos mains .
Sans faire exprès, je viens de déclencher la plus grande standing ovation de France avec des centaines de milliers de personnes debout en train de taper dans leurs mains.

Mais tout ça, ne vous dis pas d’où m’est venu l’idée.
Donc comme hier : petit retour dans le passé.

Nous sommes au printemps en 2015 ou 2016.
Je travaille chez Jardiforet.com.

Un client, un paysagiste, vient nous voir pour nous demander des duplicata de factures car il s’est fait voler sa camionnette et tout son matériel à l’intérieur durant la nuit.
On lui dit de repasser dans quelques jours le temps de lui préparer tout ça.

Les jours passent, et il revient pour nous remercier du beau tas de factures qu’on lui avait réimprimé, mais qu’au final, il n’en aurait pas besoin.

On lui demande plus d’explications et il nous explique qu’il a commencé son activité en 1998.
Et qu’il a souscrit son assurance en 1998, et qu’elle n’avait jamais été revue, et donc que son matériel était assuré à hauteur de 1000 francs.

Son assurance lui a donc fait un chèque de 150€ et pour le coup ne lui avait pas demandé de justificatifs.

Son assurance n’avait pas été revue depuis presque 20ans, enfin presque.
Le montant à payer a lui bien augmenté tous les ans pour passer les plus de 150€ annuel.

On en parle entre collegues. Il devait y avoir Lionel LENGY, Melvyn Godard, et les autres.

Moi cette histoire me travaille.
Je prends conscience que je ne sais pas si ma nouvelle télé, grande comme un lit, est couverte par mon assurance.
Je ne sais pas comment évaluer le montant de mes bien.
Je ne sais pas où trouver mon contrat d’assurance.
Je ne sais pas quoi faire en cas de sinistre.
Je ne sais pas vers qui me tourner pour avoir ces informations.

Donc j’ai décidé d’agir aussitôt !

Non, je déconne, j’ai rien fait.
Je me suis contenté de dire que ça serait bien si une application pouvait savoir ça pour moi.

Les semaines et les mois ont passé, mais cette crainte de ne rien savoir sur mes assurances me hantait toujours.

Puis vint décembre et une soirée Startup et Manala organisée au Technopole Mulhouse. Une sorte de soirée promotionnelle pour le Startup Week End Mulhouse qui se tient généralement au printemps, où il y a à manger et à boire.

Une session de pitch training est organisée.

Je n’en étais pas à mon premier Startup Week End et j’ai donc décidé de passer devant tout le monde avec mon idée.

En quelques minutes j’ai rédigé la première version du pitch de GaroGorille.

La version même qui n’a presque pas changé et qui est devenue culte.

Les réactions sont bonnes.
Tout le monde confirme que c’est un problème universel.

Cependant, les technologies pour réaliser ces technologies sont lourdes et assez peu accessibles.
Il faut réussir à capter les contrats d’assurances, les faire passer par un OCR, et surtout réussir à les interpréter par une machine…

Cependant, une crainte exprimée s’est peu à peu dégagée.

Les gens me disaient qu’ils aimeraient sauvegarder leurs factures dans un endroit sûr et plus en dessous du frigo ou dans le tiroir d’une vieille commode oubliée dans un couloir.
En 2018 je lance un premier sondage en ligne.

Les gens sont prêts à payer pour sauvegarder leurs factures en ligne, à condition que cela soit hyper simple d’utilisation.
Ça, c’était à ma portée.

J’ai donc bricolé quelques POC à base de MMS, mais sans jamais aller plus loi.

Cette idée, je la gardais pour les SWMLH.

Mon idée n’était jamais retenue.
Mais ce n’était pas grave.
Je me prêtais au jeu du pitch connu de tous.

Mais cette année, quand mon idée a été retenue, j’ai réfléchi quelques minutes et j’ai compris qu’avec l’aide des technologies actuelle, cette application était enfin réalisable de maniere réaliste !

Je vais enfin pouvoir travailler sur une crainte qui me panique depuis de nombreuses années.