On peut très bien commencer un projet opensource et s'apercevoir que cela ne fait pas bouillir la marmite.
Oui
et voir que beaucoup utilisent le résultat de ton travail sans contribuer en retour.
Aucune licence libre n'oblige un utilisateur à contribuer en retour. Si tu veux poser des conditions à l'utilisation de ton logiciel (aka: faites des contribs), ce n'est plus du libre.
Du côté d'Amazon, c'est pas leur coeur de métier donc c'est plus facile pour eux d'arriver une fois que le produit fonctionne bien et de faire le chevalier blanc.
Tout a fait
quel est le business modèle pour réussir avec de l'opensource?
De ce que j'ai compris, l'opensource (et le libre de manière plus général) nécessite de l'argent (pour payer les devs, la maintenance, etc…). Rien n'est gratuit.
AMHA, Une société qui ne fait QUE de l'opensource est destinée à faire faillite.
Les Google/Amazon/Microsoft peuvent se permettre de faire de l'open-source car ils ont un revenu régulier conséquent qui ne vient pas (directement) de l'open source.
car AWS ne jouaient pas le jeu du libre d'après eux
Le mot clé ici c'est "d'après eux". Il semblerait que Elastic interprète libre comme "on fait de l'opensource pour bénéficier de la hype, mais en vrai ça nous fait chier que les gens utilisent les libertés qu'on leur a donné et qu'on avait promis de ne pas retirer".
Je sais pas si Amazon fait du "libre-washing", mais ils sont déjà plus dans l'esprit OpenSource/Libre que Elastic.
Tout le monde n'a pas le même usage de Kubernetes.
Chaque pod a une IP, ensuite chaque service de type ClusterIP en a une aussi. Je suppose que quand tu es un Google ou un OpenAI[1] tu as beaucoup de pods/services, et donc besoin de beaucoup d'IP.
En tout cas, moi et ma petite boite nous avons pour l'instant 3 noeuds avec moins d'une 10aine de services.
Après, j'avoue c'était à moitié du troll, je suis pas contre l'IPv6, j'aimerais juste que ce soit transparent pour moi en tant qu'utilisateur (ce que ma Box et des outils comme Kubernetes font très bien).
A l'époque ou je faisais de l'auto-hébergement, ma box internet redirigeait certains ports sur un serveur local, qui avait un reverse proxy vers mes backends.
Le NAT c'est la box qui le gérait, pas moi. J'aime bien déléguer la complexité à d'autres dont c'est le métier.
EDIT: Et je m'attends à ce que soit la box qui gère l'IPv6, pas moi. Je m'attends à ce que ce soit transparent.
J'ai quand même peur que le fork version Amazon tente de t'enfermer dans leur écosystème.
Par contre, monétiser de l'open source quand on est pas une multinationale, c'est compliqué. Je préfère le modèle de Sentry1, d'abord proprio ensuite open-source, plutôt que faire de belles promesses (ne jamais dire jamais).
Pour ma part, je passe par ansible pour l'orchestration de mon serveur ldap (et de tout le reste tant qu'à faire), et éventuellement phpldapadmin pour aller explorer l'annuaire.
Quand la plupart des libs scientifique Python sont développées (partiellement ou entièrement) en C/C++ (numpy, tensorflow, …), il n'est pas si étonnant d'en voir apparaître en Rust.
Il faut bien se rendre compte que Python ne fait souvent que office de glue entre les différentes briques de ta pipeline de traitement de données.
Mais rends la tâche du programmeur extrêmement difficile car il est quasiment impossible de faire un programme un peu complexe qui n'a pas une « undefined behavior ».
Je vais avoir besoin de savoir ce que tu appelle programme un peu complexe et aussi d'exemple d'undefined behavior qu'on ne peut éviter.
J'ai pas tout lu (par flemme j'avoue) donc je vais parler de mémoire. Il me semble que les undefined behavior du C correspondent à des cas très précis et le plus souvent documenté par l'implémentation.
Quand on fait du bas niveau, il ne faut pas se limiter à la spec du langage, mais il faut aussi se servir de la spec du compilo et du hardware. Ne pas le faire, c'est se tirer une balle dans le pied (après, j'avoue qu'il y a beaucoup d'unijambiste dans le monde du dev).
C'est une crainte que j'ai aussi (comme dit dans le conclusion), et qui va nécessiter de réaliser des benchs.
Si cela pose problème, il faudra explorer d'autres solutions. L'avantage de la solution présentée ici c'est la compartimentation des utilisateurs ET des applications.
J'ai choisi d'utiliser asyncio pour permettre au serveur de mieux paralléliser, mais je n'ai aucun chiffre pour assurer mes dires.
Je vise à avoir d'abord un PoC qui soit testable avant de passer à l'étape d'optimisation.
Idéalement, j'aimerai bien avoir ça côté versionning :
la doc et le logiciel sont versionné séparément (je ne parle pas de gestion de version via git ou autre)
chaque version de la doc est associée à un ensemble de version du logiciel
quand tu mets à jour la doc (correction, clarification, etc…), tu bump sa version, pas de soucis
quand tu mets à jour le logiciel, et que cela n'impacte pas la doc, en réalité si, ça l'impacte : l'ensemble de version compatible est modifié
En gros, dès que tu modifie le logiciel, la doc s'en retrouve impactée, dans tout les cas.
Et du coup côté procédure :
une seule procédure pour générer la doc, qui est déclenchée par un build (en général déclenché par une git hook en même tant que l'intégration continue, voir le déploiement continu)
la doc et le logiciel dans le même dépôt, ou alors un git-submodule pour ne pas perturber les rédacteurs/traducteurs, une mise à jour de la doc implique un nouveau trigger de la git hook
Mais en réalité ce que je fais vraiment c'est plutôt :
j'ai la doc dans le même dépôt que mon logiciel
doc d'API générée par les docstrings de mon code, et 2-3 tutos que je mets à jour à chaque version majeure si besoin
ma doc et mon logiciel ont le même numéro de version (l'utilisateur à pas à se casser la tête, logiciel version X.Y.Z, doc version X.Y.Z)
Le soucis, c'est que dans le vote blanc tu ne peux pas exprimer ton rejet du système en place (que ce soit la forme du gouvernement, la forme du système de vote, ou la forme de la "démocratie" actuelle).
Certes, dans l'abstention il y a :
ceux qui rejettent le système actuel
ceux qui ont la flemme d'aller voter (donc qui ne jugent pas nécessaire de profiter de leur droit)
ceux qui préfèrent laisser les autres décider
ceux qui …
Peu importe la proportion de ces cas, prenons le cas fictif ou l'on arrive à 95% d'abstention. Le candidat élu va-t-il toujours ignorer en se disant "la populace s'en fout" ? Lui peut-être, mais sa légitimité ne sera jamais approuvée par ses pairs, la population, les autres dirigeants, …
A partir de combien de pourcentage d'abstention la légitimité du système sera-t-elle remise en cause ?
Ah il est indéniable que ce modèle de scrutin possède beaucoup moins de défauts que l'actuel !
Les modèles de scrutins sont un domaine très intéressants des mathématiques, et la plupart des modèles qui existent sont âgés d'avant la première république.
La question que j'aime me poser du coup, c'est pourquoi c'est le modèle actuel qui a été retenu à l'époque ?
Autrement dit, quels sont les avantages de ce modèle par rapport à d'autres ?
Une question qui reste sans réponses pour moi malheureusement…
Tu as raison si l'on considère uniquement ce bulletin de vote.
Mais mettre "Très Bien" permet d'annuler un "A rejeter" qui a été mis sur un autre bulletin de vote. La ou un "Passable" ne l'annule pas entièrement.
Sur les 2 précédentes élections présidentielles, ce mode de strutin a été testé ou l'on mettait des notes allant de -2 à 2. Il est facile de voir ici que un 2 avantage plus le candidat C par rapport à B qu'un 0.
Sur 3 bulletins de vote on aurait par exemple :
A: 2, -2, -2 = -2
B: -2, 0, 2 = 0
C: 2, 1, -2 = 1
Donc ici la colonne 1 représente mon bulletin de vote, on voit bien que si je mets 0 et non 2 au candidat C, ce dernier passe à -1 et perd ainsi l'élection.
Tant que celui qui vote est influencé par le vote des autres (via les sondages, ou des suppositions), le dilemme du vote utile reste présent.
Certes, le score du candidat A n'est pas influencé par le score du candidat B.
Mais cette seule propriété ne suffit pas à exclure le vote utile.
Imaginons que l'on ait 3 candidats, A, B et C.
Selon mes idées, je vote pour le candidat A.
Je ne veux pas voir le candidat B arriver au pouvoir.
Le candidat C ne représente pas mes idées du tout, mais semble être le candidat favoris de la majorité.
Un vote utile serait donc le suivant :
Très bien pour le candidat A : je vote pour mes idées
A rejeter pour le candidat B : je m'oppose à ce candidat (je vote pour mes idées)
Très bien pour le candidat C : j'augmente son score contrairement à mes idées, pour augmenter les chances que le candidat B ne passe pas
Ce modèle de scrutin n'empêche pas le vote utile. Il en change simplement la forme.
Le vote utile dans le modèle de scrutin actuel prend la forme suivante : donner son au candidat le plus susceptible de remporter l'élection, afin d'évincer des candidats que l'on ne voudrait pas voir remporter l'élection.
Dans ce modèle, il prendrait la forme suivante : noter chaque candidat auquel on s'oppose avec la mention "A rejeter" et noter le plus susceptible de remporter l'élection avec la mention "Très Bien".
Ce modèle permet simplement de voter utile ET de voter pour ses idées (vu que tu peux attribuer au candidat qui te convient la mention "Très Bien").
Il existe depuis longtemps des modèles de scrutin différents, chacun essayant de parer au dilemme du vote utile, et à d'autres problèmes.
[^] # Re: C'est qui les gentils et qui les méchants ?
Posté par David Delassus (site web personnel) . En réponse au lien s/elastic/open/. Évalué à 1.
Oui
Aucune licence libre n'oblige un utilisateur à contribuer en retour. Si tu veux poser des conditions à l'utilisation de ton logiciel (aka: faites des contribs), ce n'est plus du libre.
Tout a fait
De ce que j'ai compris, l'opensource (et le libre de manière plus général) nécessite de l'argent (pour payer les devs, la maintenance, etc…). Rien n'est gratuit.
AMHA, Une société qui ne fait QUE de l'opensource est destinée à faire faillite.
Les Google/Amazon/Microsoft peuvent se permettre de faire de l'open-source car ils ont un revenu régulier conséquent qui ne vient pas (directement) de l'open source.
https://link-society.com - https://kubirds.com - https://github.com/link-society/flowg
[^] # Re: C'est qui les gentils et qui les méchants ?
Posté par David Delassus (site web personnel) . En réponse au lien s/elastic/open/. Évalué à 3.
Le mot clé ici c'est "d'après eux". Il semblerait que Elastic interprète libre comme "on fait de l'opensource pour bénéficier de la hype, mais en vrai ça nous fait chier que les gens utilisent les libertés qu'on leur a donné et qu'on avait promis de ne pas retirer".
Je sais pas si Amazon fait du "libre-washing", mais ils sont déjà plus dans l'esprit OpenSource/Libre que Elastic.
https://link-society.com - https://kubirds.com - https://github.com/link-society/flowg
[^] # Re: Fausse problématique
Posté par David Delassus (site web personnel) . En réponse au sondage Utilisez vous IPv6 ?. Évalué à 2. Dernière modification le 12 avril 2021 à 22:32.
Tout le monde n'a pas le même usage de Kubernetes.
Chaque pod a une IP, ensuite chaque service de type ClusterIP en a une aussi. Je suppose que quand tu es un Google ou un OpenAI[1] tu as beaucoup de pods/services, et donc besoin de beaucoup d'IP.
En tout cas, moi et ma petite boite nous avons pour l'instant 3 noeuds avec moins d'une 10aine de services.
Après, j'avoue c'était à moitié du troll, je suis pas contre l'IPv6, j'aimerais juste que ce soit transparent pour moi en tant qu'utilisateur (ce que ma Box et des outils comme Kubernetes font très bien).
[1] - https://openai.com/blog/scaling-kubernetes-to-7500-nodes/
EDIT PS: si t'es curieux à propos de Kubevisor, on cherche a avoir du feedback dessus, hésite pas à nous contacter :)
https://link-society.com - https://kubirds.com - https://github.com/link-society/flowg
[^] # Re: Fausse problématique
Posté par David Delassus (site web personnel) . En réponse au sondage Utilisez vous IPv6 ?. Évalué à 2. Dernière modification le 11 avril 2021 à 17:21.
A l'époque ou je faisais de l'auto-hébergement, ma box internet redirigeait certains ports sur un serveur local, qui avait un reverse proxy vers mes backends.
Le NAT c'est la box qui le gérait, pas moi. J'aime bien déléguer la complexité à d'autres dont c'est le métier.
EDIT: Et je m'attends à ce que soit la box qui gère l'IPv6, pas moi. Je m'attends à ce que ce soit transparent.
https://link-society.com - https://kubirds.com - https://github.com/link-society/flowg
[^] # Re: Fausse problématique
Posté par David Delassus (site web personnel) . En réponse au sondage Utilisez vous IPv6 ?. Évalué à 2.
Quel rabat-joie ce noyau. C'est un problème que même l'IPv6 ne peut résoudre :'(
https://link-society.com - https://kubirds.com - https://github.com/link-society/flowg
[^] # Re: Alternatives
Posté par David Delassus (site web personnel) . En réponse au journal Signal envoie des signaux inquiétants. Évalué à 3.
Qui sait, je pourrais avoir un clavier mécanique qui fait des cliquetis dans tout l'openspace…
https://link-society.com - https://kubirds.com - https://github.com/link-society/flowg
# Fausse problématique
Posté par David Delassus (site web personnel) . En réponse au sondage Utilisez vous IPv6 ?. Évalué à -2.
A la maison, je n'ai pas plus de 4 milliards de PC, donc j'ai assez d'IPv4.
Dans mon cluster pour le taf, je n'ai pas plus de 4 milliards de nodes, donc j'ai assez d'IPv4.
Je ne suis pas un FAI, donc je n'ai pas a gérer une IP pour les milliards de devices, donc j'ai pas besoin de IPv6.
https://link-society.com - https://kubirds.com - https://github.com/link-society/flowg
[^] # Re: Alternatives
Posté par David Delassus (site web personnel) . En réponse au journal Signal envoie des signaux inquiétants. Évalué à 3.
D'ailleurs, qu'est-ce qui disparaît dès qu'on cite son nom?
https://link-society.com - https://kubirds.com - https://github.com/link-society/flowg
[^] # Re: Les promesses n’engagent que ceux qui y croient
Posté par David Delassus (site web personnel) . En réponse au lien AWS fork Elastic Search qui n'est plus sous licence Apache. Évalué à 2.
J'ai quand même peur que le fork version Amazon tente de t'enfermer dans leur écosystème.
Par contre, monétiser de l'open source quand on est pas une multinationale, c'est compliqué. Je préfère le modèle de Sentry1, d'abord proprio ensuite open-source, plutôt que faire de belles promesses (ne jamais dire jamais).
https://link-society.com - https://kubirds.com - https://github.com/link-society/flowg
# 3-6-9-12
Posté par David Delassus (site web personnel) . En réponse au journal Les écrans et nos enfants. Évalué à 0.
Quand tu lis un article sur les écrans et les enfants et que personne ne cite 3-6-9-12
https://link-society.com - https://kubirds.com - https://github.com/link-society/flowg
# Qui a besoin d'une UI quand on automatise tout ?
Posté par David Delassus (site web personnel) . En réponse au journal Identification et authentification centralisées. Évalué à 2.
Pour ma part, je passe par ansible pour l'orchestration de mon serveur ldap (et de tout le reste tant qu'à faire), et éventuellement phpldapadmin pour aller explorer l'annuaire.
https://link-society.com - https://kubirds.com - https://github.com/link-society/flowg
[^] # Re: Espace disque partagé...
Posté par David Delassus (site web personnel) . En réponse au journal Flatpak. Évalué à 3. Dernière modification le 16 octobre 2018 à 16:24.
Quand la plupart des libs scientifique Python sont développées (partiellement ou entièrement) en C/C++ (numpy, tensorflow, …), il n'est pas si étonnant d'en voir apparaître en Rust.
Il faut bien se rendre compte que Python ne fait souvent que office de glue entre les différentes briques de ta pipeline de traitement de données.
https://link-society.com - https://kubirds.com - https://github.com/link-society/flowg
[^] # Re: Qu'est-ce que ça change ?
Posté par David Delassus (site web personnel) . En réponse au journal Terminologie Master/Slave . Évalué à 9.
Blanc ça a été "bon" et Noir ça a été "mauvais" avant même que les européens rencontrent les noirs pour la première fois.
https://fr.wiktionary.org/wiki/noir#%C3%89tymologie -> https://fr.wiktionary.org/wiki/niger#la
https://link-society.com - https://kubirds.com - https://github.com/link-society/flowg
# On est déjà trolldi ?
Posté par David Delassus (site web personnel) . En réponse au journal Je suis vener.. Évalué à 4.
Dur de résister…
https://link-society.com - https://kubirds.com - https://github.com/link-society/flowg
[^] # Re: Aucun !
Posté par David Delassus (site web personnel) . En réponse au journal Go et Rust, lequel est le remplaçant du C ?. Évalué à 1.
Je vais avoir besoin de savoir ce que tu appelle programme un peu complexe et aussi d'exemple d'undefined behavior qu'on ne peut éviter.
Pour info, voici la liste des undefined behavior en C99 : https://gist.github.com/Earnestly/7c903f481ff9d29a3dd1
J'ai pas tout lu (par flemme j'avoue) donc je vais parler de mémoire. Il me semble que les undefined behavior du C correspondent à des cas très précis et le plus souvent documenté par l'implémentation.
Quand on fait du bas niveau, il ne faut pas se limiter à la spec du langage, mais il faut aussi se servir de la spec du compilo et du hardware. Ne pas le faire, c'est se tirer une balle dans le pied (après, j'avoue qu'il y a beaucoup d'unijambiste dans le monde du dev).
https://link-society.com - https://kubirds.com - https://github.com/link-society/flowg
[^] # Re: outil schémas
Posté par David Delassus (site web personnel) . En réponse au journal Secure User Data : Reprenons le contrôle de nos données. Évalué à 1.
Je passe par le site Cacoo.
https://link-society.com - https://kubirds.com - https://github.com/link-society/flowg
[^] # Re: Performance
Posté par David Delassus (site web personnel) . En réponse au journal Secure User Data : Reprenons le contrôle de nos données. Évalué à 2.
C'est une crainte que j'ai aussi (comme dit dans le conclusion), et qui va nécessiter de réaliser des benchs.
Si cela pose problème, il faudra explorer d'autres solutions. L'avantage de la solution présentée ici c'est la compartimentation des utilisateurs ET des applications.
J'ai choisi d'utiliser asyncio pour permettre au serveur de mieux paralléliser, mais je n'ai aucun chiffre pour assurer mes dires.
Je vise à avoir d'abord un PoC qui soit testable avant de passer à l'étape d'optimisation.
https://link-society.com - https://kubirds.com - https://github.com/link-society/flowg
# Mon grain de sel
Posté par David Delassus (site web personnel) . En réponse au journal Documentation pour un logiciel même version que le logiciel ?. Évalué à 2.
Idéalement, j'aimerai bien avoir ça côté versionning :
En gros, dès que tu modifie le logiciel, la doc s'en retrouve impactée, dans tout les cas.
Et du coup côté procédure :
Mais en réalité ce que je fais vraiment c'est plutôt :
https://link-society.com - https://kubirds.com - https://github.com/link-society/flowg
[^] # Re: Résultats
Posté par David Delassus (site web personnel) . En réponse au journal Résultats des elections, qui est le vrai vainqueur ?. Évalué à 4.
Le soucis, c'est que dans le vote blanc tu ne peux pas exprimer ton rejet du système en place (que ce soit la forme du gouvernement, la forme du système de vote, ou la forme de la "démocratie" actuelle).
Certes, dans l'abstention il y a :
Peu importe la proportion de ces cas, prenons le cas fictif ou l'on arrive à 95% d'abstention. Le candidat élu va-t-il toujours ignorer en se disant "la populace s'en fout" ? Lui peut-être, mais sa légitimité ne sera jamais approuvée par ses pairs, la population, les autres dirigeants, …
A partir de combien de pourcentage d'abstention la légitimité du système sera-t-elle remise en cause ?
https://link-society.com - https://kubirds.com - https://github.com/link-society/flowg
[^] # Re: J'aime bien l'idée !
Posté par David Delassus (site web personnel) . En réponse au journal Jugement majoritaire. Évalué à 2.
Ah il est indéniable que ce modèle de scrutin possède beaucoup moins de défauts que l'actuel !
Les modèles de scrutins sont un domaine très intéressants des mathématiques, et la plupart des modèles qui existent sont âgés d'avant la première république.
La question que j'aime me poser du coup, c'est pourquoi c'est le modèle actuel qui a été retenu à l'époque ?
Autrement dit, quels sont les avantages de ce modèle par rapport à d'autres ?
Une question qui reste sans réponses pour moi malheureusement…
https://link-society.com - https://kubirds.com - https://github.com/link-society/flowg
[^] # Re: J'aime bien l'idée !
Posté par David Delassus (site web personnel) . En réponse au journal Jugement majoritaire. Évalué à 1.
Tu as raison si l'on considère uniquement ce bulletin de vote.
Mais mettre "Très Bien" permet d'annuler un "A rejeter" qui a été mis sur un autre bulletin de vote. La ou un "Passable" ne l'annule pas entièrement.
Sur les 2 précédentes élections présidentielles, ce mode de strutin a été testé ou l'on mettait des notes allant de -2 à 2. Il est facile de voir ici que un 2 avantage plus le candidat C par rapport à B qu'un 0.
Sur 3 bulletins de vote on aurait par exemple :
Donc ici la colonne 1 représente mon bulletin de vote, on voit bien que si je mets 0 et non 2 au candidat C, ce dernier passe à -1 et perd ainsi l'élection.
Tant que celui qui vote est influencé par le vote des autres (via les sondages, ou des suppositions), le dilemme du vote utile reste présent.
https://link-society.com - https://kubirds.com - https://github.com/link-society/flowg
[^] # Re: J'aime bien l'idée !
Posté par David Delassus (site web personnel) . En réponse au journal Jugement majoritaire. Évalué à 2.
Certes, le score du candidat A n'est pas influencé par le score du candidat B.
Mais cette seule propriété ne suffit pas à exclure le vote utile.
Imaginons que l'on ait 3 candidats, A, B et C.
Selon mes idées, je vote pour le candidat A.
Je ne veux pas voir le candidat B arriver au pouvoir.
Le candidat C ne représente pas mes idées du tout, mais semble être le candidat favoris de la majorité.
Un vote utile serait donc le suivant :
https://link-society.com - https://kubirds.com - https://github.com/link-society/flowg
[^] # Re: J'aime bien l'idée !
Posté par David Delassus (site web personnel) . En réponse au journal Jugement majoritaire. Évalué à 0.
Ce modèle de scrutin n'empêche pas le vote utile. Il en change simplement la forme.
Le vote utile dans le modèle de scrutin actuel prend la forme suivante : donner son au candidat le plus susceptible de remporter l'élection, afin d'évincer des candidats que l'on ne voudrait pas voir remporter l'élection.
Dans ce modèle, il prendrait la forme suivante : noter chaque candidat auquel on s'oppose avec la mention "A rejeter" et noter le plus susceptible de remporter l'élection avec la mention "Très Bien".
Ce modèle permet simplement de voter utile ET de voter pour ses idées (vu que tu peux attribuer au candidat qui te convient la mention "Très Bien").
Il existe depuis longtemps des modèles de scrutin différents, chacun essayant de parer au dilemme du vote utile, et à d'autres problèmes.
Je recommande le visionnage de cette vidéo (et accessoirement cette série de vidéo) : https://www.youtube.com/watch?v=wKimU8jy2a8
https://link-society.com - https://kubirds.com - https://github.com/link-society/flowg
[^] # Re: Cool ton projet !
Posté par David Delassus (site web personnel) . En réponse au journal Tentative de financement participatif pour projet OpenSource. Évalué à 1.
J'ai traduit la première, mais la seconde je ne peux pas l'éditer vu qu'elle vient d'être sélectionnée (je n'ai pas été assez rapide).
https://link-society.com - https://kubirds.com - https://github.com/link-society/flowg
[^] # Re: C'est quoi l'entreprise que tu lances?
Posté par David Delassus (site web personnel) . En réponse au journal Tentative de financement participatif pour projet OpenSource. Évalué à 1.
J'ai un journal la-dessus qui sera publié en temps voulu, pour l'instant il n'est pas encore fini.
Mais pour un Not Published;Didn't Read: il s'agira d'une entreprise de développement de logiciel médical open source.
https://link-society.com - https://kubirds.com - https://github.com/link-society/flowg