Aller au contenu principal

Un menu bien fait avec NuxtUI

J’adore l’élément NavigationMenu de NuxtUI (avec NuxtIcon). Afin de customiser l’aspect comme ajouter du texte, y mettre un avatar ou un lien vers l’extérieur directement pour sa page Facebook, X ou son serveur Discord. L’astuce que je présente ici est plus que logique quand on y pense mais non présente dans la documentation (elle y est implicitement, vu qu’un développeur doit connaître autant le CSS, JavaScript et HTML).

Alors ce que je présente ici est tout con mais tellement badass que tout le monde pourra s’en féliciter. Il s’agit de changer la visibilité d’un élément de menu de la barre de navigation (NavigationMenu). Eh bien, comme on ne peut le mettre dans un composant, logique, il faut bien qu’il se génère, mettre du code custom ici autre que celui qui est autorisé vous mène droit à l’abattoir des développeurs, pareil si vous envisagez de le mettre dans l’app.vue. Oui je travaille un site actuellement en Vue avec NuxtUI, NuxtIcon et Pinia, en utilisant une base de données SQL.

Afin de rendre visible et invisible un élément, il vous faudra utiliser le CSS avec visibility: visible ou hidden sur la classe que vous aurait spécifié dans le menu. Sur toutes vos pages au début dans du code en TypeScript, vous appellerez une fonction qui rendra par défaut visible ou invisible vos menus ou sous menus.

Après un long sommeil…

Idée du jour, comment faire un RoundRectangle avec des coins différents. Donc cela se résume à comment créer un MultiRoundRectangle. Pour cela on a besoin d’effectuer sur un Rectangle normal et basique une série d’opérations booléennes avec des formes aux coins. Nous avons besoin de soustraire uniquement et de le faire avec deux opérations successives.

Pour la première opération, il est nécessaire de définir un cercle et un carré, le cercle n’étant pas inscrit dans le carré, les cotés du carré représente le rayon, la soustraction doit donner ce que l’on a besoin de soustraire au rectangle principal afin d’avoir des angles ronds.

Et pour la seconde opération, vous vous en doutez, il s’agit d’une soustraction afin de ne plus avoir de données de la première opération vu qu’elle viendra enlever de la matière sur le rectangle.

Voilà comment former un RoundRectangle custom ( code ici ).

Pourquoi avoir nommé le projet « Alexia » ? En référence à la première fille qui m’a collé un mot doux sur le sac au collège en 6e/5e, collège Labitrie à Tournefeuille. Pour l’instant, ce qui se nomme chez moi « Alexia Networks », n’en est qu’à la phase dessin de page. Pourquoi ne pas avoir choisi le HTML, bah pour être plus libre sur les protocoles de chiffrement et plus tard, plus tard, le Alexia Networks, ne sera ni le remplaçant du Web, ni un Dark web où tout le monde pense faire ce qu’il veut. Mais un réseau auto-géré par la communauté.

Quand Windows se tux

Bonjour,

En cette journée qui commence, un hier qui finit, j’avais envie d’arriver à faire marcher Linux sur Windows 11 sans savoir que mon Ubuntu installé de longue date l’était sur WSL1 et donc ne pouvait faire tourner des applications. A cela il faut ajouter de mettre à jour les drivers de sa carte graphique ou pour ceux qui ont un GPU intégré à la carte mère, ce dernier.

Le driver installé, WSL2 sélectionné avec une distribution Linux (oui il faut aussi installer WSL en version 2, mais je l’avais déjà pour Docker Desktop), la build Windows égale ou supérieur à 22000. C’est parti ! On est prêt à installer nos premiers logiciels pour Linux dans Windows qui marcheront dans mon cas avec GTK vu que je tourne sous Ubuntu pour mes versions Linux émulées. Puis l’interface, je la connais déjà. Cause, l’habitude de l’installer et la faire marcher en virtuel ou réel. Oh ! Ce n’est pas utile pour ce blogue mais plutôt pour administrer des solutions Linux en ligne ce que je fais des fois dans mon temps en marge de la société. Bien que je voudrais être utile pour la société et gagner de l’argent en récompense XD.

Commençons par installer, comme le site de Microsoft le dit, gedit ! Pas de ligne d’installation ici, si vous n’êtes pas familier à Linux aller chercher la commande sur le site de kr0$oft (ou Microsoft pour les puristes). Voilà ce que ça donne :

Cela marche très bien faut juste penser à aller dans /mnt pour voir ses autres disques et ouvrir tout ce que l’on veut. Plus héroïque, un logiciel que j’adore pour faire de la musique sous Ubuntu (que j’ai découvert avec la distribution Ubuntu Studio), le nommé Rosegarden :

Il s’est lancé, ce qui est déjà bien vu la quantité de librairies dont il a besoin. Le faire marcher, plus tard !

ByBye !

Docker + Django, enfin dompté !

Bonjour,

Ces deux derniers jours ont été fun en code. Mais malgré toutes les péripéties naturelles style orages et chaleurs, plus celles des rapports de bugs à challenger entre connaissances, altruismes ou solutions apportées par le web. Mais c’est enfin la compréhension finale du couple Django + Docker couplé avec Postgres, Nginx dans docker et sur dédié (dans docker on règle les flux, dans le dédié on règle le proxy) et notre ami PureFTPd. J’ai dû passer un mois entier à tester retester ou corriger mon image et Dieu sait que je dois encore la corriger à la suite de cette petite victoire sur l’informatique. Le code était pas sans fautes mais la version dev n’avait pas su les repérer, j’ai eu que des légers problèmes en prod mais, maintenant je sais au moins le pourquoi du comment.

Le site en question est mon site de musique ‘ZoneXXY’ ! Pourquoi ce nom-là ? Parce syndrome de Klinefelter dans mon corps. Et c’est ma zone de musique si on ne l’appelle pas site de musique.

La musique que je fais est diverse mais malgré les quelques dizaines de chansons écrites à mon adolescence, je me suis tourné vers de la musique techno, techno/trance et un peu ovni, je dois l’avouer. Toutes les musiques sont disponibles gratuitement, à vous d’être généreux si vous le voulez avec mon espace ‘Buy me a coffee’ autant de fois que vous le voudrez. A vous de partager cette musique sans DRM et de revenir de temps en temps pour les nouveautés. Pour les nouveautés et les notations, on verra plus tard, vous pouvez, m’adresser des messages sur ‘Buy me a coffee’ ou par e-mail ! Toutes les musiques sont et viendront s’agglutiner en étant protégées juridiquement par ‘Ma Preuve’.

Pourquoi un site gratuit alors qu’avec Tunecore je pouvais les propager sur toutes les plateformes moyennant finances ? La raison est simple, j’ai eu 2 téléchargements, j’ai reçu 2 centimes et j’ai payé une fortune. Pas rentable. Malgré la pub Facebook qui n’y est pour rien, elle, elle marche bien. Autant que ce soit gratuit j’aurais que la partie juridique à payer et tout le monde sera content. Même si je ne reçois rien en retour. Et que je deviens mendiant. Et je vous invite aussi à leur donner des pièces dans la rue. Ou de vous engager avec une asso. Perso, il m’arrive de soutenir les aveugles et les animaux.

Bon voilà le site : http://zly.ly-2940.eu/ . Enjoy, comme on dirait là-bas ! Vous pouvez lire sans pub et télécharger gratis en MP3 pour le moment, le modèle est prévu pour du MP3, AAC et FLAC, si vous voulez passer un morceau en soirée ou le remixer inutile de me le notifier mais citez vos sources.

Ce site est une page simple. J’ai préféré tester mon image Docker dessus car il était simple. Pour ly-software ça devrait aussi le faire ainsi que eien en refonte et arca en dev, ils sont tous en Django. Je testerai plus tard Angular en faisant des clones.

Coté dev Java, il y a un paquet de choses à faire.

Voilà !

Site ly-software (anciennement RedArchive)

Bonjour,

Il y a quelques années, sous le domaine « minna.red », j’avais une page pour les applications développées par moi-même, qui s’appelait RedArchive. Bien que ce nom voulait signifier les « documents de RedDog,csa » (alias The Wingate 2940 ou TW2), il se trouve qu’il n’est pas unique. Donc, vu que j’ai pas envie de me prendre le chou juridiquement avec quelqu’un qui aurait développé son business avec ce nom là (après moi) autant changé pour quelque chose qui pourra pas m’être reprocher dans le futur. S’il y a conflit, ly-software signifie plus mes initiales suivi de « -software ».

Le site créé est encore en travaux pour voir si je peux le docker-isé avec du Python. Le test avait l’air de marcher mais la trivialité vient du FTP. Image docker de pure-ftpd, pas vraiment bien configuré pour ce que je veux en faire. La connexion est refusé par FileZilla, l’un des logiciels que j’utilise pour les FTP mais le logiciel que je préfère utiliser. Donc pour le moment, le site est en pur HTML/CSS/JS.

Ce site est en anglais et le restera, du moins c’est l’idée principal afin que les non-francophones puissent le lire. Je fais beaucoup d’open source. J’ai pas le temps pour le traduire, je dois mettre en ligne au minimum 4 sites dont celui-là (ly-software, eien, arca et mon site de création de musique perso) et je dois aussi parfois mettre à jour la clé SSL d’un autre site que j’héberge sur mon serveur dédié. Certes, créer des maquettes de sites, coder les sites et les entretenir, cela prend pas vraiment beaucoup de temps, mais il faut que je me forme aux nouvelles technos et en même temps me divertir, faire avancer mes projets code open source et ne pas rester coller au PC tout le temps (en fait j’arrive pas à m’en passer). Donc je répartis mon temps pour vivre ma vie. Et me former autodidactement vu que les formations même financée par pôle emploi sont hyper-concurrentielles tout en continuant à en chercher car un élève ne remplace pas un professeur. Cela fait bien 20 ans déjà que je suis ce rythme autodidacte. Là j’en suis à voir angular et quand je l’aurais vu de fond en comble, je pourrais enfin finir de lire un eBook traitant du sujet en profondeur. Livre que j’ai acheté il y a un moment. Il faut aussi que je réapprenne les quelques matières écolières où je pèche.

Ce site accueillera les quelques projets que je voudrais bien mettre en highlight (en avant) et devrait, si j’en prends le temps, montrer quelques-uns des +200 épaves que j’ai codé sans les finir ou en tout cas montrer comment je code. Ne le seront jamais les programmes de p2p et de sécurité que j’ai mis au point, pour une raison évidente que je vous laisse trouver.

Donc voilà, http://www.ly-software.eu/ .

A plus !

PS : Pour m’autoformer, c’est régime openclassrooms, développez.com, quelques autres sites et YouTube (EN/FR) ! Et également des eBooks (EN/FR).

Docker, le retour

Bonjour,

Je suis un peu plus à l’aise avec Docker et docker-compose, j’ai réussi à mettre un site en ligne sur mon dédié de OneProvider. C’est pas totalement okay mais ça tourne. Bon, encore trois à quatre autres sites à coder pour mes intérêts personnels. Toujours en Django.

A plus !

Docker et mes codes…

Bonjour,

J’ai bien avancé depuis la dernière fois, je teste en local Nginx Proxy Manager et Portainer, ce qui m’évitera de ne voir que le noir de la console (bien qu’elle soit géniale).

La librairie de temps « Time » que je me trimballe en local à travers un bon nombre de projets Java (j’utilise maven maintenant) a été nommée TimeLibrary afin de pouvoir l’intégrer à chaque logiciel qui l’utilise rien qu’en touchant au POM et donc plus comme je le faisais avant en local en renommant le chemin interne. Moui vieille habitude qui date. Cette librairie est spécialement conçue pour le travail en millisecondes avec des fichiers ASS. Elle permet la compréhension par le programme du temps « h:mm:ss.cc » du ASS pour le convertir en millisecondes et inversement. Elle permet aussi les additions, soustractions (analyse plus grand et plus petit avant de soustraire), multiplications, divisions avec sécurité, plus grand que…

Yggdrasil n’a pas beaucoup avancé mais l’interface utilisateur est désormais fixe. Je travaille en parallèle sur d’autres projets connexes, je suis peut-être au chômage mais j’occupe parfois mes journées entières à coder et tester des choses. S’il n’y avait pas de PC sur Terre, je m’emmerderais sec.

Ciao !

PS : Mes pauses : Crunchyroll pour la plupart du temps, sinon Netflix et comparses.

Des nouvelles

Salutations,

Alors que les domaines « minna.red », « pr0jekt.eu » et « chairfraiche.eu » ont disparu ou vont disparaître, et d’autres domaines plus explicites vont apparaître, suffit que je bataille avec Docker, Postgres et Django, j’ai pas encore tout saisie. Je fais marcher des containers simples pour l’instant. Mais je m’en contente pas.

Mon serveur dédié Ubuntu 18.04 a Docker dans son ventre et depuis que Windows supporte WSL2 il m’est possible de jouer avec Docker sur 3 de mes PC perso : le principal (i7-7700k, 32GBRam, 30To), le portable (i7-4700HQ, 16GBRam, 2To SSD) et le Brix i3 (avec la 8e génération de processeur et 16GBRam, capacité 1To SSD), le seul tournant sous Linux.

A part ça sur mon GitHub, yggdrasil, destiné à supplanter Feuille, a encore besoin de beaucoup de mois de développement, surtout que l’UI n’est pas fixé, je me pose encore des questions sur la meilleure disposition, actuellement, il en existe 3, dans deux projets distinct.

Voilà, j’apprends Docker et Django par moi-même avec Internet et ses tutoriels et vidéos. En anglais à l’oral comme à l’écrit ou en ce bon vieux Français.

Bye !

Un air frais de plugins sous Java 14 avec Maven

Bonjour,

Il fut un temps lointain où sous Java 6, j’avais besoin de plugins et j’avais gardé cette méthode avec moi. Mais celle-ci n’est plus utilisable sous Java 14, la version Java sous laquelle je bosse en ce moment. J’ai donc besoin de migrer vers du plugin frais. J’ai vu une méthode sur développez.com qui me satisfaisait à moitié. J’utilise massivement maven pour les dépendances facilitées et les gros jar facile à faire. Or cette méthode (développez.com) n’est qu’une bouteille à moitié vide, preuve est qu’une méthode y est dépréciée (newInstance()) alors comment faire pour charger, bah c’est encore de la reflection, voici comment je m’y suis pris :



This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters


package org.wingate.demomodel;
public interface IDemoModel {
public String getName();
}
view raw

IDemoModel.java

hosted with ❤ by GitHub



This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters


<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0&quot; xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance&quot; xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"&gt;
<modelVersion>4.0.0</modelVersion>
<groupId>org.wingate</groupId>
<artifactId>DemoModel</artifactId>
<version>1.0</version>
<packaging>jar</packaging>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>14</maven.compiler.source>
<maven.compiler.target>14</maven.compiler.target>
</properties>
</project>



This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters


package org.wingate.demoapp;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.wingate.demomodel.IDemoModel;
public class Main {
public static void main(String[] args) {
List<IDemoModel> pluginsAB = new ArrayList<>();
// On crée une instance du gestionnaire
PluginsHandler ph = new PluginsHandler();
// On charge les fichiers par l'intermédiare d'un dossier
ph.load(new File("D:\\Dev\\Java\\NB-Demo\\Plugins"));
// On récupère les plugins de tous les sortes, dans ce dossier
Map<Object, String> map = ph.getPlugins();
// On cherche et on affiche les noms de plugin ayant pour modèle 'IDemoModel'
for(Map.Entry<Object, String> entry : map.entrySet()){
System.out.println("ENTRY : " + entry.getKey() + "; " + entry.getValue());
if(entry.getValue().contains(IDemoModel.class.getName())){
IDemoModel test = IDemoModel.class.cast(entry.getKey());
System.out.println("TEST (1) " + (test == null ? "fail" : "OK"));
System.out.println("TEST (2) " + (test == null ? "fail" : test.getName()));
pluginsAB.add(test);
System.out.println("NB TESTS : " + pluginsAB.size());
}
}
}
view raw

Main.java

hosted with ❤ by GitHub



This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters


package org.wingate.demoplugina;
import org.wingate.demomodel.IDemoModel;
public class PluginA implements IDemoModel {
public PluginA() {
}
@Override
public String getName() {
return "I am the plugin A!";
}
}
view raw

PluginA.java

hosted with ❤ by GitHub



This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters


<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0&quot; xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance&quot; xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"&gt;
<modelVersion>4.0.0</modelVersion>
<groupId>org.wingate</groupId>
<artifactId>DemoPluginA</artifactId>
<version>1.0</version>
<packaging>jar</packaging>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>14</maven.compiler.source>
<maven.compiler.target>14</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>org.wingate</groupId>
<artifactId>DemoModel</artifactId>
<version>1.0</version>
</dependency>
</dependencies>
</project>
view raw

PluginAPOM.xml

hosted with ❤ by GitHub



This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters


package org.wingate.demopluginb;
import org.wingate.demomodel.IDemoModel;
public class PluginB implements IDemoModel {
public PluginB() {
}
@Override
public String getName() {
return "I am the plugin B!";
}
}
view raw

PluginB.java

hosted with ❤ by GitHub



This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters


package org.wingate.demoapp;
import java.io.File;
import java.io.IOException;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;
import java.util.jar.JarFile;
import java.util.logging.Level;
import java.util.logging.Logger;
public class PluginsHandler {
private final Map<Object, String> plugins = new HashMap<>();
public PluginsHandler() {
}
/**
* Load one or more plugins
* @param file a file or a folder
*/
public void load(File file){
File[] files = file.isDirectory() == true ? file.listFiles() : new File[]{ file };
URLClassLoader loader; // Pour charger le .jar en mémoire
String tmp; // Pour la comparaison de chaines
Enumeration enumeration; // Pour le contenu de l'archive jar
Class tmpClass; // Pour déterminer quelles sont les interfaces implémentées
for(File f : files){
try{
URL u = f.toURI().toURL();
//On crée un nouveau URLClassLoader pour charger
// le jar qui se trouve en dehors du CLASSPATH
loader = new URLClassLoader(new URL[] {u});
// On charge le jar en mémoire
JarFile jar = new JarFile(f.getAbsolutePath());
// On récupère le contenu du jar
enumeration = jar.entries();
while(enumeration.hasMoreElements()){
tmp = enumeration.nextElement().toString();
// On vérifie que le fichier courant est un .class
// (et pas un fichier d'informations du jar )
if(tmp.length() > 6 && tmp.substring(tmp.length()-6).compareTo(".class") == 0) {
tmp = tmp.substring(0,tmp.length()-6);
tmp = tmp.replaceAll("/",".");
tmpClass = Class.forName(tmp ,true, loader);
for(int i = 0; i < tmpClass.getInterfaces().length; i++){
try{
Constructor ct = tmpClass.getDeclaredConstructor();
Object obj = ct.newInstance();
plugins.put(obj, tmpClass.getInterfaces()[i].toString());
}catch(NoSuchMethodException | SecurityException | InstantiationException |
IllegalAccessException | IllegalArgumentException | InvocationTargetException ex){
Logger.getLogger(PluginsHandler.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
}
}catch(IOException | ClassNotFoundException ex){
}
}
}
public Map<Object, String> getPlugins() {
return plugins;
}
}



This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters


<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0&quot; xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance&quot; xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"&gt;
<modelVersion>4.0.0</modelVersion>
<groupId>org.wingate</groupId>
<artifactId>DemoApp</artifactId>
<version>1.0</version>
<packaging>jar</packaging>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>14</maven.compiler.source>
<maven.compiler.target>14</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>org.wingate</groupId>
<artifactId>DemoModel</artifactId>
<version>1.0</version>
</dependency>
</dependencies>
</project>
view raw

POM.xml

hosted with ❤ by GitHub



This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters


<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0&quot; xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance&quot; xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"&gt;
<modelVersion>4.0.0</modelVersion>
<groupId>org.wingate</groupId>
<artifactId>DemoPluginB</artifactId>
<version>1.0</version>
<packaging>jar</packaging>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>14</maven.compiler.source>
<maven.compiler.target>14</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>org.wingate</groupId>
<artifactId>DemoModel</artifactId>
<version>1.0</version>
</dependency>
</dependencies>
</project>
view raw

PublicBPOM.xml

hosted with ❤ by GitHub

Voilà !

News in dev !

Hello,

I had recently added a new project called « fansubrev » (I like fansub very much). This tool is under development and is in Java 13 (mainline openjdk). You can view this tool at my GitHub space. For the moment, you can’t run it cause the program need for a class. By the way, you can run it in your favorite IDE in which you have to import a NetBeans project. I use Apache Netbeans 11.2. For this project you can help me!

I had tried recently to develop a program in C++ using GTK+ in procedural aspect, but previously I do the same for oriented object aspect. Feel free to see it at GitHub.

Greets!

  • Concevoir un site comme celui-ci avec WordPress.com
    Commencer