diff --git a/.htaccess b/.htaccess index a554063..3c210d8 100644 --- a/.htaccess +++ b/.htaccess @@ -4,7 +4,7 @@ # Redirecting HTTP traffic to HTTPS. (Keep commented on localhost !) -# This is handled other services, but it should still be enabled in production just to be safe. +# This is handled by other services, but it should still be enabled in production just to be safe. #RewriteEngine On #RewriteCond %{SERVER_PORT} 80 #RewriteRule ^(.*)$ https://nibblepoker.lu/$1 [R,L] diff --git a/commons/sidebar.php b/commons/sidebar.php index cd164d5..8038067 100644 --- a/commons/sidebar.php +++ b/commons/sidebar.php @@ -28,10 +28,14 @@ if(!isset($SIDEBAR_ID)) {
- - + + - + + + + + diff --git a/commons/strings.json b/commons/strings.json index 3970fbe..bfabbe7 100644 --- a/commons/strings.json +++ b/commons/strings.json @@ -1 +1 @@ -{"_compile_date":"2022-09-24T15:43:05.409435Z","en":{"about.biography.title":"Who am I ?","about.philosophy.title":"Projects philosophy","about.skills.title":"Skills","about.work.title":"Professional experiences","about.education.title":"TODO:SchoolAndEducation","contact.title":"Contact","contact.email.title":"Email","contact.email.name":"Sender's Name","contact.email.message":"Message","contact.twitter.button":"Compose DM to @NibblePoker on Twitter","contact.tox.main":"Main account:","contact.tox.secondary":"Backup account:","contact.tox.button.open":"Open in Tox Client","contact.tox.button.copy":"Copy to clipboard","generic.button.close":"Close","generic.button.copy":"Copy to clipboard","generic.button.submit":"Submit","generic.button.reset":"Reset","home.title.nav":"Home","home.title.header":"Homepage","home.intro.meta.description":"${home.intro.meta.description}","home.intro.title":"Welcome","home.intro.text.1":"This website contains a collection of my personal work through blog posts, software releases and other forms of media, all of which is accessible for free and under open-source friendly licenses.","home.intro.text.2":"If you wish to contact me, you can do so through the contact form linked in the sidebar or via the email address present on that page.","lang.menu.title":"Language","lang.current":"English","lang.automatic":"Automatic","lang.english":"English","lang.french":"French","lang.german":"German","lang.luxembourgish":"Luxembourgish","privacy.title":"Privacy policy","privacy.description":"Our privacy policy in a clear and easy to understand format.","privacy.introduction.title":"Introduction","privacy.introduction.text.1":"This privacy policy is written in accordance with the 12th and 13th articles of the GDPR.","privacy.introduction.text.2":"If you wish to consult it, you can do so on the following websites:","privacy.contact.title":"How to contact us ?","privacy.contact.text.1":"If you wish to contact us for more information regarding our privacy policy, please contact us via the form included on the contact page, or at the following email address:","privacy.complaint.title":"How to contact the appropriate authorities ?","privacy.complaint.text.1":"Should you wish to report a complaint or if you feel that our privacy policy has not addressed your concern in a satisfactory manner, you may contact your national Data Protection Authority (DPA).","privacy.complaint.text.2":"More information on this procedure can be found on the following websites:","privacy.v2.data.title":"Data collection","privacy.v2.data.intro.1":"This websites only collects data through generic access logs in order to detect and block bad actors from accessing this website.","privacy.v2.data.intro.2":"None of the data collected is used for any other purpose,it is never shared with any other third-party and is never use in any sort of analytics.","privacy.v2.data.private.1":"Here is the list of private data being collected:","privacy.v2.data.private_list.1":"IP address","privacy.v2.data.private_list.2":"Browser's User-Agent","privacy.v2.data.non_private.1":"And here is the list of non-private data being collected:","privacy.v2.data.non_private_list.1":"Requested resource' URI","privacy.v2.data.non_private_list.2":"Date and time","privacy.v2.data.end.1":"Once the data has been logged in the access logs, it is automatically retrieved and processed by a locally-hosted application every 30 seconds and then deleted from said logs.","privacy.v2.data.end.2":"This application compares this information against a list of known threat sources, targets and behaviours and if a match is found, the private information is anonymized and stored for 7 days pending a manual review.","privacy.v2.data.end.3":"Once that 7 day period has elapsed, or once the report has been reviewed, all the relevant data is automatically deleted.","privacy.v2.data.end.4":"If your request wasn't flagged as potentially malicious, every data collected from it is thrown out instantly.","privacy.v2.data.end.5":"This process should normally never be triggered for regular traffic since most of the triggering actions are ones that should not be possible to accomplish through normal browsing.","privacy.v2.data.end.6":"However, this process isn't infallible and there is always an off chance that false positives may happen.","privacy.v2.update.intro.1":"The content of this privacy policy was originally written on the 4th of December 2021 and was last updated on the 18th of March 2022.","privacy.v2.update.history.1.date":"2021/12/04","privacy.v2.update.history.1.desc.1":"Original version","privacy.v2.update.history.2.date":"2022/03/18","privacy.v2.update.history.2.desc.1":"Changed section on data collection to reflect new policy.","privacy.v2.update.history.2.desc.2":"Added mention about CloudFlare and linked to their privacy policy.","privacy.v2.update.history.2.desc.3":"Improved the \"Changes to our privacy policy\" section.","privacy.v2.update.history.3.date":"2022/09/09","privacy.v2.update.history.3.desc.1":"Changed references to external services to reflect the migration to v6Node.","privacy.v2.update.history.3.desc.1.1":"Added mention about v6Node and linked to their privacy policy.","privacy.v2.update.history.3.desc.1.2":"Removed mentions of CloudFlare.","privacy.v2.update.history.3.desc.2":"Changed the \"Cookies\" section to indicate that none should be used on public domains.","privacy.v2.update.end.2":"In the event of a change to our privacy policy, you will be informed explicitly, and a copy of previous versions of the policy will be available through this page.","privacy.v2.third.title":"Third Parties","privacy.v2.third.intro.1":"Our websites uses some services provided by v6Node in order to prevent bad actors from accessing this website and in order to put in place a reverse-proxy system.","privacy.v2.third.intro.2":"The goal of this system is to improve your browsing experience with the help of a private caching service and custom traffic filtering rules.","privacy.v2.third.intro.3":"None of the data that may be gathered by v6Node or the system described above is ever used or stored.","privacy.v2.third.intro.4":"If you'd wish to consult their privacy policy and their partners', you can do so by using the following URLs:","privacy.v2.cookies.title":"Cookies","privacy.v2.cookies.intro.1":"Our websites doesn't use nor store any cookies in your browser.","programming.title":"Programming","programming.title.projects":"Projects","programming.java.title":"Java","programming.purebasic.title":"PureBasic","programming.python.title":"Python","programming.others.title":"Others","programming.docker.title":"Docker","programming.apps.title":"Applications","programming.downloads.title":"Downloads","programming.git.title":"Git Repos.","programming.tutorials.title":"Tutorials","programming.tools.title":"Tools","programming.games.title":"Games & Mods","electronics.title":"Electronics","electronics.iot.title":"IoT","electronics.experiments.title":"Experiments","electronics.ham.title":"HAM","links.title":"Links","links.visit.button":"Visit","about.title":"About","contact.description":"$contact.description","error.common.details.title":"Error details","error.4xx.title":"HTTP Client Error","error.4xx.text":"${error.4xx.text}","error.4xx.button.back":"Go back","error.403.title":"403 Error","error.403.description":"Access to the requested resource is forbidden !","error.403.explanation":"If this problem persists, you can contact us through avenues given on the Contact page.","error.404.title":"404 Error","error.404.description":"The requested resource couldn't be found on the server !","error.404.explanation":"If this problem persists, you can contact us through avenues given on the Contact page.","error.content.title.generic":"Content error","error.content.title.empty":"No content found","error.content.none":"No explicit error was encountered.","error.content.detect.category":"Failed to detect which category of content you requested.","error.content.detect.display":"Failed to detect if you requested the category's search page or a specific one.","error.content.detect.subtype":"Failed to detect the sub-type of content you requested.","error.content.detect.tags":"Failed to detect the basic tags for the content you requested.","error.content.detect.empty":"No content could be found for the given tags.","error.content.tags.length":"The \"tags\" URL parameter is too long.","error.content.tags.alphanumeric":"One of the tags given in the \"tags\" URL parameter is not a valid alphanumeric string.","error.content.detect.type":"The type of requested content couldn't be determined.","error.content.id.alphanumeric":"The requested resource's ID isn't a valid alphanumeric string.","error.content.data.not.exist":"The requested content doesn't have an internal item file associated to it.","error.content.data.no.title":"No title found !","error.content.data.no.description":"No description found !","error.content.data.no.tags":"No tags found !","error.content.data.no.parts":"No content parts were found for this content !","error.content.data.no.subpart":"No sub-element were found for this element !","error.content.data.part.unknown":"Unknown element: \"%s\" !","error.content.cannot.load":"The requested content couldn't be loaded !","content.title.error":"Error","content.title.content":"Content","content.title.search.header":"Search","content.title.search.card":"Content search","content.title.search.card.single":"Search result","content.title.search.card.multiple":"Search results","content.tags.requested":"Requested tags","content.search.count.single":"result","content.search.count.multiple":"results","content.fallback.content.commons.version.current":"Current version","content.fallback.content.commons.version.previous.single":"Previous version","content.fallback.content.commons.version.previous.multiple":"Previous versions","content.fallback.content.commons.version.old.single":"Old version","content.fallback.content.commons.version.old.multiple":"Old versions","content.fallback.content.commons.version.source":"Source code","content.fallback.content.commons.cpu":"CPU Architecture","content.fallback.content.commons.cpu.responsive":"CPU Architecture","content.fallback.content.commons.cpu.x64":"x64","content.fallback.content.commons.cpu.x86":"x86","content.fallback.content.commons.na.italic":"N/A","content.fallback.content.commons.na":"N/A","content.fallback.content.commons.lang":"Language","content.fallback.content.commons.download.single":"Download","content.fallback.content.commons.download.multiple":"Downloads","content.fallback.content.commons.version":"Version","content.fallback.content.commons.github":"GitHub Repository","content.fallback.content.commons.gitea":"Self-hosted Gitea Repository","content.fallback.content.commons.lang.english":"English","content.fallback.content.commons.lang.french":"French","content.fallback.content.commons.lang.luxembourgish":"Luxembourgish","content.fallback.content.commons.lang.english.639-3":"English (eng)","content.fallback.content.commons.lang.french.639-3":"French (fra)","content.fallback.content.commons.lang.luxembourgish.639-3":"Luxembourgish (ltz)","content.default.head.title":"No title found !","content.default.head.description":"No description found !","content.default.opengraph.title":"No title found !","content.default.opengraph.description":"No description found !","downloads.title":"Downloads","downloads.description":"$downloads.description","downloads.title.header":"Downloads","downloads.intro.title":"Directory listing of: /files/","modal.title.debugging":"Debugging information"},"fr":{"about.biography.title":"Qui suis-je ?","about.philosophy.title":"Philosophie des projets","about.skills.title":"Comp\u00e9tences","about.work.title":"Parcours professionnel","about.education.title":"\u00c9ducation","contact.title":"Contact","contact.email.title":"Courriel","contact.email.name":"Nom de l'envoyeur","contact.email.message":"Message","contact.twitter.button":"Composer un message priv\u00e9 pour @NibblePoker sur Twitter","contact.tox.main":"Compte principal:","contact.tox.secondary":"Compte secondaire:","contact.tox.button.open":"Ouvrir dans un client Tox","contact.tox.button.copy":"Copier dans le presse-papier","generic.button.close":"Fermer","generic.button.copy":"Copier dans le presse-papier","generic.button.submit":"Envoyer","generic.button.reset":"R\u00e9initialiser","home.title.nav":"Accueil","home.title.header":"Page d'accueil","home.intro.meta.description":"${home.intro.meta.description}","home.intro.title":"Bienvenue","home.intro.text.1":"Ce site internet contient une collection de mon travail personnel dans le domaine de l'informatique, le tout \u00e9tant rendu accessible par le biais d'articles de blog, ? et ?, le tout sous une licence ouverte et en open source.","home.intro.text.2":"Si vous d\u00e9sirez me contacter, vous pouvez le faire via le formulaire de contact dans la page pr\u00e9vu \u00e0 cet effet qui est li\u00e9e dans le menu lat\u00e9ral ou via l'adresse email pr\u00e9sente sur cette page.","lang.menu.title":"Langue","lang.current":"Fran\u00e7ais","lang.automatic":"Automatique","lang.english":"Anglais","lang.french":"Fran\u00e7ais","lang.german":"Allemand","lang.luxembourgish":"Luxembourgeois","privacy.title":"Politique de confidentialit\u00e9","privacy.description":"Notre politique de confidentialit\u00e9 dans un format clair et compr\u00e9hensible.","privacy.introduction.title":"Introduction","privacy.introduction.text.1":"La politique de confidentialit\u00e9 ci-pr\u00e9sente a \u00e9t\u00e9 \u00e9crite en accord avec les articles 12 et 13 de la RGPD.","privacy.introduction.text.2":"Si vous souhaitez consulter le texte officiel en question, vous pouvez le faire sur les sites internet suivants :","privacy.contact.title":"Comment nous contacter ?","privacy.contact.text.1":"Si vous souhaitez nous contacter afin d'obtenir plus d'informations concernant notre politique de confidentialit\u00e9, nous vous recommandons d'utiliser le formulaire pr\u00e9sent sur la page de contact, ou par courriel \u00e0 l'adresse suivante:","privacy.complaint.title":"Comment contacter les autorit\u00e9s comp\u00e9tentes ?","privacy.complaint.text.1":"Dans l'\u00e9ventualit\u00e9 o\u00f9 vous souhaiteriez d\u00e9poser une plainte pour une quelconque raison en rapport avec notre politique de confidentialit\u00e9, veuillez vous adresser \u00e0 l'autorit\u00e9 nationale de protection des donn\u00e9es (DPA).","privacy.complaint.text.2":"Les informations concernant cette proc\u00e9dure peuvent \u00eatre trouv\u00e9es sur les sites internet suivants:","privacy.v2.data.title":"Collecte de donn\u00e9es","privacy.v2.data.intro.1":"Ce site web collecte des donn\u00e9es au travers des journaux d'\u00e9v\u00e8nements afin de d\u00e9tecter et bloquer de potentiels acteurs malveillants.","privacy.v2.data.intro.2":"Les donn\u00e9es collect\u00e9es ne sont en aucun cas utilis\u00e9es pour une quelconque autre raison.","privacy.v2.data.private.1":"Voici la liste des donn\u00e9es personelles collect\u00e9es:","privacy.v2.data.private_list.1":"L'addresse IP source","privacy.v2.data.private_list.2":"Le \"User-Agent\" de votre navigateur internet","privacy.v2.data.non_private.1":"Et voici la liste des donn\u00e9es non-personelles collect\u00e9es:","privacy.v2.data.non_private_list.1":"L'URI de la ressource demand\u00e9e","privacy.v2.data.non_private_list.2":"La date et l'heure","privacy.v2.data.end.1":"Les donn\u00e9es pr\u00e9sentes dans les journaux d'\u00e9v\u00e8nements sont extraites et retir\u00e9es pour \u00eatre trait\u00e9es par une application qui tourne en local toute les 30 secondes.","privacy.v2.data.end.2":"L'application en question utilise et compare ces informations avec une liste d'acteurs malveillants et comportement suspects connus.
Si une correspondance est d\u00e9tect\u00e9e, les informations priv\u00e9es sont anonymis\u00e9es et sont stock\u00e9es pendant 7 jours en attendant qu'un examen manuel soit effectu\u00e9.","privacy.v2.data.end.3":"Apr\u00e8s cette p\u00e9riode de 7 jours, ou apr\u00e8s qu'un examen ait \u00e9t\u00e9 effectu\u00e9, les donn\u00e9es sont automatiquement supprim\u00e9es.","privacy.v2.data.end.4":"Toute information concernant une requ\u00eate non suspecte est automatiquement supprim\u00e9e.","privacy.v2.data.end.5":"Ce processus n'est normalement jamais utilis\u00e9 sur des requ\u00eates provenant d'un trafic l\u00e9gitime d\u00fb au fait qu'il isole principalement les actions et requ\u00eates qui ne devraient pas \u00eatre possible sur ce site.","privacy.v2.data.end.6":"Cependant, ce processus n'est pas infaillible et il est toujours possible qu'une requ\u00eate soit isol\u00e9e par erreur.","privacy.v2.update.intro.1":"Le contenu de notre politique de confidentialit\u00e9 a \u00e9t\u00e9 originalement \u00e9crit et le 4 d\u00e9cembre 2021 modifi\u00e9 pour la derni\u00e8re fois le 18 mars 2022.","privacy.v2.update.history.1.date":"2021/12/04","privacy.v2.update.history.1.desc.1":"Version originale","privacy.v2.update.history.2.date":"2022/03/18","privacy.v2.update.history.2.desc.1":"Mise-\u00e0-jour de la section sur la collection des donn\u00e9es.","privacy.v2.update.history.2.desc.2":"Ajout d'une mention de CloudFlare et ajout de liens vers leur politique de confidentialit\u00e9.","privacy.v2.update.history.2.desc.3":"Am\u00e9lioration de la section \"Changements \u00e0 notre politique de confidentialit\u00e9\".","privacy.v2.update.history.3.date":"2022/09/09","privacy.v2.update.history.3.desc.1":"Changement des r\u00e9f\u00e9rences aux services externes pour indiquer l'utilisation de v6Node.","privacy.v2.update.history.3.desc.1.1":"Ajout de mentions de v6Node et liens vers leur politique de vie confidentialit\u00e9.","privacy.v2.update.history.3.desc.1.2":"Suppression de mentions de CloudFlare.","privacy.v2.update.history.3.desc.2":"Changement de la section \"Cookies\" afin d'indiquer qu'ils ne seront plus utilis\u00e9s sur les domaines publics.","privacy.v2.update.end.2":"En cas de changement, vous serez clairement inform\u00e9 et une copie des anciennes versions de notre politique sera disponible au travers de cette page.","privacy.v2.third.title":"Organismes tiers","privacy.v2.third.intro.1":"Ce site web utilise les services propos\u00e9s par v6Node afin d'emp\u00eacher des acteurs malveillants d'y acc\u00e9der et dans le but de mettre en place un syst\u00e8me de reverse-proxy.","privacy.v2.third.intro.2":"Ceci a pour but d'am\u00e9liorer l'exp\u00e9rience des personnes le visitant gr\u00e2ce \u00e0 un syst\u00e8me de filtrage et caching priv\u00e9.","privacy.v2.third.intro.3":"Aucune des donn\u00e9es collect\u00e9es et stock\u00e9es par v6Node et le syst\u00e8me d\u00e9cris ci-dessus n'est utilis\u00e9 ou stock\u00e9.","privacy.v2.third.intro.4":"Si vous souhaitez consulter leur politique de confidentialit\u00e9 ainsi que celle de leur partenaires, vous pouvez le faire en suivant les liens ci-dessous:","privacy.v2.cookies.title":"Cookies de navigation","privacy.v2.cookies.intro.1":"Ce site web n'utilise pas, et ne stocke aucun cookies dans votre navigateur internet.","programming.title":"Programmation","programming.title.projects":"Projets","programming.java.title":"Java","programming.purebasic.title":"PureBasic","programming.python.title":"Python","programming.others.title":"Autres","programming.docker.title":"Docker","programming.apps.title":"Applications","programming.downloads.title":"T\u00e9l\u00e9chargements","programming.git.title":"D\u00e9p\u00f4ts Git","programming.tutorials.title":"Tutoriels","programming.tools.title":"Outils","programming.games.title":"Jeux & Mods","electronics.title":"\u00c9lectronique","electronics.iot.title":"IoT","electronics.experiments.title":"Exp\u00e9riences","electronics.ham.title":"HAM","links.title":"Liens","links.visit.button":"Visiter","about.title":"\u00c0-propos","contact.description":"$contact.description","error.common.details.title":"D\u00e9tails de l'erreur","error.4xx.title":"Erreur du client HTTP","error.4xx.text":"${error.4xx.text}","error.4xx.button.back":"Retourner en arri\u00e8re","error.403.title":"Erreur 403","error.403.description":"L'acc\u00e8s \u00e0 la ressource demand\u00e9e est interdit !","error.403.explanation":"Si ce probl\u00e8me persiste, vous pouvez nous contacter via une des avenues donn\u00e9es sur la page Contact.","error.404.title":"Erreur 404","error.404.description":"La ressource demand\u00e9e est introuvable sur le serveur !","error.404.explanation":"Si ce probl\u00e8me persiste, vous pouvez nous contacter via une des avenues donn\u00e9es sur la page Contact.","error.content.title.generic":"Erreur de contenu","error.content.title.empty":"Aucun contenu trouv\u00e9","error.content.none":"Aucune erreur n'a \u00e9t\u00e9 d\u00e9tect\u00e9e.","error.content.detect.category":"Impossibilit\u00e9 de d\u00e9tecter la cat\u00e9gorie de contenu demand\u00e9e.","error.content.detect.display":"Impossibilit\u00e9 de d\u00e9tecter si une recherche ou page sp\u00e9cifique \u00e9tait demand\u00e9e.","error.content.detect.subtype":"Impossibilit\u00e9 de d\u00e9tecter le sous-type de contenu demand\u00e9.","error.content.detect.tags":"Impossibilit\u00e9 de d\u00e9tecter les tags de base du contenu demand\u00e9.","error.content.detect.empty":"Aucun contenu en rapport avec les tags choisi n'as \u00e9t\u00e9 trouv\u00e9.","error.content.tags.length":"Le param\u00e8tre d'URL \"tags\" est trop long.","error.content.tags.alphanumeric":"Un des tags donn\u00e9 dans le param\u00e8tre d'URL \"tags\" n'est pas une cha\u00eene de texte alphanum\u00e9rique valide.","error.content.detect.type":"Le type de contenu d\u00e9sir\u00e9 n'as pas pu \u00eatre d\u00e9tect\u00e9.","error.content.id.alphanumeric":"L'ID de la ressource demand\u00e9e n'est pas une cha\u00eene de texte alphanum\u00e9rique valide.","error.content.data.not.exist":"Le contenu demand\u00e9e n'a pas de fichier de rendu interne associ\u00e9.","error.content.data.no.title":"Aucun titre trouv\u00e9 !","error.content.data.no.description":"Aucune description trouv\u00e9e !","error.content.data.no.tags":"Aucun tag trouv\u00e9 !","error.content.data.no.parts":"Aucun \u00e9l\u00e9ment \u00e0 pr\u00e9senter n'a \u00e9t\u00e9 trouv\u00e9 !","error.content.data.no.subpart":"Aucun sous-\u00e9l\u00e9ment n'a \u00e9t\u00e9 trouv\u00e9 pour cet \u00e9l\u00e9ment !","error.content.data.part.unknown":"\u00c9l\u00e9ment inconnu: \"%s\" !","error.content.cannot.load":"Le contenu demand\u00e9 n'a pas pu \u00eatre charg\u00e9 !","content.title.error":"Erreur de contenu","content.title.content":"Projets","content.title.search.header":"Recherche","content.title.search.card":"Recherche de contenu","content.title.search.card.single":"R\u00e9sultat de recherche","content.title.search.card.multiple":"R\u00e9sultats de recherche","content.tags.requested":"Tags demand\u00e9s","content.search.count.single":"r\u00e9sultat","content.search.count.multiple":"r\u00e9sultats","content.fallback.content.commons.version.current":"Version actuelle","content.fallback.content.commons.version.previous.single":"Version pr\u00e9c\u00e9dente","content.fallback.content.commons.version.previous.multiple":"Versions pr\u00e9c\u00e9dentes","content.fallback.content.commons.version.old.single":"Ancienne version","content.fallback.content.commons.version.old.multiple":"Anciennes versions","content.fallback.content.commons.version.source":"Code source","content.fallback.content.commons.cpu":"Architecture de CPU","content.fallback.content.commons.cpu.x64":"x64","content.fallback.content.commons.cpu.x86":"x86","content.fallback.content.commons.na.italic":"N/A","content.fallback.content.commons.na":"N/A","content.fallback.content.commons.lang":"Langue","content.fallback.content.commons.download.single":"T\u00e9l\u00e9chargement","content.fallback.content.commons.download.multiple":"T\u00e9l\u00e9chargements","content.fallback.content.commons.version":"Version","content.fallback.content.commons.github":"D\u00e9p\u00f4t GitHub","content.fallback.content.commons.gitea":"D\u00e9p\u00f4t Gitea auto-h\u00e9berg\u00e9","content.fallback.content.commons.lang.english":"Anglais","content.fallback.content.commons.lang.french":"Fran\u00e7ais","content.fallback.content.commons.lang.luxembourgish":"Luxembourgeois","content.default.head.title":"Aucun titre trouv\u00e9 !","content.default.head.description":"Aucune description trouv\u00e9e !","content.default.opengraph.title":"Aucun titre trouv\u00e9 !","content.default.opengraph.description":"Aucune description trouv\u00e9e !","modal.title.debugging":"Informations de d\u00e9bogage"},"lb":{"home.title.nav":"Doheem","home.intro.title":"W\u00ebllkomm op NibblePoker.lu !","lang.current":"Luxembourgish"}} \ No newline at end of file +{"_compile_date":"2022-11-19T13:34:21.784842Z","en":{"about.biography.title":"Who am I ?","about.philosophy.title":"Projects philosophy","about.skills.title":"Skills","about.work.title":"Professional experiences","about.education.title":"TODO:SchoolAndEducation","contact.title":"Contact","contact.email.title":"Email","contact.email.name":"Sender's Name","contact.email.message":"Message","contact.twitter.button":"Compose DM to @NibblePoker on Twitter","contact.tox.main":"Main account:","contact.tox.secondary":"Backup account:","contact.tox.button.open":"Open in Tox Client","contact.tox.button.copy":"Copy to clipboard","generic.button.close":"Close","generic.button.copy":"Copy to clipboard","generic.button.submit":"Submit","generic.button.reset":"Reset","home.title.nav":"Home","home.title.header":"Homepage","home.intro.meta.description":"${home.intro.meta.description}","home.intro.title":"Welcome","home.intro.text.1":"This website contains a collection of my personal work through blog posts, software releases and other forms of media, all of which is accessible for free and under open-source friendly licenses.","home.intro.text.2":"If you wish to contact me, you can do so through the contact form linked in the sidebar or via the email address present on that page.","lang.menu.title":"Language","lang.current":"English","lang.automatic":"Automatic","lang.english":"English","lang.french":"French","lang.german":"German","lang.luxembourgish":"Luxembourgish","privacy.title":"Privacy policy","privacy.description":"Our privacy policy in a clear and easy to understand format.","privacy.introduction.title":"Introduction","privacy.introduction.text.1":"This privacy policy is written in accordance with the 12th and 13th articles of the GDPR.","privacy.introduction.text.2":"If you wish to consult it, you can do so on the following websites:","privacy.contact.title":"How to contact us ?","privacy.contact.text.1":"If you wish to contact us for more information regarding our privacy policy, please contact us via the form included on the contact page, or at the following email address:","privacy.complaint.title":"How to contact the appropriate authorities ?","privacy.complaint.text.1":"Should you wish to report a complaint or if you feel that our privacy policy has not addressed your concern in a satisfactory manner, you may contact your national Data Protection Authority (DPA).","privacy.complaint.text.2":"More information on this procedure can be found on the following websites:","privacy.v2.data.title":"Data collection","privacy.v2.data.intro.1":"This websites only collects data through generic access logs in order to detect and block bad actors from accessing this website.","privacy.v2.data.intro.2":"None of the data collected is used for any other purpose,it is never shared with any other third-party and is never use in any sort of analytics.","privacy.v2.data.private.1":"Here is the list of private data being collected:","privacy.v2.data.private_list.1":"IP address","privacy.v2.data.private_list.2":"Browser's User-Agent","privacy.v2.data.non_private.1":"And here is the list of non-private data being collected:","privacy.v2.data.non_private_list.1":"Requested resource' URI","privacy.v2.data.non_private_list.2":"Date and time","privacy.v2.data.end.1":"Once the data has been logged in the access logs, it is automatically retrieved and processed by a locally-hosted application every 30 seconds and then deleted from said logs.","privacy.v2.data.end.2":"This application compares this information against a list of known threat sources, targets and behaviours and if a match is found, the private information is anonymized and stored for 7 days pending a manual review.","privacy.v2.data.end.3":"Once that 7 day period has elapsed, or once the report has been reviewed, all the relevant data is automatically deleted.","privacy.v2.data.end.4":"If your request wasn't flagged as potentially malicious, every data collected from it is thrown out instantly.","privacy.v2.data.end.5":"This process should normally never be triggered for regular traffic since most of the triggering actions are ones that should not be possible to accomplish through normal browsing.","privacy.v2.data.end.6":"However, this process isn't infallible and there is always an off chance that false positives may happen.","privacy.v2.update.intro.1":"The content of this privacy policy was originally written on the 4th of December 2021 and was last updated on the 18th of March 2022.","privacy.v2.update.history.1.date":"2021/12/04","privacy.v2.update.history.1.desc.1":"Original version","privacy.v2.update.history.2.date":"2022/03/18","privacy.v2.update.history.2.desc.1":"Changed section on data collection to reflect new policy.","privacy.v2.update.history.2.desc.2":"Added mention about CloudFlare and linked to their privacy policy.","privacy.v2.update.history.2.desc.3":"Improved the \"Changes to our privacy policy\" section.","privacy.v2.update.history.3.date":"2022/09/09","privacy.v2.update.history.3.desc.1":"Changed references to external services to reflect the migration to v6Node.","privacy.v2.update.history.3.desc.1.1":"Added mention about v6Node and linked to their privacy policy.","privacy.v2.update.history.3.desc.1.2":"Removed mentions of CloudFlare.","privacy.v2.update.history.3.desc.2":"Changed the \"Cookies\" section to indicate that none should be used on public domains.","privacy.v2.update.end.2":"In the event of a change to our privacy policy, you will be informed explicitly, and a copy of previous versions of the policy will be available through this page.","privacy.v2.third.title":"Third Parties","privacy.v2.third.intro.1":"Our websites uses some services provided by v6Node in order to prevent bad actors from accessing this website and in order to put in place a reverse-proxy system.","privacy.v2.third.intro.2":"The goal of this system is to improve your browsing experience with the help of a private caching service and custom traffic filtering rules.","privacy.v2.third.intro.3":"None of the data that may be gathered by v6Node or the system described above is ever used or stored.","privacy.v2.third.intro.4":"If you'd wish to consult their privacy policy and their partners', you can do so by using the following URLs:","privacy.v2.cookies.title":"Cookies","privacy.v2.cookies.intro.1":"Our websites doesn't use nor store any cookies in your browser.","programming.title":"Programming","programming.title.projects":"Projects","programming.java.title":"Java","programming.purebasic.title":"PureBasic","programming.python.title":"Python","programming.others.title":"Others","programming.docker.title":"Docker","programming.apps.title":"Applications","programming.downloads.title":"Downloads","programming.git.title":"Git Repos.","programming.tutorials.title":"Tutorials","programming.tools.title":"Tools","programming.games.title":"Games & Mods","programming.library.title":"Libraries","electronics.title":"Electronics","electronics.iot.title":"IoT","electronics.experiments.title":"Experiments","electronics.ham.title":"HAM","links.title":"Links","links.visit.button":"Visit","about.title":"About","contact.description":"$contact.description","error.common.details.title":"Error details","error.4xx.title":"HTTP Client Error","error.4xx.text":"${error.4xx.text}","error.4xx.button.back":"Go back","error.403.title":"403 Error","error.403.description":"Access to the requested resource is forbidden !","error.403.explanation":"If this problem persists, you can contact us through avenues given on the Contact page.","error.404.title":"404 Error","error.404.description":"The requested resource couldn't be found on the server !","error.404.explanation":"If this problem persists, you can contact us through avenues given on the Contact page.","error.content.title.generic":"Content error","error.content.title.empty":"No content found","error.content.none":"No explicit error was encountered.","error.content.detect.category":"Failed to detect which category of content you requested.","error.content.detect.display":"Failed to detect if you requested the category's search page or a specific one.","error.content.detect.subtype":"Failed to detect the sub-type of content you requested.","error.content.detect.tags":"Failed to detect the basic tags for the content you requested.","error.content.detect.empty":"No content could be found for the given tags.","error.content.tags.length":"The \"tags\" URL parameter is too long.","error.content.tags.alphanumeric":"One of the tags given in the \"tags\" URL parameter is not a valid alphanumeric string.","error.content.detect.type":"The type of requested content couldn't be determined.","error.content.id.alphanumeric":"The requested resource's ID isn't a valid alphanumeric string.","error.content.data.not.exist":"The requested content doesn't have an internal item file associated to it.","error.content.data.no.title":"No title found !","error.content.data.no.description":"No description found !","error.content.data.no.tags":"No tags found !","error.content.data.no.parts":"No content parts were found for this content !","error.content.data.no.subpart":"No sub-element were found for this element !","error.content.data.part.unknown":"Unknown element: \"%s\" !","error.content.cannot.load":"The requested content couldn't be loaded !","content.title.error":"Error","content.title.content":"Content","content.title.search.header":"Search","content.title.search.card":"Content search","content.title.search.card.single":"Search result","content.title.search.card.multiple":"Search results","content.tags.requested":"Requested tags","content.search.count.single":"result","content.search.count.multiple":"results","content.fallback.content.commons.version.current":"Current version","content.fallback.content.commons.version.previous.single":"Previous version","content.fallback.content.commons.version.previous.multiple":"Previous versions","content.fallback.content.commons.version.old.single":"Old version","content.fallback.content.commons.version.old.multiple":"Old versions","content.fallback.content.commons.version.source":"Source code","content.fallback.content.commons.cpu":"CPU Architecture","content.fallback.content.commons.cpu.responsive":"CPU Architecture","content.fallback.content.commons.cpu.any":"Any architecture","content.fallback.content.commons.cpu.x64":"x64","content.fallback.content.commons.cpu.x86":"x86","content.fallback.content.commons.cpu.arm":"arm","content.fallback.content.commons.cpu.arm64":"arm64","content.fallback.content.commons.na.italic":"N/A","content.fallback.content.commons.na":"N/A","content.fallback.content.commons.lang":"Language","content.fallback.content.commons.download.single":"Download","content.fallback.content.commons.download.multiple":"Downloads","content.fallback.content.commons.version":"Version","content.fallback.content.commons.github":"GitHub Repository","content.fallback.content.commons.gitea":"Self-hosted Gitea Repository","content.fallback.content.commons.nuget":"Nuget Package","content.fallback.content.commons.license.mit.single":"MIT License","content.fallback.content.commons.lang.english":"English","content.fallback.content.commons.lang.french":"French","content.fallback.content.commons.lang.luxembourgish":"Luxembourgish","content.fallback.content.commons.lang.english.639-3":"English (eng)","content.fallback.content.commons.lang.french.639-3":"French (fra)","content.fallback.content.commons.lang.luxembourgish.639-3":"Luxembourgish (ltz)","content.default.head.title":"No title found !","content.default.head.description":"No description found !","content.default.opengraph.title":"No title found !","content.default.opengraph.description":"No description found !","downloads.title":"Downloads","downloads.description":"$downloads.description","downloads.title.header":"Downloads","downloads.intro.title":"Directory listing of: /files/","modal.title.debugging":"Debugging information"},"fr":{"about.biography.title":"Qui suis-je ?","about.philosophy.title":"Philosophie des projets","about.skills.title":"Comp\u00e9tences","about.work.title":"Parcours professionnel","about.education.title":"\u00c9ducation","contact.title":"Contact","contact.email.title":"Courriel","contact.email.name":"Nom de l'envoyeur","contact.email.message":"Message","contact.twitter.button":"Composer un message priv\u00e9 pour @NibblePoker sur Twitter","contact.tox.main":"Compte principal:","contact.tox.secondary":"Compte secondaire:","contact.tox.button.open":"Ouvrir dans un client Tox","contact.tox.button.copy":"Copier dans le presse-papier","generic.button.close":"Fermer","generic.button.copy":"Copier dans le presse-papier","generic.button.submit":"Envoyer","generic.button.reset":"R\u00e9initialiser","home.title.nav":"Accueil","home.title.header":"Page d'accueil","home.intro.meta.description":"${home.intro.meta.description}","home.intro.title":"Bienvenue","home.intro.text.1":"Ce site internet contient une collection de mon travail personnel dans le domaine de l'informatique, le tout \u00e9tant rendu accessible par le biais d'articles de blog, ? et ?, le tout sous une licence ouverte et en open source.","home.intro.text.2":"Si vous d\u00e9sirez me contacter, vous pouvez le faire via le formulaire de contact dans la page pr\u00e9vu \u00e0 cet effet qui est li\u00e9e dans le menu lat\u00e9ral ou via l'adresse email pr\u00e9sente sur cette page.","lang.menu.title":"Langue","lang.current":"Fran\u00e7ais","lang.automatic":"Automatique","lang.english":"Anglais","lang.french":"Fran\u00e7ais","lang.german":"Allemand","lang.luxembourgish":"Luxembourgeois","privacy.title":"Politique de confidentialit\u00e9","privacy.description":"Notre politique de confidentialit\u00e9 dans un format clair et compr\u00e9hensible.","privacy.introduction.title":"Introduction","privacy.introduction.text.1":"La politique de confidentialit\u00e9 ci-pr\u00e9sente a \u00e9t\u00e9 \u00e9crite en accord avec les articles 12 et 13 de la RGPD.","privacy.introduction.text.2":"Si vous souhaitez consulter le texte officiel en question, vous pouvez le faire sur les sites internet suivants :","privacy.contact.title":"Comment nous contacter ?","privacy.contact.text.1":"Si vous souhaitez nous contacter afin d'obtenir plus d'informations concernant notre politique de confidentialit\u00e9, nous vous recommandons d'utiliser le formulaire pr\u00e9sent sur la page de contact, ou par courriel \u00e0 l'adresse suivante:","privacy.complaint.title":"Comment contacter les autorit\u00e9s comp\u00e9tentes ?","privacy.complaint.text.1":"Dans l'\u00e9ventualit\u00e9 o\u00f9 vous souhaiteriez d\u00e9poser une plainte pour une quelconque raison en rapport avec notre politique de confidentialit\u00e9, veuillez vous adresser \u00e0 l'autorit\u00e9 nationale de protection des donn\u00e9es (DPA).","privacy.complaint.text.2":"Les informations concernant cette proc\u00e9dure peuvent \u00eatre trouv\u00e9es sur les sites internet suivants:","privacy.v2.data.title":"Collecte de donn\u00e9es","privacy.v2.data.intro.1":"Ce site web collecte des donn\u00e9es au travers des journaux d'\u00e9v\u00e8nements afin de d\u00e9tecter et bloquer de potentiels acteurs malveillants.","privacy.v2.data.intro.2":"Les donn\u00e9es collect\u00e9es ne sont en aucun cas utilis\u00e9es pour une quelconque autre raison.","privacy.v2.data.private.1":"Voici la liste des donn\u00e9es personelles collect\u00e9es:","privacy.v2.data.private_list.1":"L'addresse IP source","privacy.v2.data.private_list.2":"Le \"User-Agent\" de votre navigateur internet","privacy.v2.data.non_private.1":"Et voici la liste des donn\u00e9es non-personelles collect\u00e9es:","privacy.v2.data.non_private_list.1":"L'URI de la ressource demand\u00e9e","privacy.v2.data.non_private_list.2":"La date et l'heure","privacy.v2.data.end.1":"Les donn\u00e9es pr\u00e9sentes dans les journaux d'\u00e9v\u00e8nements sont extraites et retir\u00e9es pour \u00eatre trait\u00e9es par une application qui tourne en local toute les 30 secondes.","privacy.v2.data.end.2":"L'application en question utilise et compare ces informations avec une liste d'acteurs malveillants et comportement suspects connus.
Si une correspondance est d\u00e9tect\u00e9e, les informations priv\u00e9es sont anonymis\u00e9es et sont stock\u00e9es pendant 7 jours en attendant qu'un examen manuel soit effectu\u00e9.","privacy.v2.data.end.3":"Apr\u00e8s cette p\u00e9riode de 7 jours, ou apr\u00e8s qu'un examen ait \u00e9t\u00e9 effectu\u00e9, les donn\u00e9es sont automatiquement supprim\u00e9es.","privacy.v2.data.end.4":"Toute information concernant une requ\u00eate non suspecte est automatiquement supprim\u00e9e.","privacy.v2.data.end.5":"Ce processus n'est normalement jamais utilis\u00e9 sur des requ\u00eates provenant d'un trafic l\u00e9gitime d\u00fb au fait qu'il isole principalement les actions et requ\u00eates qui ne devraient pas \u00eatre possible sur ce site.","privacy.v2.data.end.6":"Cependant, ce processus n'est pas infaillible et il est toujours possible qu'une requ\u00eate soit isol\u00e9e par erreur.","privacy.v2.update.intro.1":"Le contenu de notre politique de confidentialit\u00e9 a \u00e9t\u00e9 originalement \u00e9crit et le 4 d\u00e9cembre 2021 modifi\u00e9 pour la derni\u00e8re fois le 18 mars 2022.","privacy.v2.update.history.1.date":"2021/12/04","privacy.v2.update.history.1.desc.1":"Version originale","privacy.v2.update.history.2.date":"2022/03/18","privacy.v2.update.history.2.desc.1":"Mise-\u00e0-jour de la section sur la collection des donn\u00e9es.","privacy.v2.update.history.2.desc.2":"Ajout d'une mention de CloudFlare et ajout de liens vers leur politique de confidentialit\u00e9.","privacy.v2.update.history.2.desc.3":"Am\u00e9lioration de la section \"Changements \u00e0 notre politique de confidentialit\u00e9\".","privacy.v2.update.history.3.date":"2022/09/09","privacy.v2.update.history.3.desc.1":"Changement des r\u00e9f\u00e9rences aux services externes pour indiquer l'utilisation de v6Node.","privacy.v2.update.history.3.desc.1.1":"Ajout de mentions de v6Node et liens vers leur politique de vie confidentialit\u00e9.","privacy.v2.update.history.3.desc.1.2":"Suppression de mentions de CloudFlare.","privacy.v2.update.history.3.desc.2":"Changement de la section \"Cookies\" afin d'indiquer qu'ils ne seront plus utilis\u00e9s sur les domaines publics.","privacy.v2.update.end.2":"En cas de changement, vous serez clairement inform\u00e9 et une copie des anciennes versions de notre politique sera disponible au travers de cette page.","privacy.v2.third.title":"Organismes tiers","privacy.v2.third.intro.1":"Ce site web utilise les services propos\u00e9s par v6Node afin d'emp\u00eacher des acteurs malveillants d'y acc\u00e9der et dans le but de mettre en place un syst\u00e8me de reverse-proxy.","privacy.v2.third.intro.2":"Ceci a pour but d'am\u00e9liorer l'exp\u00e9rience des personnes le visitant gr\u00e2ce \u00e0 un syst\u00e8me de filtrage et caching priv\u00e9.","privacy.v2.third.intro.3":"Aucune des donn\u00e9es collect\u00e9es et stock\u00e9es par v6Node et le syst\u00e8me d\u00e9cris ci-dessus n'est utilis\u00e9 ou stock\u00e9.","privacy.v2.third.intro.4":"Si vous souhaitez consulter leur politique de confidentialit\u00e9 ainsi que celle de leur partenaires, vous pouvez le faire en suivant les liens ci-dessous:","privacy.v2.cookies.title":"Cookies de navigation","privacy.v2.cookies.intro.1":"Ce site web n'utilise pas, et ne stocke aucun cookies dans votre navigateur internet.","programming.title":"Programmation","programming.title.projects":"Projets","programming.java.title":"Java","programming.purebasic.title":"PureBasic","programming.python.title":"Python","programming.others.title":"Autres","programming.docker.title":"Docker","programming.apps.title":"Applications","programming.downloads.title":"T\u00e9l\u00e9chargements","programming.git.title":"D\u00e9p\u00f4ts Git","programming.tutorials.title":"Tutoriels","programming.tools.title":"Outils","programming.games.title":"Jeux & Mods","programming.library.title":"Librairies","electronics.title":"\u00c9lectronique","electronics.iot.title":"IoT","electronics.experiments.title":"Exp\u00e9riences","electronics.ham.title":"HAM","links.title":"Liens","links.visit.button":"Visiter","about.title":"\u00c0-propos","contact.description":"$contact.description","error.common.details.title":"D\u00e9tails de l'erreur","error.4xx.title":"Erreur du client HTTP","error.4xx.text":"${error.4xx.text}","error.4xx.button.back":"Retourner en arri\u00e8re","error.403.title":"Erreur 403","error.403.description":"L'acc\u00e8s \u00e0 la ressource demand\u00e9e est interdit !","error.403.explanation":"Si ce probl\u00e8me persiste, vous pouvez nous contacter via une des avenues donn\u00e9es sur la page Contact.","error.404.title":"Erreur 404","error.404.description":"La ressource demand\u00e9e est introuvable sur le serveur !","error.404.explanation":"Si ce probl\u00e8me persiste, vous pouvez nous contacter via une des avenues donn\u00e9es sur la page Contact.","error.content.title.generic":"Erreur de contenu","error.content.title.empty":"Aucun contenu trouv\u00e9","error.content.none":"Aucune erreur n'a \u00e9t\u00e9 d\u00e9tect\u00e9e.","error.content.detect.category":"Impossibilit\u00e9 de d\u00e9tecter la cat\u00e9gorie de contenu demand\u00e9e.","error.content.detect.display":"Impossibilit\u00e9 de d\u00e9tecter si une recherche ou page sp\u00e9cifique \u00e9tait demand\u00e9e.","error.content.detect.subtype":"Impossibilit\u00e9 de d\u00e9tecter le sous-type de contenu demand\u00e9.","error.content.detect.tags":"Impossibilit\u00e9 de d\u00e9tecter les tags de base du contenu demand\u00e9.","error.content.detect.empty":"Aucun contenu en rapport avec les tags choisi n'as \u00e9t\u00e9 trouv\u00e9.","error.content.tags.length":"Le param\u00e8tre d'URL \"tags\" est trop long.","error.content.tags.alphanumeric":"Un des tags donn\u00e9 dans le param\u00e8tre d'URL \"tags\" n'est pas une cha\u00eene de texte alphanum\u00e9rique valide.","error.content.detect.type":"Le type de contenu d\u00e9sir\u00e9 n'as pas pu \u00eatre d\u00e9tect\u00e9.","error.content.id.alphanumeric":"L'ID de la ressource demand\u00e9e n'est pas une cha\u00eene de texte alphanum\u00e9rique valide.","error.content.data.not.exist":"Le contenu demand\u00e9e n'a pas de fichier de rendu interne associ\u00e9.","error.content.data.no.title":"Aucun titre trouv\u00e9 !","error.content.data.no.description":"Aucune description trouv\u00e9e !","error.content.data.no.tags":"Aucun tag trouv\u00e9 !","error.content.data.no.parts":"Aucun \u00e9l\u00e9ment \u00e0 pr\u00e9senter n'a \u00e9t\u00e9 trouv\u00e9 !","error.content.data.no.subpart":"Aucun sous-\u00e9l\u00e9ment n'a \u00e9t\u00e9 trouv\u00e9 pour cet \u00e9l\u00e9ment !","error.content.data.part.unknown":"\u00c9l\u00e9ment inconnu: \"%s\" !","error.content.cannot.load":"Le contenu demand\u00e9 n'a pas pu \u00eatre charg\u00e9 !","content.title.error":"Erreur de contenu","content.title.content":"Projets","content.title.search.header":"Recherche","content.title.search.card":"Recherche de contenu","content.title.search.card.single":"R\u00e9sultat de recherche","content.title.search.card.multiple":"R\u00e9sultats de recherche","content.tags.requested":"Tags demand\u00e9s","content.search.count.single":"r\u00e9sultat","content.search.count.multiple":"r\u00e9sultats","content.fallback.content.commons.version.current":"Version actuelle","content.fallback.content.commons.version.previous.single":"Version pr\u00e9c\u00e9dente","content.fallback.content.commons.version.previous.multiple":"Versions pr\u00e9c\u00e9dentes","content.fallback.content.commons.version.old.single":"Ancienne version","content.fallback.content.commons.version.old.multiple":"Anciennes versions","content.fallback.content.commons.version.source":"Code source","content.fallback.content.commons.cpu":"Architecture de CPU","content.fallback.content.commons.cpu.any":"Ind\u00e9pendante","content.fallback.content.commons.cpu.x64":"x64","content.fallback.content.commons.cpu.x86":"x86","content.fallback.content.commons.cpu.arm":"arm","content.fallback.content.commons.cpu.arm64":"arm64","content.fallback.content.commons.na.italic":"N/A","content.fallback.content.commons.na":"N/A","content.fallback.content.commons.lang":"Langue","content.fallback.content.commons.download.single":"T\u00e9l\u00e9chargement","content.fallback.content.commons.download.multiple":"T\u00e9l\u00e9chargements","content.fallback.content.commons.version":"Version","content.fallback.content.commons.github":"D\u00e9p\u00f4t GitHub","content.fallback.content.commons.gitea":"D\u00e9p\u00f4t Gitea auto-h\u00e9berg\u00e9","content.fallback.content.commons.nuget":"Packet Nuget","content.fallback.content.commons.license.mit.single":"License MIT","content.fallback.content.commons.lang.english":"Anglais","content.fallback.content.commons.lang.french":"Fran\u00e7ais","content.fallback.content.commons.lang.luxembourgish":"Luxembourgeois","content.default.head.title":"Aucun titre trouv\u00e9 !","content.default.head.description":"Aucune description trouv\u00e9e !","content.default.opengraph.title":"Aucun titre trouv\u00e9 !","content.default.opengraph.description":"Aucune description trouv\u00e9e !","modal.title.debugging":"Informations de d\u00e9bogage"},"lb":{"home.title.nav":"Doheem","home.intro.title":"W\u00ebllkomm op NibblePoker.lu !","lang.current":"Luxembourgish"}} \ No newline at end of file diff --git a/commons/strings/en/random.json b/commons/strings/en/random.json index 2136727..c30b501 100644 --- a/commons/strings/en/random.json +++ b/commons/strings/en/random.json @@ -12,6 +12,7 @@ "programming.tutorials.title": "Tutorials", "programming.tools.title": "Tools", "programming.games.title": "Games & Mods", + "programming.library.title": "Libraries", "electronics.title": "Electronics", "electronics.iot.title": "IoT", "electronics.experiments.title": "Experiments", @@ -71,8 +72,11 @@ "content.fallback.content.commons.version.source": "Source code", "content.fallback.content.commons.cpu": "CPU Architecture", "content.fallback.content.commons.cpu.responsive": "CPU Architecture", + "content.fallback.content.commons.cpu.any": "Any architecture", "content.fallback.content.commons.cpu.x64": "x64", "content.fallback.content.commons.cpu.x86": "x86", + "content.fallback.content.commons.cpu.arm": "arm", + "content.fallback.content.commons.cpu.arm64": "arm64", "content.fallback.content.commons.na.italic": "N/A", "content.fallback.content.commons.na": "N/A", "content.fallback.content.commons.lang": "Language", @@ -81,6 +85,8 @@ "content.fallback.content.commons.version": "Version", "content.fallback.content.commons.github": "GitHub Repository", "content.fallback.content.commons.gitea": "Self-hosted Gitea Repository", + "content.fallback.content.commons.nuget": "Nuget Package", + "content.fallback.content.commons.license.mit.single": "MIT License", "content.fallback.content.commons.lang.english": "English", "content.fallback.content.commons.lang.french": "French", diff --git a/commons/strings/fr/random.json b/commons/strings/fr/random.json index 71a6416..8d29d9b 100644 --- a/commons/strings/fr/random.json +++ b/commons/strings/fr/random.json @@ -12,6 +12,7 @@ "programming.tutorials.title": "Tutoriels", "programming.tools.title": "Outils", "programming.games.title": "Jeux & Mods", + "programming.library.title": "Librairies", "electronics.title": "Électronique", "electronics.iot.title": "IoT", "electronics.experiments.title": "Expériences", @@ -70,8 +71,11 @@ "content.fallback.content.commons.version.old.multiple": "Anciennes versions", "content.fallback.content.commons.version.source": "Code source", "content.fallback.content.commons.cpu": "Architecture de CPU", + "content.fallback.content.commons.cpu.any": "Indépendante", "content.fallback.content.commons.cpu.x64": "x64", "content.fallback.content.commons.cpu.x86": "x86", + "content.fallback.content.commons.cpu.arm": "arm", + "content.fallback.content.commons.cpu.arm64": "arm64", "content.fallback.content.commons.na.italic": "N/A", "content.fallback.content.commons.na": "N/A", "content.fallback.content.commons.lang": "Langue", @@ -80,6 +84,8 @@ "content.fallback.content.commons.version": "Version", "content.fallback.content.commons.github": "Dépôt GitHub", "content.fallback.content.commons.gitea": "Dépôt Gitea auto-hébergé", + "content.fallback.content.commons.nuget": "Packet Nuget", + "content.fallback.content.commons.license.mit.single": "License MIT", "content.fallback.content.commons.lang.english": "Anglais", "content.fallback.content.commons.lang.french": "Français", diff --git a/content/index.json b/content/index.json index 9e2f64f..bac88d5 100644 --- a/content/index.json +++ b/content/index.json @@ -1,16 +1,16 @@ [ { - "id": "lscom-cli", + "id": "lscom-cli-dotnet", "title": { - "en": "PB-ListComPort", - "fr": "PB-ListComPort" + "en": "DotNet-ListComPort", + "fr": "DotNet-ListComPort" }, "preamble": { "en": "A simple CLI tool that can list COM ports with their name, friendly name and device name easily and cleanly.
This tool is intended to replace the tedious task of having to use the mode command, and the Device Manager to find a newly plugged-in device that provides a COM port.", - "fr": "Un petit utilitaire pour invité de commande qui permet de facilement lister les noms, noms formatés et chemin des ports COM.
Cet outil a pour bût de faciliter cette tâche sans avoir à utiliser la commande mode ou le Gestionnaire de périphérique." + "fr": "Un petit utilitaire pour invité de commande qui permet de facilement lister les noms, noms formatés et chemins des ports COM.
Cet outil a pour bût de faciliter cette tâche sans avoir à utiliser la commande mode ou le Gestionnaire de périphérique." }, - "image": "/resources/Azias/imgs/lscom/lscom-v2-text-01-bkgd-cli.png", - "tags": ["application", "tool" ,"lscom", "purebasic", "windows"] + "image": "/resources/Azias/imgs/lscom/lscom-dotnet.png", + "tags": ["application", "tool" ,"lscom", "dotnet", "windows"] }, { "id": "youtube-auto-archiver", @@ -41,6 +41,22 @@ "web" ] }, + { + "id": "dotnet-arguments", + "title": { + "en": "DotNet-Arguments", + "fr": "DotNet-Arguments" + }, + "preamble": { + "en": "A simple and 'to-the-point' library to parse launch arguments in .NET and .NET Core applications.", + "fr": "Une petite librairie simple et efficace pour lire et interpréter les options de lancement d'un programme pour .NET et .NET Core." + }, + "image": "/resources/Azias/imgs/placeholder.png", + "tags": [ + "library", + "dotnet" + ] + }, { "id": "mc-expanded-iron-bundles", "title": { @@ -57,5 +73,18 @@ "minecraft", "mod" ] + }, + { + "id": "lscom-cli", + "title": { + "en": "PB-ListComPort (Legacy)", + "fr": "PB-ListComPort (Legacy)" + }, + "preamble": { + "en": "A simple CLI tool that can list COM ports with their name, friendly name and device name easily and cleanly.
This tool is intended to replace the tedious task of having to use the mode command, and the Device Manager to find a newly plugged-in device that provides a COM port.", + "fr": "Un petit utilitaire pour invité de commande qui permet de facilement lister les noms, noms formatés et chemins des ports COM.
Cet outil a pour bût de faciliter cette tâche sans avoir à utiliser la commande mode ou le Gestionnaire de périphérique." + }, + "image": "/resources/Azias/imgs/lscom/lscom-v2-text-01-bkgd-cli.png", + "tags": ["application", "tool" ,"lscom", "purebasic", "windows"] } ] diff --git a/content/items/dotnet-arguments.json b/content/items/dotnet-arguments.json new file mode 100644 index 0000000..3590cb4 --- /dev/null +++ b/content/items/dotnet-arguments.json @@ -0,0 +1,201 @@ +{ + "strings": { + "en": { + "meta.title": "DotNet-Arguments", + "meta.description": "A simple and 'to-the-point' library to parse launch arguments in .NET and .NET Core applications.", + "article.subtitle": " View on GitHub", + "intro.title": "Introduction", + "intro.p1": "A simple and 'to-the-point' library to parse launch arguments in .NET and .NET Core applications.", + "intro.p2": "This library is an improved port of my PB-Arguments library that intended to achieve the same goals but was missing support for some features.", + "requirements.title": "Requirements", + "requirements.1": ".NET v6.0+", + "requirements.2": "C# 10.0", + "documentation.title": "Documentation", + "documentation.1": "Go to \"aziascreations.github.io/DotNet-Arguments/\" for the HTML documentation.", + "example.title": "Basic Example", + "license.title": "License", + "links.title": "Links" + }, + "fr": { + "meta.title": "DotNet-Arguments", + "meta.description": "Une petite librairie simple et efficace pour lire et interpréter les options de lancement d'un programme pour .NET et .NET Core.", + "article.subtitle": " Voir sur GitHub", + "intro.title": "Introduction", + "intro.p1": "Une petite librarie efficace qui permet de facilement et simplement interpréter et utiliser les options de lancement d'un programme en .NET et .NET Core.", + "intro.p2": "Cette librairie est une version améliorée de mon ancienne librairie PB-Arguments qui visait à accomplir les mêmes goals mais à laquelle il manquait quelques fonctionnalités.", + "requirements.title": "Besoins système", + "requirements.1": ".NET v6.0+", + "requirements.2": "C# 10.0", + "documentation.title": "Documentation", + "documentation.1": "Allez sur \"aziascreations.github.io/DotNet-Arguments/\" pour consulter la documentation.", + "example.title": "Example basique", + "license.title": "Licence", + "links.title": "Liens" + } + }, + "metadata": { + "template": "article", + "head": { + "title": "meta.title", + "description": "meta.description" + }, + "opengraph": { + "title": "meta.title", + "description": "meta.description", + "type": null, + "url": null, + "image": null, + "image_type": null + }, + "article": { + "icon": "fad fa-puzzle-piece", + "title": "meta.title", + "subtitle": "article.subtitle", + "tags": ["library", "dotnet"] + } + }, + "elements": [ + { + "type": "container", "padding": 20, + "modifiers": ["no-bottom-padding", "no-top-margin"], + "parts": [ + {"type": "h1", "content": "intro.title"}, + {"type": "paragraph", "indent": 2, "content": "intro.p1"}, + {"type": "paragraph", "indent": 2, "content": "intro.p2"} + ] + }, + + { + "type": "container", + "padding": 20, + "modifiers": ["no-bottom-padding", "no-top-margin"], + "parts": [ + {"type": "h1", "content": "requirements.title"}, + { + "type": "paragraph", + "indent": 2, + "parts": [ + {"type": "raw", "content": "●  ", "localize": false}, + {"type": "raw", "link": "https://dotnet.microsoft.com/en-us/download/dotnet/6.0", "content": "requirements.1"}, + {"type": "raw", "content": "
", "localize": false}, + {"type": "raw", "content": "●  ", "localize": false}, + {"type": "raw", "content": "requirements.2"} + ] + } + ] + }, + + { + "type": "container", "padding": 20, + "modifiers": ["no-bottom-padding", "no-top-margin"], + "parts": [ + {"type": "h1", "content": "documentation.title"}, + {"type": "paragraph", "indent": 2, "content": "documentation.1"} + ] + }, + + { + "type": "container", "padding": 20, + "modifiers": ["_no-top-padding", "no-bottom-padding"], + "parts": [ + {"type": "h1", "content": "example.title"}, + { + "type": "code", "indent": 2, + "modifiers": ["horizontal-scroll", "code-block"], + "code": [ + "// Preparing options and root verb.", + "Option OptionHelp = new('h', \"help\", \"\", OptionFlags.StopsParsing);", + "Option OptionVerbose = new('v', \"verbose\", \"\", OptionFlags.Repeatable);", + "", + "Verb RootVerb = new Verb(\"\").RegisterOption(OptionHelp).RegisterOption(OptionVerbose);", + "", + "// Parsing lanch arguments", + "try {", + " ArgumentsParser.ParseArguments(RootVerb, args); // 'args' is gotten from Main().", + "} catch(ArgumentException) {", + " Console.Error.Write(\"Failed to parse the launch arguments !\");", + " RootVerb.Clear(); // Ignoring the error and simulating no launch parameters.", + "}", + "", + "// Using the results", + "if(OptionHelp.WasUsed()) {", + " Console.WriteLine(HelpText.GetFullHelpText(RootVerb, \",app.exe\",));", + "}", + "", + "if(OptionVerbose.WasUsed() && OptionVerbose.Occurrences >= 2) {", + " // We count the number of occurences to enable more logging.", + " Console.WriteLine(\"Activating super-verbose mode !\",);", + "}" + ] + } + ] + }, + + { + "type": "container", "padding": 20, + "modifiers": ["no-bottom-padding", "no-top-margin"], + "parts": [ + {"type": "h1", "content": "license.title"}, + {"type": "paragraph", "indent": 2, "content": "content.commons.license.mit.single", "link": "https://github.com/aziascreations/DotNet-Arguments/blob/master/LICENSE"} + ] + }, + + { + "type": "container", + "padding": 20, + "modifiers": ["no-top-margin"], + "parts": [ + {"type": "h1", "content": "links.title"}, + { + "type": "paragraph", + "indent": 2, + "parts": [ + {"type": "raw", "content": "●  ", "localize": false}, + { + "type": "raw", "link": "https://www.nuget.org/packages/NibblePoker.Library.Arguments", + "parts": [ + {"type": "raw", "content": "content.commons.nuget"}, + {"type": "raw", "content": "  -  ", "localize": false}, + { + "type": "raw", + "content": "(https://www.nuget.org/packages/NibblePoker.Library.Arguments)", + "localize": false + } + ] + }, + {"type": "raw", "content": "
", "localize": false}, + {"type": "raw", "content": "●  ", "localize": false}, + { + "type": "raw", "link": "https://github.com/aziascreations/DotNet-Arguments", + "parts": [ + {"type": "raw", "content": "content.commons.github"}, + {"type": "raw", "content": "  -  ", "localize": false}, + { + "type": "raw", + "content": "(https://github.com/aziascreations/DotNet-Arguments)", + "localize": false + } + ] + }, + {"type": "raw", "content": "
", "localize": false}, + {"type": "raw", "content": "●  ", "localize": false}, + { + "type": "raw", "link": "https://git.nibblepoker.lu/aziascreations/DotNet-Arguments", + "parts": [ + {"type": "raw", "content": "content.commons.gitea"}, + {"type": "raw", "content": "  -  ", "localize": false}, + { + "type": "raw", + "content": "(https://git.nibblepoker.lu/aziascreations/DotNet-Arguments)", + "localize": false + } + ] + } + ] + } + ] + } + + + ] +} \ No newline at end of file diff --git a/content/items/lscom-cli-dotnet.json b/content/items/lscom-cli-dotnet.json new file mode 100644 index 0000000..7d77dff --- /dev/null +++ b/content/items/lscom-cli-dotnet.json @@ -0,0 +1,473 @@ +{ + "strings": { + "en": { + "meta.title": "DotNet-ListComPort", + "meta.description": "A simple CLI tool that can list COM ports with their name, friendly name and device name easily and cleanly.", + "article.subtitle": " View on GitHub", + "intro.title": "Introduction", + "intro.p1": "A simple CLI tool that can list COM ports with their full name easily and cleanly.", + "intro.p2": "This tool is intended to replace the tedious task of having to use the mode command, and the Device Manager to find a newly plugged-in device that provides a COM port.", + "intro.p3": "This version of the program is a complete refactoring of my old PB-ListComPort project that also changes from the proprietary and paid PureBasic language and compiler to .NET 6.0.", + "requirements.title": "Requirements", + "requirements.1": "Windows", + "requirements.2": "Any CPU architecture", + "requirements.3": ".NET 6.0", + "requirements.4": "Optional if using the larger \"self-contained\" builds.", + "improvements.title": "Improvements over PB-ListComPort", + "improvements.1": "Switched from PureBasic to .NET 6.0.", + "improvements.2": "Improved a lot of the program's logic.", + "improvements.3": "Added the -h/--short-help.", + "improvements.4": "Added support for Windows ARM & ARM64.", + "improvements.5": "Support for running without a console.", + "usage.title": "Usage", + "formatting.title": "Output formatting", + "requirements.table.title": "Requirements", + "requirements.text.dotnet": ".NET 6.0", + "requirements.text.none.ms": "None", + "requirements.text.none.mp": "None", + "requirements.text.none.fs": "None", + "requirements.text.none.fp": "None", + "links.title": "Links" + }, + "fr": { + "meta.title": "DotNet-ListComPort", + "meta.description": "Un petit utilitaire pour invité de commande qui permet de facilement lister les noms, noms formatés et chemin des ports COM.", + "article.subtitle": " Voir sur GitHub", + "intro.title": "Introduction", + "intro.p1": "Un petit utilitaire pour invité de commande qui permet de facilement lister les noms, noms formatés et chemins des ports COM.", + "intro.p2": "Cet outil a pour bût de faciliter cette tâche sans avoir à utiliser la commande mode ou le Gestionnaire de périphérique.", + "intro.p3": "Cette version du programme a completement été réecrit depuis le projet original PB-ListComPort en .NET 6.0 au lieu de PureBasic afin de ne plus utiliser de langage de programmation propriétaire.", + "requirements.title": "Dépendances", + "requirements.1": "Windows", + "requirements.2": "Toutes architectures de CPU", + "requirements.3": ".NET 6.0", + "requirements.4": "Optionnel si vous utilisez les paquets \"self-contained\".", + "improvements.title": "Améliorations", + "improvements.1": "Changement de PureBasic vers .NET 6.0.", + "improvements.2": "Amélioration de la logique interne du programme.", + "improvements.3": "Ajout de l'option -h/--short-help.", + "improvements.4": "Support pour Windows ARM et ARM64.", + "improvements.5": "Support pour le lancement sans invité de commande.", + "usage.title": "Utilisation", + "formatting.title": "Formatage de sortie", + "requirements.table.title": "Dépendances", + "requirements.text.none.ms": "Aucun", + "requirements.text.none.mp": "Aucuns", + "requirements.text.none.fs": "Aucune", + "requirements.text.none.fp": "Aucunes", + "links.title": "Liens" + } + }, + "metadata": { + "template": "article", + "head": { + "title": "meta.title", + "description": "meta.description" + }, + "opengraph": { + "title": "meta.title", + "description": "meta.description", + "type": null, + "url": null, + "image": null, + "image_type": null + }, + "article": { + "icon": "fad fa-terminal", + "title": "meta.title", + "subtitle": "article.subtitle", + "tags": ["application", "tool", "lscom", "dotnet", "windows"] + } + }, + "elements": [ + { + "type": "container", "padding": 20, + "modifiers": ["no-bottom-padding", "no-top-margin"], + "parts": [ + {"type": "h1", "content": "intro.title"}, + {"type": "paragraph", "indent": 2, "content": "intro.p1"}, + {"type": "paragraph", "indent": 2, "content": "intro.p2"}, + {"type": "paragraph", "indent": 2, "content": "intro.p3"} + ] + }, + + { + "type": "container", "padding": 20, + "modifiers": ["no-bottom-padding", "no-top-margin"], + "parts": [ + {"type": "h1", "content": "requirements.title"}, + { + "type": "paragraph", + "indent": 2, + "parts": [ + {"type": "raw", "content": "●  ", "localize": false}, + {"type": "raw", "content": "requirements.1"}, + {"type": "raw", "content": "
", "localize": false}, + {"type": "raw", "content": "    ∘  ", "localize": false}, + {"type": "raw", "content": "requirements.2"}, + {"type": "raw", "content": "
", "localize": false}, + {"type": "raw", "content": "●  ", "localize": false}, + {"type": "raw", "content": "requirements.3"}, + {"type": "raw", "content": "
", "localize": false}, + {"type": "raw", "content": "    ∘  ", "localize": false}, + {"type": "raw", "content": "requirements.4"} + ] + } + ] + }, + + { + "type": "container", "padding": 20, + "modifiers": ["no-bottom-padding", "no-top-margin"], + "parts": [ + {"type": "h1", "content": "improvements.title"}, + { + "type": "paragraph", + "indent": 2, + "parts": [ + {"type": "raw", "content": "●  ", "localize": false}, + {"type": "raw", "content": "improvements.1"}, + {"type": "raw", "content": "
", "localize": false}, + {"type": "raw", "content": "●  ", "localize": false}, + {"type": "raw", "content": "improvements.2"}, + {"type": "raw", "content": "
", "localize": false}, + {"type": "raw", "content": "●  ", "localize": false}, + {"type": "raw", "content": "improvements.3"}, + {"type": "raw", "content": "
", "localize": false}, + {"type": "raw", "content": "●  ", "localize": false}, + {"type": "raw", "content": "improvements.4"}, + {"type": "raw", "content": "
", "localize": false}, + {"type": "raw", "content": "●  ", "localize": false}, + {"type": "raw", "content": "improvements.5"} + ] + } + ] + }, + + { + "type": "container", "padding": 20, + "modifiers": ["_no-top-padding", "no-bottom-padding"], + "parts": [ + {"type": "h1", "content": "usage.title"}, + { + "type": "code", "indent": 2, + "modifiers": ["horizontal-scroll", "code-block"], + "code": [ + "lscom.exe [-a|--show-all] [-d|--show-device] [-D |--divider ] [-f|--show-friendly]", + " [-h|--help] [-H|--short-help] [-n|--show-name-raw] [-P|--no-pretty] [-s|--sort]", + " [-S|--sort-reverse] [-t|--tab-padding] [-v|--version] [-V|--version-only]", + "", + "Launch arguments:", + " -a, --show-all Display the complete port's name (Equal to '-dfn')", + " -d, --show-device Displays the port's device name", + " -D , --divider Uses the given string or char as a separator (Can be empty string !)", + " -f, --show-friendly Displays the port's friendly name", + " -h, --help Display this help text", + " -H, --short-help Display the short help text", + " -n, --show-name-raw Displays the port's raw name (See remarks section)", + " -P, --no-pretty Disables the pretty printing format (Equal to -D \" \")", + " -s, --sort Sorts the port based on their raw names in an ascending order", + " -S, --sort-reverse Sorts the port based on their raw names in a descending order", + " -t, --tab-padding Use tabs for padding between the types of names (Overrides '-D')", + " -v, --version Shows the utility's version number and other info", + " -V, --version-only Shows the utility's version number only (Overrides '-v')" + ] + } + ] + }, + + { + "type": "container", "padding": 20, + "modifiers": ["_no-top-padding", "no-bottom-padding"], + "parts": [ + {"type": "h1", "content": "formatting.title"}, + { + "type": "code", "indent": 2, + "modifiers": ["horizontal-scroll", "code-block"], + "code": [ + " *┬> No launch arguments:", + " └──> ${Raw name} => COM1", + " *┬> '-d' or '-f'", + " ├──> ${Device name} => \\Device\\Serial1", + " └──> ${Friendly name} => Communications Port", + " *┬> '-d' and '-f'", + " └──> ${Friendly name} [${Device name}] => Communications Port [\\Device\\Serial1]", + " *┬> '-n' and '-d'", + " └──> ${Raw name} [$DeviceName] => COM1 [\\Device\\Serial1]", + " *┬> '-n' and '-f'", + " └──> ${Raw name} - ${Friendly name} => COM1 - Communications Port", + " *┬> '-ndf' or '-a'", + " └──> ${Raw name} - ${Friendly name} [${Device name}] => COM1 - Communications Port [\\Device\\Serial1]", + " *┬> '-ndfp' or '-ap'", + " └──> ${Raw name} ${Friendly name} ${Device name} => COM1 Communications Port \\Device\\Serial1", + " *┬> '-ndfD \";\"' or '-aD \";\"'", + " └──> ${Raw name};${Friendly name};${Device name} => COM1;Communications Port;\\Device\\Serial1" + ] + } + ] + }, + + { + "type": "container", "padding": 20, + "modifiers": ["_no-top-padding"], + "parts": [ + {"type": "h1", "modifiers": ["no-top-margin"], "content": "content.commons.version.current"}, + {"type": "spacer", "size": 1}, + { + "type": "container", "padding": 0, + "modifiers": ["no-bottom-padding", "no-top-margin", "card", "horizontal-scroll"], + "parts": [ + { + "type": "table", "modifiers": ["striped", "inner-bordered"], + "head": [ + {"type": "raw", "content": "content.commons.cpu.responsive"}, + {"type": "raw", "content": "requirements.table.title"}, + {"type": "raw", "content": "content.commons.download.single"} + ], + "body": [ + [ + {"type": "raw", "content": "content.commons.cpu.any"}, + {"type": "raw", "content": "requirements.text.dotnet"}, + { + "type": "raw", + "parts": [{ + "type": "button", "link": "https://files.nibblepoker.lu/downloads/DotNet-ListComPort/3.0.0/ListComPort_v3.0.0_AnyCPU.zip", + "modifiers": ["thin"], + "parts": [{ + "type": "raw", + "localize": false, + "content": "ListComPort_v3.0.0_AnyCPU.zip" + }] + }] + } + ],[ + {"type": "raw", "content": "content.commons.cpu.x64", "rowspan": 3}, + {"type": "raw", "content": "requirements.text.dotnet"}, + { + "type": "raw", + "parts": [{ + "type": "button", "link": "https://files.nibblepoker.lu/downloads/DotNet-ListComPort/3.0.0/ListComPort_v3.0.0_x64_Single.zip", + "modifiers": ["thin"], + "parts": [{ + "type": "raw", + "localize": false, + "content": "ListComPort_v3.0.0_x64_Single.zip" + }] + }] + } + ],[ + {"type": "raw", "content": "requirements.text.none.fp", "rowspan": 2}, + { + "type": "raw", + "parts": [{ + "type": "button", "link": "https://files.nibblepoker.lu/downloads/DotNet-ListComPort/3.0.0/ListComPort_v3.0.0_x64_SelfContained.zip", + "modifiers": ["thin"], + "parts": [{ + "type": "raw", + "localize": false, + "content": "ListComPort_v3.0.0_x64_SelfContained.zip" + }] + }] + } + ],[ + { + "type": "raw", + "parts": [{ + "type": "button", "link": "https://files.nibblepoker.lu/downloads/DotNet-ListComPort/3.0.0/ListComPort_v3.0.0_x64.msi", + "modifiers": ["thin"], + "parts": [{ + "type": "raw", + "localize": false, + "content": "ListComPort_v3.0.0_x64.msi" + }] + }] + } + ],[ + {"type": "raw", "content": "content.commons.cpu.x86", "rowspan": 3}, + {"type": "raw", "content": "requirements.text.dotnet"}, + { + "type": "raw", + "parts": [{ + "type": "button", "link": "https://files.nibblepoker.lu/downloads/DotNet-ListComPort/3.0.0/ListComPort_v3.0.0_x86_Single.zip", + "modifiers": ["thin"], + "parts": [{ + "type": "raw", + "localize": false, + "content": "ListComPort_v3.0.0_x86_Single.zip" + }] + }] + } + ],[ + {"type": "raw", "content": "requirements.text.none.fp", "rowspan": 2}, + { + "type": "raw", + "parts": [{ + "type": "button", "link": "https://files.nibblepoker.lu/downloads/DotNet-ListComPort/3.0.0/ListComPort_v3.0.0_x86_SelfContained.zip", + "modifiers": ["thin"], + "parts": [{ + "type": "raw", + "localize": false, + "content": "ListComPort_v3.0.0_x86_SelfContained.zip" + }] + }] + } + ],[ + { + "type": "raw", + "parts": [{ + "type": "button", "link": "https://files.nibblepoker.lu/downloads/DotNet-ListComPort/3.0.0/ListComPort_v3.0.0_x86.msi", + "modifiers": ["thin"], + "parts": [{ + "type": "raw", + "localize": false, + "content": "ListComPort_v3.0.0_x86.msi" + }] + }] + } + ],[ + {"type": "raw", "content": "content.commons.cpu.arm64", "rowspan": 2}, + {"type": "raw", "content": "requirements.text.dotnet"}, + { + "type": "raw", + "parts": [{ + "type": "button", "link": "https://files.nibblepoker.lu/downloads/DotNet-ListComPort/3.0.0/ListComPort_v3.0.0_arm64_Single.zip", + "modifiers": ["thin"], + "parts": [{ + "type": "raw", + "localize": false, + "content": "ListComPort_v3.0.0_arm64_Single.zip" + }] + }] + } + ],[ + {"type": "raw", "content": "requirements.text.none.fp"}, + { + "type": "raw", + "parts": [{ + "type": "button", "link": "https://files.nibblepoker.lu/downloads/DotNet-ListComPort/3.0.0/ListComPort_v3.0.0_arm64_SelfContained.zip", + "modifiers": ["thin"], + "parts": [{ + "type": "raw", + "localize": false, + "content": "ListComPort_v3.0.0_arm64_SelfContained.zip" + }] + }] + } + ],[ + {"type": "raw", "content": "content.commons.cpu.arm", "rowspan": 2}, + {"type": "raw", "content": "requirements.text.dotnet"}, + { + "type": "raw", + "parts": [{ + "type": "button", "link": "https://files.nibblepoker.lu/downloads/DotNet-ListComPort/3.0.0/ListComPort_v3.0.0_arm_Single.zip", + "modifiers": ["thin"], + "parts": [{ + "type": "raw", + "localize": false, + "content": "ListComPort_v3.0.0_arm_Single.zip" + }] + }] + } + ],[ + {"type": "raw", "content": "requirements.text.none.fp"}, + { + "type": "raw", + "parts": [{ + "type": "button", "link": "https://files.nibblepoker.lu/downloads/DotNet-ListComPort/3.0.0/ListComPort_v3.0.0_arm_SelfContained.zip", + "modifiers": ["thin"], + "parts": [{ + "type": "raw", + "localize": false, + "content": "ListComPort_v3.0.0_arm_SelfContained.zip" + }] + }] + } + ] + ] + } + ] + } + ] + }, + + { + "type": "container", "padding": 20, "modifiers": ["no-top-padding"], + "parts": [ + {"type": "h1", "modifiers": ["no-top-margin"], "content": "content.commons.version.source"}, + {"type": "spacer", "size": 1}, + { + "type": "container", "padding": 0, + "modifiers": ["no-bottom-padding", "no-top-margin", "card", "horizontal-scroll"], + "parts": [{ + "type": "table", "modifiers": ["striped", "inner-bordered"], + "head": [ + {"type": "raw", "content": "content.commons.version"}, + {"type": "raw", "content": "content.commons.download.multiple"} + ], + "body": [[ + {"type": "raw", "content": "v3.0.0", "localize": false}, + { + "type": "raw", + "parts": [ + { + "type": "button", "modifiers": ["thin"], + "link": "https://files.nibblepoker.lu/downloads/DotNet-ListComPort/3.0.0/DotNet-ListComPort-3.0.0.zip", + "content": "3.0.0.zip", + "localize": false + },{ + "type": "button", "modifiers": ["thin"], + "link": "https://files.nibblepoker.lu/downloads/DotNet-ListComPort/3.0.0/DotNet-ListComPort-3.0.0.tar.gz", + "content": "3.0.0.tar.gz", + "localize": false + } + ] + } + ]] + }] + } + ] + }, + + { + "type": "container", + "padding": 20, + "modifiers": ["no-top-margin"], + "parts": [ + {"type": "h1", "content": "links.title"}, + { + "type": "paragraph", + "indent": 2, + "parts": [ + {"type": "raw", "content": "●  ", "localize": false}, + { + "type": "raw", "link": "https://github.com/aziascreations/DotNet-ListComPort", + "parts": [ + {"type": "raw", "content": "content.commons.github"}, + {"type": "raw", "content": "  -  ", "localize": false}, + { + "type": "raw", + "content": "(https://github.com/aziascreations/DotNet-ListComPort)", + "localize": false + } + ] + }, + {"type": "raw", "content": "
", "localize": false}, + {"type": "raw", "content": "●  ", "localize": false}, + { + "type": "raw", "link": "https://git.nibblepoker.lu/aziascreations/DotNet-ListComPort", + "parts": [ + {"type": "raw", "content": "content.commons.gitea"}, + {"type": "raw", "content": "  -  ", "localize": false}, + { + "type": "raw", + "content": "(https://git.nibblepoker.lu/aziascreations/DotNet-ListComPort)", + "localize": false + } + ] + } + ] + } + ] + } + ] +} diff --git a/content/items/lscom-cli.json b/content/items/lscom-cli.json index ee7c226..7f2187e 100644 --- a/content/items/lscom-cli.json +++ b/content/items/lscom-cli.json @@ -1,7 +1,7 @@ { "strings": { "en": { - "meta.title": "PB-ListComPort", + "meta.title": "PB-ListComPort (Legacy)", "meta.description": "A simple CLI tool that can list COM ports with their name, friendly name and device name easily and cleanly.", "article.subtitle": " View on GitHub", "intro.title": "Introduction", @@ -13,7 +13,7 @@ "links.title": "Links" }, "fr": { - "meta.title": "PB-ListComPort", + "meta.title": "PB-ListComPort (Legacy)", "meta.description": "Un petit utilitaire pour invité de commande qui permet de facilement lister les noms, noms formatés et chemin des ports COM.", "article.subtitle": " Voir sur GitHub", "intro.title": "Introduction", @@ -289,25 +289,15 @@ }] } ],[ - {"type": "raw", "content": "v1.0.0", "localize": false, "rowspan": 2}, + {"type": "raw", "content": "v1.0.0", "localize": false}, {"type": "raw", "content": "content.commons.cpu.x64"}, - {"type": "raw", "content": "content.commons.lang.english", "rowspan": 2}, + {"type": "raw", "content": "content.commons.lang.english"}, { "type": "raw", "parts": [{ - "type": "button", "link": "https://files.nibblepoker.lu/downloads/PB-ListComPort/1.0.0/lscom-x64.exe", + "type": "button", "link": "https://files.nibblepoker.lu/downloads/PB-ListComPort/1.0.0/lscom.exe", "modifiers": ["thin"], "localize": false, - "content": "lscom-x64.exe" - }] - } - ],[ - {"type": "raw", "content": "content.commons.cpu.x86"}, - { - "type": "raw", - "parts": [{ - "type": "button", "link": "https://files.nibblepoker.lu/downloads/PB-ListComPort/1.0.0/lscom-x86.exe", - "modifiers": ["thin"], "localize": false, - "content": "lscom-x86.exe" + "content": "lscom.exe" }] } ] diff --git a/content/items/trash/test.json b/content/items/trash/test.json deleted file mode 100644 index dedae05..0000000 --- a/content/items/trash/test.json +++ /dev/null @@ -1,182 +0,0 @@ -{ - "title": { - "icon": "fad fa-debug", - "page": {"en": "Testing page", "fr": "Page de test"}, - "card": { - "main": {"en": "Testing page", "fr": "Page de test"}, - "sub": {"en": "How did you end up here ?", "fr": "title.card.sub.fr"} - } - }, - "meta": { - "title": {"en": "Testing page", "fr": "Page de test"}, - "description": { - "en": "A test page used internally when writing new content rules and/or elements.", - "fr": "Une page de test utilisé pour écrire de nouvelles règles ou éléments pour ce site." - } - }, - "parts": [ - { - "_": "Testing the paragraph padding and margin.", - "type": "container", "padding": 10, - "modifiers": ["no-bottom-padding", "no-top-margin"], - "content": { - "parts": [ - { - "type": "paragraph", "modifiers": ["no-top-margin"], - "content": {"en": "container.p10.no-bottom-padding.no-top-margin > p.no-top-margin"} - },{ - "type": "paragraph", "modifiers": ["no-top-margin"], - "content": {"en": "Joe mama !"} - } - ] - } - }, - - {"type": "hr"}, - - { - "_": "Testing the paragraph padding and margin.", - "type": "container", "padding": 10, - "modifiers": ["no-bottom-padding", "no-top-margin"], - "content": { - "parts": [ - { - "type": "paragraph", "modifiers": ["no-top-margin"], - "content": {"en": "container.p10.no-bottom-padding.no-top-margin > gallery > ..."} - },{ - "type": "gallery", "modifiers": [], - "content": { - "parts": [ - { - "type": "image", "modifiers": ["fill-height"], - "alt": "Alt text", "src": "/resources/Azias/imgs/lscom/screen-cli-csv-2x-xBR.png" - },{ - "type": "image", "modifiers": ["fill-height"], - "alt": "Alt text", "src": "/resources/Azias/imgs/lscom/screen-cli-full-2x-xBR.png" - },{ - "type": "image", "modifiers": ["fill-height"], - "alt": "Alt text", "src": "/resources/Azias/imgs/lscom/screen-cli-stylish-2x-xBR.png" - } - ] - } - } - ] - } - }, - - {"type": "hr"}, - - { - "_": "Testing tables", - "type": "container", "padding": 10, - "modifiers": ["no-bottom-padding", "no-top-margin"], - "content": { - "parts": [ - { - "type": "paragraph", "modifiers": ["no-top-margin"], - "content": {"en": "container.p10.no-bottom-padding.no-top-margin > table.striped.inner-bordered"} - },{ - "type": "table", - "modifiers": ["striped", "inner-bordered"], - "head": [ - {"en": "Column 1"}, {"en": "Column 2"}, {"en": "Column 3"}, {"en": "Column 4"} - ], - "body": [ - [{"en": "Data 1"}, {"en": "Data 2"}, {"en": "Data 3"}, {"en": "Data 4"}], - [{"en": "Data 5"}, {"en": "Data 6"}, {"en": "Data 7"}, {"en": "Data 8"}] - ] - } - ] - } - }, - - {"type": "hr"}, - - { - "_": "Testing tables", - "type": "container", "padding": 10, - "modifiers": ["no-bottom-padding", "no-top-margin"], - "content": { - "parts": [ - { - "type": "paragraph", "modifiers": ["no-top-margin"], - "content": {"en": "container.p10.no-bottom-padding.no-top-margin > table.striped.inner-bordered.outer-bordered"} - },{ - "type": "table", - "modifiers": ["striped", "inner-bordered", "outer-bordered"], - "head": [ - {"en": "Column 1"}, {"en": "Column 2"}, {"en": "Column 3"}, {"en": "Column 4"} - ], - "body": [ - [{"en": "Data 1"}, {"en": "Data 2"}, {"en": "Data 3"}, {"en": "Data 4"}], - [{"en": "Data 5"}, {"en": "Data 6"}, {"en": "Data 7"}, {"en": "Data 8"}] - ] - } - ] - } - }, - - {"type": "hr"}, - - { - "_": "Testing tables", - "type": "container", "padding": 10, - "modifiers": ["no-bottom-padding", "no-top-margin"], - "content": { - "parts": [ - { - "type": "paragraph", "modifiers": ["no-top-margin"], - "content": {"en": "container.p10.no-bottom-padding.no-top-margin > container.p0.card?horizontal-scroll > table.striped.inner-bordered"} - }, - { - "_": "Testing tables", - "type": "container", "padding": 0, - "modifiers": ["no-bottom-padding", "no-top-margin", "card"], - "content": { - "parts": [ - { - "type": "table", - "modifiers": ["striped", "inner-bordered"], - "head": [ - {"en": "Column 1"}, {"en": "Column 2"}, {"en": "Column 3"}, {"en": "Column 4"} - ], - "body": [ - [{"en": "Data 1"}, {"en": "Data 2"}, {"en": "Data 3"}, {"en": "Data 4"}], - [{"en": "Data 5"}, {"en": "Data 6"}, {"en": "Data 7"}, {"en": "Data 8"}] - ] - } - ] - } - }, - - {"type": "spacer", "size": 2}, - - { - "_": "Testing tables", - "type": "container", "padding": 0, - "modifiers": ["no-bottom-padding", "no-top-margin", "card", "horizontal-scroll"], - "content": { - "parts": [ - { - "type": "table", - "modifiers": ["striped", "inner-bordered"], - "head": [ - {"en": "Column 1"}, {"en": "Column 2"}, {"en": "Column 3"}, {"en": "Column 4"}, {"en": "Column 5"}, {"en": "Column 6"} - ], - "body": [ - [{"en": "Data 1"}, {"en": "Data 2"}, {"en": "Data 3"}, {"en": "Data 4"}, {"en": "Data 5"}, {"en": "Data 6"}], - [{"en": "Data 7"}, {"en": "Data 8"}, {"en": "Data 9"}, {"en": "Data 10"}, {"en": "Data 11"}, {"en": "Data 12"}] - ] - } - ] - } - } - ] - } - }, - - {"type": "spacer", "size": 2} - ], - - "tags": ["test"] -} diff --git a/content/items/trash/test2.json b/content/items/trash/test2.json deleted file mode 100644 index 7ba14b5..0000000 --- a/content/items/trash/test2.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "strings": { - "en": { - "title.meta": "Test content", - "title.og": "Test content", - "title.article": "Test content", - "heading.1": "t1", - "text.1": "p1", - "hello.world": "Hello World !" - }, - "fr": { - "title.meta": "Test content fr", - "title.og": "Test content fr", - "title.article": "Test content fr", - "heading.1": "t1 fr", - "text.1": "p1 fr", - "hello.world": "Bonjour le monde !" - } - }, - "metadata": { - "title": "title.meta", - "template": "article", - "opengraph": { - "title": "title.og", - "description": "", - "type": "", - "url": null, - "image": "", - "imageType": "" - }, - "article": { - "icon": "fad fa-terminal", - "title": "title.article", - "tags": ["joe", "mama"] - } - }, - "elements": [ - { - "type": "container", - "padding": 10, - "modifiers": ["no-bottom-padding", "no-top-margin"], - "parts": [ - { - "type": "paragraph", - "modifiers": ["no-top-margin"], - "content": "hello.world" - },{ - "type": "paragraph", - "modifiers": [], - "content": "Joe mama !", - "localize": false - } - ] - } - ] -} diff --git a/content/items/trash/youtube-auto-archiver.json b/content/items/trash/youtube-auto-archiver.json deleted file mode 100644 index 05e6c89..0000000 --- a/content/items/trash/youtube-auto-archiver.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "title": { - "icon": "fab fa-youtube", - "page": { - "en": "Youtube-Auto-Archiver", - "fr": "Youtube-Auto-Archiver" - }, - "card": { - "main": { - "en": "Youtube-Auto-Archiver", - "fr": "Youtube-Auto-Archiver" - } - } - }, - "meta": { - "title": { - "en": "Youtube-Auto-Archiver", - "fr": "Youtube-Auto-Archiver" - }, - "description": { - "en": "A simple and yet highly configurable Python application that automatically checks if a Youtuber is streaming, and downloads said streams while also archiving its latest uploads.", - "fr": "Conteneur et application Python hautement configurable qui permet d'automatiquement archiver et télécharger des livestreams et vidéos depuis YouTube." - } - }, - "tags": [ - "docker", "application", "web", "python" - ] -} diff --git a/index.php b/index.php index dcccbab..3a400e1 100644 --- a/index.php +++ b/index.php @@ -76,9 +76,9 @@ include_once 'langs.php';
-
+

- PB-ListComPort + DotNet-ListComPort @@ -86,9 +86,9 @@ include_once 'langs.php';

Cli tool that lists COM ports in different parsable formats.
-   GitHub +   GitHub -   ">Project's page +   ">Project's page


@@ -145,6 +145,26 @@ include_once 'langs.php';   ">Project's page

+
+ +
+

+ DotNet-Arguments + +   +   +   + + +

+

+ A simple and 'to-the-point' library to parse launch arguments in .NET and .NET Core applications.
+ +   GitHub + +   ">Project's page +

+
diff --git a/resources/Azias/imgs/back-03-01.png b/resources/Azias/imgs/back-03-01.png new file mode 100644 index 0000000..f048cc0 Binary files /dev/null and b/resources/Azias/imgs/back-03-01.png differ diff --git a/resources/Azias/imgs/lscom/lscom-dotnet.png b/resources/Azias/imgs/lscom/lscom-dotnet.png new file mode 100644 index 0000000..ccb9e82 Binary files /dev/null and b/resources/Azias/imgs/lscom/lscom-dotnet.png differ diff --git a/resources/Azias/scss/halfmoon/fixes.scss b/resources/Azias/scss/halfmoon/fixes.scss index 2e126bb..7a4d2fd 100644 --- a/resources/Azias/scss/halfmoon/fixes.scss +++ b/resources/Azias/scss/halfmoon/fixes.scss @@ -26,7 +26,7 @@ div.last-inner-collapse-border-fix { max-width: 100vw; } -// Removes tha wasted stace on Chrome ! +// Removes the wasted space on Chrome ! .overflow-x-scroll { overflow-x: auto !important; } diff --git a/resources/Azias/scss/halfmoon/page/home.scss b/resources/Azias/scss/halfmoon/page/home.scss index 802ef96..77ad0bd 100644 --- a/resources/Azias/scss/halfmoon/page/home.scss +++ b/resources/Azias/scss/halfmoon/page/home.scss @@ -18,4 +18,8 @@ background: linear-gradient(90deg, rgba(180,134,77,0.4) 0%, rgba(180,134,77,0.3) 1.5px, rgba(180,134,77,0.0) 7px); border-radius: 5px 0 0 5px; } + .l-lab-dotnet { + background: linear-gradient(90deg, rgba(81,43,212,0.4) 0%, rgba(81,43,212,0.3) 1.5px, rgba(81,43,212,0.0) 7px); + border-radius: 5px 0 0 5px; + } } diff --git a/sitemap.txt b/sitemap.txt index 27de50e..c9021a6 100644 --- a/sitemap.txt +++ b/sitemap.txt @@ -1,27 +1,33 @@ https://nibblepoker.lu/ https://nibblepoker.lu/content/ https://nibblepoker.lu/content/lscom-cli +https://nibblepoker.lu/content/lscom-cli-dotnet https://nibblepoker.lu/content/youtube-auto-archiver https://nibblepoker.lu/content/excel-worksheet-password-remover https://nibblepoker.lu/content/mc-expanded-iron-bundles +https://nibblepoker.lu/content/dotnet-arguments https://nibblepoker.lu/links/ https://nibblepoker.lu/contact/ https://nibblepoker.lu/privacy/ https://nibblepoker.lu/en/ https://nibblepoker.lu/en/content/ https://nibblepoker.lu/en/content/lscom-cli +https://nibblepoker.lu/en/content/lscom-cli-dotnet https://nibblepoker.lu/en/content/youtube-auto-archiver https://nibblepoker.lu/en/content/excel-worksheet-password-remover https://nibblepoker.lu/en/content/mc-expanded-iron-bundles +https://nibblepoker.lu/en/content/dotnet-arguments https://nibblepoker.lu/en/links/ https://nibblepoker.lu/en/contact/ https://nibblepoker.lu/en/privacy/ https://nibblepoker.lu/fr/ https://nibblepoker.lu/fr/content/ https://nibblepoker.lu/fr/content/lscom-cli +https://nibblepoker.lu/fr/content/lscom-cli-dotnet https://nibblepoker.lu/fr/content/youtube-auto-archiver https://nibblepoker.lu/fr/content/excel-worksheet-password-remover https://nibblepoker.lu/fr/content/mc-expanded-iron-bundles +https://nibblepoker.lu/fr/content/dotnet-arguments https://nibblepoker.lu/fr/links/ https://nibblepoker.lu/fr/contact/ https://nibblepoker.lu/fr/privacy/