@Guy :
Jâai comme un doute. Est-ce un noeud gchange?
noeud laisse entendre blockchain alors pod tel cesium+ porte moins Ă confusion. tout le monde peut heberger gchange et ses annonces, en modĂ©rer certaines Ă sa maniĂšre etcâŠ
@kalimheros > Ä1Quest se connecte au nĆud / pod https://data.gchange.fr Comme prĂ©cisĂ© par @nessbyz, et comme on peut le lire dans la documentation dâĂ©ventuels autres nĆuds / pod pourraient ĂȘtre paramĂ©trĂ©s diffĂ©remment.
@Olympe17 > Votre contribution est dans le top 3 :
Si des efforts sur Ä1Quest continuent dans la durĂ©e, votre contribution nây sera pas Ă©trangĂšre
Excellent ce nouvel outil ! Jâaime bien dĂ©cidĂ©ment cette pĂ©riode oĂč des dĂ©veloppeurs de clients graphiques font les choses Ă leur sauce ! Comme pour Ginkgo. Je trouves cela trĂšs motivant ! Et ça me donne des idĂ©esâŠ
Donc bravo @Guy !
Au passage, jâai fait une mise Ă jour du Pod Gchange. Il nâĂ©tait plus synchro Ă cause de requĂȘtes inadaptĂ©es Ă la taille de la G1.
Je penses que je vais aussi mettre en place un redĂ©marrage rĂ©gulier du service, pour ĂȘtre sĂ»r quâil soit « up and ready » (ElasticSearch 2.4 a tendance Ă saturer sa mĂ©moire au bout dâun momentâŠ)
Merci, excellentes API et documentation
Jâai cassĂ© ElasticSearch avec mes requĂȘtes exotiques ?
Non pas du tout. En fait il sâagissait de requĂȘte internes, pour la rĂ©cupĂ©ration de la liste des membres de la G1. Cette requĂȘte ci exploitait une forme simple (comme les tiennes par exemple). Mais depuis que la G1 a passĂ© les 10 000 membres (sur tout lâhistorique, et pas seulement les membres actifs) ES oblige a passer par une requĂȘte de forme scroll
. CâĂ©tait tout bĂȘte Ă corriger, mais ca plantait pas mal de truc dans le pod.
Au sujet de ta requete, un moyen plus simple serait dâajouter une case Ă cocher, dans le formulaire dâannonce, par exemple « Livraison acceptĂ©es ? » (Oui/Non) (en JSON : "delivery": true
). Quâen dis tu ? Ou baut-il autre chose de plus complexe, en gĂ©rant une liste de type de livraison ? Ou encore un champ texte additionnel (si livraison acceptĂ©e) : « Type de livraison (« Mondial relay », « La Poste », etc.) »
Oui, ce serait pratique. Auquel cas, est-ce quâil y aurait un moyen de mettre Ă jour les anciennes annonces pour dĂ©finir ce champ sur « true » quand câest pertinent ?
Il y aurait quelques 2003 annonces Ă traiter (et je nâai comptĂ© que celles en français). Voici la requĂȘte ElasticSearch que jâai tapĂ© dans Insomnia pour les compter :
{
"size": 10,
"_source": [
"title",
"description"
],
"query": {
"bool": {
"filter": [
{
"term": {
"type": "offer"
}
},
{
"range": {
"stock": {
"gte": 1
}
}
}
],
"should": [
{
"match": {
"description": {
"query": "colis",
"fuzziness": "0",
"fuzzy_transpositions": true
}
}
},
{
"match": {
"description": {
"query": "mobicoop",
"fuzziness": "0",
"fuzzy_transpositions": true
}
}
},
{
"match": {
"description": {
"query": "envoi possible",
"operator": "AND",
"fuzziness": "0",
"fuzzy_transpositions": true
}
}
},
{
"match": {
"description": {
"query": "mondial relais",
"operator": "AND",
"fuzziness": "0",
"fuzzy_transpositions": true
}
}
},
{
"match": {
"description": {
"query": "mondial relay",
"operator": "AND",
"fuzziness": "0",
"fuzzy_transpositions": true
}
}
},
{
"match": {
"description": {
"query": "mondiale relais",
"operator": "AND",
"fuzziness": "0",
"fuzzy_transpositions": true
}
}
},
{
"match": {
"description": {
"query": "mondiale relay",
"operator": "AND",
"fuzziness": "0",
"fuzzy_transpositions": true
}
}
},
{
"match": {
"description": {
"query": "frais de port",
"operator": "AND",
"fuzziness": "0",
"fuzzy_transpositions": true
}
}
},
{
"match_phrase": {
"description": {
"query": "La Poste",
"operator": "AND",
"fuzziness": "0"
}
}
},
{
"match": {
"description": {
"query": "LaPoste",
"fuzziness": "0"
}
}
},
{
"match": {
"description": {
"query": "chronopost",
"fuzziness": "0",
"fuzzy_transpositions": true
}
}
},
{
"match": {
"description": {
"query": "colissimo",
"fuzziness": "0",
"fuzzy_transpositions": true
}
}
},
{
"match": {
"description": {
"query": "bordereau",
"fuzziness": "0",
"fuzzy_transpositions": true
}
}
},
{
"match": {
"description": {
"query": "shop2shop",
"fuzziness": "0",
"fuzzy_transpositions": true
}
}
},
{
"match": {
"description": {
"query": "shop 2 shop",
"operator": "AND",
"fuzziness": "0",
"fuzzy_transpositions": true
}
}
}
],
"minimum_should_match": 1
}
},
"sort": [
{
"creationTime": "desc"
}
]
}
Il doit y avoir quelques faux positifs dans le lot (par exemple si la description contient « pas dâenvoi possible » au lieu de « envoi possilble », donc sâil y a possibilitĂ© de modifier la valeur du champ delivery, il faudra une vĂ©rification humaine annonce par annonce si on veut ĂȘtre exact (mais on peut aussi dĂ©cider dâĂȘtre approximatif ; ça ne devrait pas crĂ©er tant de dĂ©convenues que ça).
Ăa pourrait ĂȘtre intĂ©ressant pour qui voudrait dĂ©velopper un client Gchange qui afficherait le calcul des frais de port en euros (qui dĂ©pendent, en gros, du poids, et de la distance parcourue). Du coup un champ « poids » serait intĂ©ressant Ă©galement.
Lâaffichage des types de livraison est une question que je nâarrive pas trop Ă apprĂ©hender ; je ne sais pas quelles sont les consĂ©quences de lâoubli dâune option (peut-on en rajouter quand on veut dans ElasticSearch ?). Que se passe-t-il si un service de livraison change de nom ? Et les services de livraisons nâont pas lâair dâĂȘtre les mĂȘmes pour lâhexagone et pour lâEspagne :
google.com/search?q=enviar+un+paquete+a+Francia
Mais je ne connais pas bien tout ça.
Et il y a aussi potentiellement des modes dâenvois non conventionnels, comme le transport de colis via Mobicoop, oĂč lĂ le poids semble moins important que les dimensions du colis.
Petite reflexion utilisateur par rapport Ă vos interogations :
Je pense que câest plus compliquĂ© que cela. En effet, lorsque jâenvoi un colis, jâenvoi souvent plusieurs choses dedans, donc le poids va dĂ©pendre de la commande totale passĂ©e, plus que dâun seul produits envoyĂ©. Et comme chaque commande est diffĂ©rente Ă chaque Ă©change âŠ
De plus, lorsque lâon ouvre un site de transporteur, il nous communique le prix en fonction du poids total de la commande que lâon souhaite expĂ©diĂ©, et cela selon ces propres option/palier tarifaire. La poste nâa pas dutout les mĂȘmes que mondial relay.
Pour ma part, je regarde sur chacun des transporteurs qui sont succeptible de livrer proche de chez moi, pour choisir le meilleur prix selon leur condition (poste - mondial relay - shop to shop - mobiccop - G1colis)
Concernant la recherche par envoi possible, en effet certains ont pu mettre « pas dâenvoi possible », dâautres auront fait des fautes dâorthographe « envoie possible », « envois possible ». Dâautres auront utiliser dâautres termes « Frais de port Ă la charge de lâacheteur » « expĂ©dition possible » expĂ©dition Ă la charge de lâacheteur" - Et encore dâautre ne prĂ©cise rien, et on voit cela au en MP au moment de conclure lâĂ©change Etc âŠ
Peut-ĂȘtre quâune recherche par lâidĂ©e « retrait sur place » peut donner moins dâerreur dans la requĂšte, et le resultat attendu.
Un bouton Ă cocher « expĂ©dition possible » dans lâannonce peut sembler sympa car le rĂ©dacteur aura moins tendance Ă oublier de parler de cette information, et nâutilisera pas dâautre terme que celui recherchĂ© par la requĂšte.
@kimamila > Du coup de ce que dit @Ma.aude, les informations essentielles et connues a priori semblent effectivement ĂȘtre :
- le booléen « envoi possible »
- le poids de chacun item, qui permet de calculer informatiquement le poids total du colis, qui influe sur le prix de la livraison
- la taille de chaque item, qui permet de se faire des idées de des dimension possible du colis (suivant comment les items sont empilés et packagés), et de savoir si ça passe dans le coffre de la voiture qui propose le transport de colis sur Mobicoop
Mais il semble apparent maintenant que le mode de livraison est en partie choisie par lâacheteur, en fonction de plusieurs facteurs. Lâacheteur peut par exemple prĂ©fĂ©rer payer un peu plus cher pour un colissimo livrĂ© Ă domicile que pour une livraison dans un point de collecte Mondial Relay quâil nâaura pas forcĂ©ment le temps dâaller chercher.
Donc si on propose au vendeur de renseigner le type de livraison, il semble plus intĂ©ressant de mettre une checkbox des envois possibles quâun select ou un bouton radio dâune livraison dĂ©finie par le vendeur a priori, tout en gardant Ă lâesprit quâa partir dâune certaine dimension de colis comportant plusieurs items, certains modes de livraison comme MobiCoop ne sont plus envisageables, mais tout ça doit probablement ĂȘtre discutĂ© en MP entre le vendeur et lâacheteur.
e vais dĂ©jĂ commencer par ajouter une checkbox « Envoi possible ». Au niveau de tes requĂȘtes, cela va grandement les amĂ©liorer, en utilisant une index beaucoup plus efficace que ta requete par mots clefs. Par ailleurs, cela rend le filtrage exploitable quelque soit la langue de lâannonceâŠ
Super ! Y a-t-il un quelconque moyen pour les administrateurs ou modérateurs de Gchange de mettre à jour les anciennes annonces pour donner la valeur vrai
Ă ce nouveau champ ?
non, les modĂ©rateurs ne peuvent pas modifier le JSON, sous peine que la signature par pubkey du document json ne soit plus la bonne. Les autres pod qui recevrait alors ce document lâexclurait.
Les documents JSON sont réputé intÚgre sur le réseau, grùce à cette signature que chacun peut vérifier.
Les actions des modérateur se résume aux suppressions : dans ce cas, un document JSON de suppression est émis par le modérateur, et les pods qui reconnaissent ce modérateur vont appliquer la suppression, et propager le document de suppression.
Ăvidemment, tout Ă©metteur dâun document peut lui mĂȘme Ă©mettre sa suppression, et elle sera acceptĂ©e partout. En revanche, je nâai pas codĂ© de bouton de suppression partout, dans lâApp cliente
Jâai mis au point une application qui est raccordĂ©e Ă Gchange.
Il sâagit de TiddlyWiki(TW), un logiciel de prise de notes « multimedia » stockĂ© sur IPFS auxquels sâapplique le protocole de synchronisation « copain dâabord »
Pour accéder à cette application parallÚle, il faut « transposer » la clef publique dans son format IPNS
Voici la façon de faire en python
#!/usr/bin/env python3
import sys, re, base58, base64
import cryptography.hazmat.primitives.asymmetric.ed25519 as ed25519
from cryptography.hazmat.primitives import serialization
shared_key = sys.argv[1]
decoded_shared = base58.b58decode(shared_key)
ipfs_shared = ed25519.Ed25519PublicKey.from_public_bytes(decoded_shared)
ipfs_shared_bytes = ipfs_shared.public_bytes(encoding=serialization.Encoding.Raw,
format=serialization.PublicFormat.Raw)
ipfs_pid = base58.b58encode(b'\x00$\x08\x01\x12 ' + ipfs_shared_bytes)
print(format(ipfs_pid.decode('ascii')))
et en javascript
const bs58 = require('bs58');
const nacl = require('tweetnacl');
const crypto = require('crypto');
const shared_key = process.argv[2];
const decoded_shared = bs58.decode(shared_key);
const ipfs_shared = nacl.sign.keyPair.fromPublicKey(decoded_shared);
const ipfs_shared_bytes = Buffer.from(ipfs_shared.publicKey);
const ipfs_pid = bs58.encode(Buffer.concat([Buffer.from([0, 36, 8, 1, 18, 32]), ipfs_shared_bytes]));
console.log(ipfs_pid.toString('ascii'));
Jâaimerai bien ajouter ces liens IPNS Ă Gchange et G1Quest et discuter API avec vous⊠Quâen dites-vous ?
Prouvez nous le contraire !
Ăa marche ; je mettrai Ă jour G1Quest avec la nouvelle requĂȘte quand ce nouveau champ sera opĂ©ration et que 30 annonces auront mis ce champ Ă vrai
.
Peux tu nous donner le dépÎt de code libre stp ?
Nâest libĂ©rĂ© que ce qui est publiĂ©
Ce nâest que du code navigateur donc câest publiĂ©. Et câest du vanilla javascript non minifiĂ© donc ça se scrappe bien. Si vraiment il y a des gens intĂ©ressĂ©s, je peux faire une tarball (moyennant finances), voire mĂȘme publier sur un depĂŽt git. Mais je ne recevrai pas de pull request pour lâinstant car le code est jeune et sujet Ă beaucoup de refactoring, et je nâai jamais pu supporter le travail de groupe donc ce nâest pas le moment. PS : jâemploie le mot « libre » au sens de la Free Software Fondation oĂč est libre un logiciel pour lequel les sources sont accessibles Ă tous les utilisateurs utilisant le logiciel, et les versions partielles et complĂštes de G1Quest sont deux logiciels diffĂ©rents.
Cela ne suffit pas, si aucune licence (dâun point de vue juridique : GPL, AGPL, etc.) nâest publiĂ©e. On ne peut pas savoir quelle licence est applicable. Notamment si veux un jour rendre le tout payant, ou mĂȘme changer de licence.
Si tu ne veux pas utiliser de dĂ©pĂŽt gĂźt, tu peux au moins mettre un « Ă propos » avec le texte ou le lien vers le licence. Le lien vers le code source (source://âŠ)
Je ne vois pas la difficultĂ© de faire les choses dans les rĂšgles. Sinon, ça ne donne pas confiance. Autant aller jusquâau bout.
La licence câest une GPLv3 pour le code. Pour les Ă©lĂ©ments graphiques, ils sont essentiellement sous la licence Flaticon. Vous pouvez retrouver le dĂ©tail dans le fichier README. VoilĂ pour les rĂšgles.
AprĂšs, il nây a pas grand chose dâintĂ©ressant Ă Ă©tudier dans le code en lui-mĂȘme, surtout Ă lâheure de GPT-4 oĂč une bonne partie peut se rĂ©gĂ©nĂ©rer rapidement avec quelques prompts (ce qui au passage diminue beaucoup lâintĂ©rĂȘt dâĂ©tudier un logiciel libre, surtout aussi court que G1Quest).
Il me semble plus intĂ©ressant dâĂ©tudier directement les prompts ChatGPT qui sont, au final, le code source du code source. Ils permettent de mettre en exergue les problĂšmes rencontrĂ©s, en laissant de cĂŽtĂ© tout ce qui est facile ou Ă©vident, et leur publication permet en plus dâapprendre Ă en Ă©crire des qui soient efficaces. Voici ceux qui ont servi Ă gĂ©nĂ©rer G1Quest :
Je dĂ©conseille quiconque dâĂ©tudier le Javascript lui-mĂȘme, car ce sera douloureux et probablement dĂ©lĂ©tĂšre. Les CSS (space, magic) sont plus intĂ©ressants en revanche.
Le nĂ©ophyte en ElasticSearch trouvera probablement utile de copier/coller les objets quâil trouvera dans le dossier queries et de les convertir en JSON pour les passer dans Insomnia afin de faire ses propres tests.
Curieux de voir si Ă lâavenir la FSF exige que les prompts donnĂ©s aux IA soient publiĂ©s pour permettre de qualifier un logiciel de « libre ».
Ce qui est evident lĂ pour moi c est que vous faites lĂ un procĂšs d intentions.