Ğ1Quest 🜛 Nouveau client Ğchange

@Guy :
J’ai comme un doute. Est-ce un noeud gchange?

1 « J'aime »

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 :pray:

2 « J'aime »

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 ! :slight_smile:

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
)

3 « J'aime »

Merci, excellentes API et documentation :+1:

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.) Â»

1 « J'aime »

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.

2 « J'aime »

@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


2 « J'aime »

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. :pray:

Peux tu nous donner le dépÎt de code libre stp ?
N’est libĂ©rĂ© que ce qui est publiĂ© :wink:

1 « J'aime »

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.

2 « J'aime »

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 ».

2 « J'aime »

Ce qui est evident lĂ  pour moi c est que vous faites lĂ  un procĂšs d intentions.

2 « J'aime »