Script bash pour prendre soin de ses contacts

Si, carrément, j’ai d’ailleurs fait une preuve de concept ici : https://wwtmp.coinduf.eu/app.html

C’est une app minimale en VueJS qui fait des requêtes GraphQL à WotWizard.

J’ai d’ailleurs repris cette poc pour ajouter des requêtes Cesium+ http://datajune.coinduf.eu/wotexplorer/

C’est quasiment la même app VueJS, mais ré-écrite un peu différemment.

On se fait une visio quand tu veux (je suis libre ce WE normalement) si tu as besoin d’aide pour prendre les choses en main.

1 Like

On vient de faire une visio avec @Paidge pour regarder comment intégrer des requêtes GraphQL WotWizard à une appli VueJS. Avec @ManUtopiK ils vont voir comment intégrer d3js ou chartsjs pour les graphiques. @gerard94, il faudrait qu’on fasse un fil sur le forum avec des exemples de requêtes WotWizard pour aider à le prendre en main.

2 Likes

Je peux déjà vous mettre toutes les requêtes qu’utilise le client WotWizard actuel.

1 Like
# Dont forget to RTFM (Help/manual.en.pdf) !!! and, above all, page 3.

# All certifications sorted by receivers ($to = true) or by senders ($to = false). Very big. Use with care.
query Certifications ($to: Boolean!, $start: String, $end: String) {
	now {
		number
		bct
	}
	identities(status_list: MEMBER, start: $start, end: $end) {
		uid
		sent_certifications @skip(if: $to) {
			other: to {
				uid
			}
			registration: block {
				bct
			}
			limit: expires_on
		}
		received_certifications @include(if: $to) {
			certifications {
				other: from {
					uid
				}
				registration: block {
					bct
				}
				limit: expires_on
			}
		}
	}
}

# What time is it?
query Now {
	now {
		number
		bct
	}
}

# Calculation of 'uid's distance when she is certified by the extra certifiers 'certs' and list of next best certifiers, chosen in 'group' and limited to 'ansNb' results.
query CalculateDist ($group: [String!], $uid: String, $certs: [String!], $ansNb: Int) {
	now {
		number
		bct
	}
	valD: calcDist(uid: $uid, certifiers: $certs) {
		value {
			ratio
		}
		ok: dist_ok
	}
	list: bestDist(group: $group, uid:$uid, certifiers: $certs, answerNb: $ansNb) {
		id {
			uid
		}
		valD: dist {
			value {
				ratio
			}
		}
	}
}

# Idem for quality instead of distance.
query CalculateQual ($group: [String!], $uid: String, $certs: [String!], $ansNb: Int) {
	now {
		number
		bct
	}
	val: calcQual(uid: $uid, certifiers: $certs) {
		ratio
	}
	list: bestQual(group: $group, uid:$uid, certifiers: $certs, answerNb: $ansNb) {
		id {
			uid
		}
		val: qual {
			ratio
		}
	}
}
 
# Limit dates of availability of memberships.
query LimitsMem ($group: [String!]) {
	now {
		number
		bct
	}
	identities: memEnds(group: $group) {
		uid
		limitDate
	}
}

# Limit dates before revocation.
query LimitsMissing ($group: [String!]) {
	now {
		number
		bct
	}
	identities: missEnds(group: $group) {
		uid
		limitDate
	}
}

# Limit dates of availability of the last five certifications.
query LimitsCerts ($group: [String!]) {
	now {
		number
		bct
	}
	datedIdentities: certEnds(group: $group) {
		id {
			uid
			status
		}
		limitDate: date
	}
}

# All identities sorted by uid. Very big. Use with care.
query Identities ($status: Identity_Status!) {
	now {
		number
		bct
	}
	identities(status_list: [$status]) {
		uid
		pubkey
		hash
		block: id_written_block {
			bct
		}
		limitDate
	}
}

# Find the hashes all identities with their uid or public key beginning by 'hint' and whose status is in 'statuses'.
query IdSearchFind ($hint: String, $statuses:  [Identity_Status!]) {
	now {
		number
		bct
	}
	idSearch (with: {hint: $hint, status_list: $statuses}) {
		revokedNb
		missingNb
		memberNb
		newcomerNb
		ids {
			uid
			status
			hash
		}
	}
}

# Find all informations about the identity whose hash is 'hash'.
query IdSearchFix ($hash: Hash!, $dispDist: Boolean = false, $dispQual: Boolean = false, $dispCentr: Boolean = false) {
	now {
		number
		bct
	}
	idFromHash (hash: $hash) {
		hash
		uid
		pubkey
		id_written_block {
			number
			bct
		}
		lastApplication {
			number
			bct
		}
		limitDate
		status
		sentry
		membership_pending
		membership_pending_limitDate
		minDate
		minDatePassed
		history {
			in
			block {
				number
				bct
			}
		}
		received_certifications {
			certifications {
				from {
					uid
				}
				expires_on
				pending
			}
			limit
		}
		sent_certifications {
			to {
				uid
			}
			expires_on
			pending
		}
		all_certifiers {
			uid
		}
		all_certified {
			uid
		}
		all_certifiersIO {
			id {
				uid
			}
			hist {
				in
				block {
					number
					bct
				}
			}
		}
		all_certifiedIO {
			id {
				uid
			}
			hist {
				in
				block {
					number
					bct
				}
			}
		}
		distance @include(if: $dispDist) {
			value {
				num
				denom
				ratio
			}
			dist_ok
		}
		distanceE @include(if: $dispDist) {
			value {
				num
				denom
				ratio
			}
			dist_ok
		}
		quality @include(if: $dispQual) {
			num
			denom
			ratio
		}
		qualityE @include(if: $dispQual) {
			num
			denom
			ratio
		}
		centrality @include(if: $dispCentr)
	}
}

# Real time of the last block.
query CountMax {
	countMax {
		utc0
	}
}

# History of members entering or exiting the wot.
query MembersCount ($start: Int64, $end: Int64, $text: Boolean! = true) {
	now {
		number
		bct
	}
	events: membersCount(start: $start, end: $end) {
		block {
			number @include(if: $text)
			utc0
			bct @include(if: $text)
		}
		idList @include(if: $text) {
			in: inOut
			id {
				uid
			}
		}
		number
	}
}

# Parameters of the money.
query AllParameters {
	allParameters {
		name
		par_type
		comment
		value
	}
}

# Dispatch 'group' between 'selected' (members), 'others', 'unknown' and 'duplicate'.
query Group ($group: [String!]!) {
	filterGroup (group: $group, status_list: MEMBER) {
		selected
		others {
			... dispPath
		}
		unknown {
			... dispPath
		}
		duplicate {
			... dispPath
		}
	}
}
fragment dispPath on Error {
	uid: mes
	path {
		... on Field {
			name
		}
		... on Rank {
			index
		}
	}
}

# List all distances in 'group', or in wot if 'group' is absent or null.
query Distances ($group: [String!]) {
	now {
		number
		bct
	}
	identities(group: $group, status_list: MEMBER) {
		uid
		distance {
			value {
				num
				denom
				ratio
			}
		}
	}
}

# List all qualities in 'group', or in wot if 'group' is absent or null.
query Qualities ($group: [String!]) {
	now {
		number
		bct
	}
	identities(group: $group, status_list: MEMBER) {
		uid
		quality {
			num
			denom
			ratio
		}
	}
}

# List all degrees of centrality in 'group', or in wot if 'group' is absent or null.
query Centralities ($group: [String!]) {
	now {
		number
		bct
	}
	identities(group: $group, status_list: MEMBER) {
		uid
		centrality
	}
}

# List all sentries
query Sentries {
	now {
		number
		bct
	}
	sentryThreshold
	sentries {
		uid
	}
}

# Display of the Preparatory File.
query WWFile {
	now {
		number
		bct
	}
	parameter(name: sigQty) {
		sigQty:value
	}
	wwFile(full: true) {
		certifs_dossiers {
			... on MarkedDatedCertification {
				datedCertification {
					date
					certification {
						from {
							uid
						}
						to {
							uid
						}
						expires_on
					}
				}
			}
			... on MarkedDossier {
				dossier {
					main_certifs
					newcomer {
						uid
						lastApplication {
							lastAppDate: bct
						}
						distance: distanceE {
							value {
								ratio
							}
							dist_ok
						}
					}
					date
					minDate
					expires_on:limit
					certifications {
						date
						certification {
							from {
								uid
								quality {
									ratio
								}
							}
							expires_on
						}
					}
				}
			}
		}
	}
}

# Display of Permutations.
query WWPerms {
	now {
		number
		bct
	}
	wwResult {
		permutations {
			proba
			permutation {
				id {
					uid
				}
				date
				after
			}
		}
	}
}

# Subscription to the forecasts of the WW window.
subscription By {
	wwResult {
		now {
			number
			bct
		}
		computation_duration
		permutations_nb
		dossiers_nb
		certifs_nb
		forecastsByNames {
			id {
				uid
			}
			date
			after
			proba
		}
		forecastsByDates {
			id {
				uid
			}
			date
			after
			proba
		}
	}
}

# Subscription to the metadata of the WW window.
subscription Meta {
	wwFile(full: false) {
		now {
			number
			bct
		}
		certifs_dossiers {
			...on MarkedDatedCertification {
				datedCertification {
					date
					certification {
						from {
							uid
						}
						to {
							uid
						}
						expires_on
					}
				}
			}
			...on MarkedDossier {
				dossier {
					main_certifs
					newcomer {
						uid
						lastApplication {
							lastAppDate: bct
						}
						distance: distanceE {
							value {
								ratio
							}
						}
					}
					date
					minDate
					expires_on:limit
					certifications {
						date
						certification {
							from {
								uid
								quality {
									ratio
								}
							}
							expires_on
						}
					}
				}
			}
		}
	}
}
2 Likes

J’adore le nouvel utilitaire :

https://wot-wizard.duniter.org/23calculator

Vous pourriez peut-être l’expliquer un peu mieux dans l’aide pour qu’il n’y ait pas de confusion, je n’ai pas non plus compris comment cela fonctionnait au début.

Une question… comment appliquer ce paramètre ?
“Nombre maximal de propositions de certificateurs :”

Merci.

2 Likes

Oui ça me sera utile quand je vais la redévelopper pour wotwizard.netlify.app
J’ai compris qu’il fallait saisir les noms de son groupe local (ou pas) ainsi qu’une identité qui va devenir membre (ou pas) pour obtenir une liste de certificateurs potentiels et déterminer le taux de respect de la règle de distance ou la qualité obtenue. Mais tout n’est pas clair (en tous cas le champ « Nouveaux certificateurs »). Qu’est-ce que ça veut dire ça par exemple ?


https://wotwizard.netlify.app/ est superbe… pourriez-vous mettre i10n dessus pour le traduire en anglais/espagnol ?

Dans mon cas, cela m’a aidé à prévoir dans quelle mesure la qualité des liens d’une DÉJÀ membre (carmela dans ce cas) (vous devez écrire ce membre dans le champ que vous mentionnez, « Pseudo de l’identité considerée ») augmenterait s’il recevait de nouvelles certifications (que vous pouvez mettre dans le champ « Nouveaux Certificateurs »).

La qualité actuelle de « carmela » est de 76% et avec ces 4 nouvelles certifications, elle passerait à 79,39%, presque 80%

Le calculateur a deux fonctions.

  • Calculer la règle de distance, ou la qualité, d’une identité, placée dans le champ « Pseudo de l’identité considérée » (ou « uid ») si elle devient certifiée par les membres inscrits dans le champ « Nouveaux certificateurs » (ou « certificateurs »). Si le champ « uid » est vide, le calcul se fait pour n’importe quel éventuel futur membre, à partir des seuls « certificateurs ».

  • Prévoir, parmi les identités placées dans le premier champ « groupe », les membres qui apporteront la meilleure ‹ distance › ou qualité à l’identité du champ « uid » (qui peut toujours être vide) s’ils la certifient, en tenant compte des « certificateurs » déjà inscrits. Si le champ « groupe » est vide, la prévision s’étend à l’ensemble des membres de la toile de confiance. Le nombre maximal de membres proposés est inscrit dans le dernier champ.

Stratégie d’utilisation possible pour l’entrée d’un nouveau membre :

  1. Entrer dans « groupe » les identités présentes dans le groupe participant.
  2. Laisser le champ « uid » vide.
  3. Cliquer sur OK.
  4. Choisir une des propositions et copier le pseudo dans le champ « certificateurs ».
  5. Cliquer sur OK pour afficher le résultat et les nouvelles propositions actualisées.
  6. Revenir au 4.

Pour le retour d’un membre exclu, faire de même, mais mettre son pseudo dans le champ « uid ».

etc…

Je n’ai pas mentionné le respect de la licence, qui va évidemment de soi.

2 Likes