https://lea-linux.org/docs/index.php?title=Sp%C3%A9cial:Nouvelles_pages&feed=atom&hideredirs=1&limit=50&offset=&namespace=0&username=&tagfilter=&size-mode=max&size=0Lea Linux - Nouvelles pages [fr]2024-03-29T08:51:00ZDe Lea LinuxMediaWiki 1.40.1https://lea-linux.org/documentations/College_Tips_And_Technique_You_Ought_To_KnowCollege Tips And Technique You Ought To Know2024-03-11T23:51:36Z<p>CorinneChery85 : Page créée avec « Going away to college is amazing and frightening. When you enlighten yourself concerning university, your worry will certainly be decreased. The adhering to article below will help.<br><br>Carry a water container to college. Staying hydrated is crucial to your health which can be hard when you require to do all day long. This is specifically vital if your schedule is crammed with courses and aren't able to get a meal in. Consuming water throughout the day will ce... »</p>
<hr />
<div>Going away to college is amazing and frightening. When you enlighten yourself concerning university, your worry will certainly be decreased. The adhering to article below will help.<br><br>Carry a water container to college. Staying hydrated is crucial to your health which can be hard when you require to do all day long. This is specifically vital if your schedule is crammed with courses and aren't able to get a meal in. Consuming water throughout the day will certainly also keep your mind focused. You can replenish water from water fountains when required.<br><br>Don't hesitate with getting grant money and [http://www.rebelscon.com/profile.php?id=1072383 ABM College] scholarships prior to mosting likely to university. When you function as difficult on getting financing as you do your courses, there is a better opportunity you will obtain much more funds. Generate a good system that allows you handle your applications to make sure that you can submit them immediately.<br><br>Research ability programs can educate you valuable lessons in the direction of scholastic success.College training courses are different from high school. A research study skills course can aid you succeed in your university training courses.<br><br>Invest some time you can examining each day. The greater your dedication to examining, the much more rewarded you will be.Doing well in your courses will certainly ensure that you make more cash and have a much better career.<br><br>Find out about the available gives and scholarships that can help you fund your college prices. Numerous pupils don't understand that can aid make college a great deal simpler. You can obtain assist for a number of gives which you will certainly not have to be paid back.<br><br>When you are going to institution, it is easy to draw all-nighters for events and classes and research, however it will certainly reach you. If you do not get sufficient rest, you'll be cranky and neglect what you have actually discovered; not the method to appreciate college!<br><br>Access the very least among your general education needs performed in the beginning. If you need to take a class to finish which you are dreading, after that try getting it done early so you can be performed with it and massage certification course go on to your core classes. You definitely do not intend to discover yourself the kids when you're a senior!<br><br>You don't have anybody food preparation and cleaning.Create a timetable to prioritize classes, research study, [https://www.alsuprun.com leisure] and rest.You can obtain ill as a result of stress and inadequate nourishment.<br><br>Choose courses that fascinate you as opposed to selecting the easy ones. It is really satisfying to push on your own. You'll discover more from tougher courses and have a much better university experience.<br><br>Take quality notes while you remain in all your classes. Bearing in mind is an excellent way to keep information in your head. This likewise makes it less complicated to get the info before a test.<br><br>You can get experience in the area that you will certainly be doing after college. You can also get a deal of a work from the business you intern with! Your institution ought to have a department to help you secure a teaching fellowship, also.<br><br>Invest great deals of time in the campus library. College libraries have the resources needed to be successful in your courses. Take a look at the library's bulletin board system to discover bargains on text books or called for reading publications.<br><br>Stay clear of handing in the initial paper you write.You require to take the time to remodel your paper. This will certainly help you transform in the best paper with confidence.<br><br>If you have numerous majors in mind and are not sure which one to seek, take a couple of courses in various locations of research. You will certainly discover even more about each of those areas so you can get a feeling of them.<br><br>If you work full-time but desire to proceed your education and learning, you ought to consider going to school over the Internet. On-line colleges are ideal for non-traditional matriculants who need to study remotely or have strange routines. On the internet colleges give you finish the work any time of day or evening.<br><br>If you beloved this informative article as well as you would like to receive more details regarding [https://Www.abmcollege.com/courses/massage-therapy-diploma Abm College] i implore you to stop by our web page. It might take a bit to make good friends. Making friends can be as basic as transforming up early to course. You can aid various other pupils. This starts the ball rolling and develop relationships.<br><br>Most likely to other get-togethers throughout alignment to make sure that you can get to recognize people. A great deal of college pupils do not recognize any individual and can start to really feel lonesome. When you fulfill individuals very early on, you'll really feel wonderful.<br><br>Do not rely on notes from various other students. You might get half info or shortcut codes that might not make feeling to the initial note taker.<br><br>If you are solid and fluent particularly areas of research study, why not use your abilities to make cash? You can use your tutoring in the student typical locations or bulletin board system. You may likewise market online.<br><br>There are core classes beyond your location of rate of interest that every student have to absorb order to get a level.<br><br>Assume about whether you would love to participate in university right away after completing secondary school. Some young individuals desire to work. Just make certain you think whatever through before [https://clondikeppc.online/ choosing] one method or the other.<br><br>Do not stay up far too late appropriate prior to you have an examination the following day. Your prep work is essential and can directly affect the grades you obtain.<br><br>University student that burn the ones that need to take classes over once again and lose their money and time.<br><br>University universities are established for walking, cyclists and buses. Hesitate before you take your car.Cars are expensive to own and car park can get expensive. They additionally occupy time consuming in terms of treatment and repairs. To truly concentrate on your job, attempt taking advantage of university transportation.<br><br>This write-up gave you some terrific advice that will aid you avoid fear when it comes to institution. With the proper planning and details, your capacity to finish need to go without inquiry.<br><br><br>Find out concerning the offered grants and scholarships that can aid you fund your college expenses. Several trainees do not recognize that can aid make college a lot much easier. You'll find out much more from tougher classes and have a much better college experience.<br><br>You can get experience in the area that you will be doing after university. University collections have the sources necessary to be successful in your classes.</div>CorinneChery85https://lea-linux.org/documentations/CloudCloud2024-02-06T17:41:21Z<p>Jiel : </p>
<hr />
<div>{{En construction}}<br />
<br />
Le but de cet article est de présenter ce qu'est le cloud.<br />
<br />
Un cloud, ou en français, informatique en nuage, c'est simplement un système qui permet d'utiliser des serveurs ou des services sans devoir se soucier exactement où ils sont.<br />
<br />
Le cloud permet un accès plus facile aux ressources, encore meilleure qu'avec la virtualisation classique. Un utilisateur peut déployer un serveur ou un service en deux ou trois clics, à partir d'un ordinateur basique. Il permet aussi de nouvelles approches d'architecture, notamment en utilisant des microservices, les conteneurs et la possibilité d'allouer des ressources à la demande.<br />
<br />
= Types de services =<br />
<br />
En fonction de ce qui est à la charge de l'utilisateur du cloud ou de son fournisseur, on distingue plusieurs niveaux de services : Infrastructure en tant que Service (IaaS), Plateforme en tant que Service (PaaS) et Logiciel en tant que Service (SaaS). On peut aller dans le cloud mais vouloir s'occuper encore du système d'exploitation, ou au contraire juste vouloir s'occuper des logiciels, ou même vouloir ne rien s'occuper du tout.<br />
<br />
= Privé vs public =<br />
<br />
Le cloud peut être géré en interne, avec un cloud tournant sur ses propres serveurs, on appelle cela un cloud privé. L'exemple le plus célèbre est OpenStack.<br />
<br />
Le plus populaire est le cloud public, dont les principaux acteurs sont Amazon (AWS), Google (GCP) et Microsoft (Azure). <br />
<br />
Que choisir? Les deux sont différents.<br />
<br />
Si vous avez de forts besoins en confidentialité et vie privée et que vous ne voulez pas confier vos données à des géants américains, le cloud privé est plus adapté - les données sont hébergées chez vous.<br />
<br />
Si vous n'avez ni solides techniciens, ni de bons ingénieurs réseau/système, oubliez le cloud privé, qui demande de la maintenance, tant du côté serveurs que du côté du cloud. OpenStack en particulier n'est pas très simple à déployer. Si vous avez des experts, vous pouvez choisir les deux. Le cloud public demande également de solides compétences en architecture logicielle, réseau et système et le cloud offre de nouvelles manières de travailler. <br />
<br />
Le cloud privé n'est extensible qu'à la vitesse où vous pouvez installer de nouveaux serveurs. Si vous avez besoin d'une forte extensibilité, avec un nombre d'utilisateurs variable donc des montées de charge difficiles à prévoir, le cloud public est plus adapté. Si vos applications sont bien conçues, vous pouvez multiplier les services dans le cloud public avec pour seule limite la taille de votre compte bancaire. 1000 nouveaux serveurs dans 10 minutes? C'est possible. Avec le cloud public, vous pouvez aussi utiliser 100 serveurs pendant 5 minutes, et les décommissionner ensuite, en ne payant que pour ces 5 minutes.<br />
<br />
Quel est le moins cher entre cloud privé et cloud public? Ce n'est pas évident de répondre à cette question. Le cloud public coûte cher et vous payez souvent pour des choses qui seraient gratuites (VMs etc.) dans le cloud privé, mais vous ne payez que ce que vous utilisez. Le cloud privé nécessite lui de payer des coûts liés à l'hébergement des serveurs (électricité, sécurité, techniciens). D'autre part le cloud public permet de bénéficier des économies d'échelle, car votre fournisseur gère des centre de données énormes avec milliers de serveurs pour tous ses clients. La gestion des coûts est en tous cas le principaux défi du cloud public.<br />
<br />
Et pour la sécurité et la qualité de service? Là encore, cela dépend beaucoup. Les clouds publics sont gérés dans les règles de l'art, à la pointe par des équipes nombreuses et qualifiées. Il paraît difficile de faire mieux en interne, cependant, dans le cadre privé, vous contrôlez toute la chaîne.<br />
<br />
Si vraiment on hésite entre cloud privé et cloud public, on peut... prendre les deux. On parle alors de cloud hybride. C'est ce que font les entreprises qui commencent à migrer dans un cloud public, mais qui ont de vieilles applications qui ne sont pas facilement délocalisables. Certains utilise aussi un cloud hybride comme solution définitive, mais c'est toutefois assez rare.<br />
<br />
En revanche, il est plus courant dans les grandes entreprises d'utiliser plusieurs clouds publics, comme par exemple AWS et GCP.<br />
<br />
= Les risques =<br />
<br />
Vendor lock-in<br />
Perte de maîtrise (governance)<br />
Obligation d'être compatible avec le cloud<br />
Bugs/security/DDOS chez le cloud public<br />
UI compromise<br />
interception des données trabnsitant via internet<br />
isolation failure : les consommateurs partagent disques et ressources. injection sql chez un consommateur donnant accès uax ressources des autres<br />
Le fait que le fournisseur puisse être acheté ou fasse faillite<br />
<br />
= Composants =<br />
<br />
Les clouds proposent ce genre de possibilité:<br />
- VMs, serveurs virtuels, configurables à souhait (système d'exploitation, mémoire, processeur, disque)<br />
- Répartiteur de charge, pour définir l'accès à un group de VMs<br />
- Stockage de fichiers<br />
- Pare-feux<br />
- Bases de données<br />
- Gestion de conteneurs<br />
- Interface de programmation applicative (API)<br />
- Outils de supervision<br />
- Outils d'intégration continue<br />
<br />
2020,2024</div>Jielhttps://lea-linux.org/documentations/NTPNTP2024-02-06T17:32:32Z<p>Lea : Page créée avec « {{En construction}} = Synchronisation du temps avec NTP = Les horloges au quartz des ordinateurs dérivent : il n'est pas rare d'avoir plus d'une minute de retard au bout de quelques mois. Si ce n'est pas grave pour un poste bureautique, ca peut l'être nettement plus pour un serveur, par exemple pour les tâches de la crontab ou les transactions journalisées des bases de données. NTP est un protocole basé sur UDP qui utilise le port 123. Son utilisation re... »</p>
<hr />
<div>{{En construction}}<br />
<br />
= Synchronisation du temps avec NTP =<br />
<br />
Les horloges au quartz des ordinateurs dérivent : il n'est pas rare d'avoir plus d'une minute de retard au bout de quelques mois. Si ce n'est pas grave pour un poste bureautique, ca peut l'être nettement plus pour un serveur, par exemple pour les tâches de la crontab ou les transactions journalisées des bases de données.<br />
<br />
NTP est un protocole basé sur UDP qui utilise le port 123. Son utilisation repose sur une hiérarchie de clients/serveurs. Chaque client NTP peut être également un serveur et se synchronise avec d'autres serveurs dont chaque couche est appelé strate. La strate 0 comprend les horloges de référence (horloges atomatiques, récépteurs par satellites etc.). La strate 1 comprend des serveurs reliés à la strate 1 via une interface (port série). La strate 2 comprend des serveurs reliés à la strate 1 par le réseau. Enfin, la plupart des clients sont dans les strates 3 et 4.<br />
<br />
== Installation ==<br />
<br />
Il vous faut installer le paquet "ntp" (éventuellement "ntpdate") suivant la procédure habituelle propre à votre distribution.<br />
<br />
== Configurer NTP ==<br />
<br />
La première chose à faire est donc de trouver un serveur ou plusieurs serveurs NTP auxquels vous ferez confiance. Il est conseillé d'en prendre deux, indépendant l'un de l'autre, au cas où l'un d'entre eux serait inaccessible. Une liste de serveurs NTP sur lesquels on peut se synchroniser se trouve ici :<br />
* http://support.ntp.org/bin/view/Servers/WebHome ou * http://www.cru.fr/services/ntp/serveurs_francais<br />
* http://www.pool.ntp.org/zone/europe/<br />
<br />
Ensuite, il s'agit de configurer le fichier ntp.conf comme suit :<br />
<br />
server <serveur_distant1> prefer<br />
server <serveur_distant2><br />
driftfile /etc/ntp/drift<br />
restrict <machines_autorisées><br />
<br />
Chaque serveur de strate supérieur auxquels vous voulez vous connecter en tant que client NTP doit être listé dans ce fichier, en le préfixant par le mot clef "server" et en rajoutant "prefer" derrière le serveur préféré. Ne pas oublier de rajouter ces serveurs dans le fichier /etc/hosts de votre machine.<br />
<br />
L'option "driftfile" permet de définir le nom du fichier qui va stocker différentes informations pour votre serveur ntp (stockage de décalage de fréquence de l'horloge, historique des réponses des serveurs NTP etc.)<br />
<br />
L'option "restrict" permet de définir quelles machines sont autorisées à se synchroniser à votre machine. Cette ligne est intéressante seulement si vous voulez être un serveur de temps pour d'autres ordinateirs. Par exemple, pour autoriser les machines du réseau local 192.168.1.0 de masque de sous-réseau 255.255.255.0, il convient d'écrire <code>restrict 192.168.1.0 mask 255.255.255.0</code>. La ligne restrict sans argument signifie un accès libre au serveur.<br />
<br />
== Se synchroniser ==<br />
<br />
Pour se synchroniser manuellement, tapez simplement # ntpdate -B <serveur_distant1>.<br />
<br />
L'option –B à ntpdate qui permet un ajustement progressif de l’heure.<br />
<br />
Vous pouvez vérifier par quels serveurs est passé votre synchronisation avec la commande #ntptrace<br />
<br />
== Lancer le service ntpd ==<br />
<br />
Si vous voulez utiliser votre machine comme serveur NTP, lancez le service ntpd par /etc/init.d/ntpd start<br />
<br />
Pour que le serveur NTP soit lancé au démarrage, ajoutez la ligne ntpd_enable="YES" dans le fichier <br />
/etc/rc.d/rc.local<br />
<br />
Et ajoutez-le au runlevel default pour le faire se lancer à chaque démarrage : <br />
<br />
rc-update add ntpd default<br />
<br />
== Automatiser la synchronisation ==<br />
<br />
Pour que votre machine synchronise son horloge automatiquement avec un serveur NTP distant, rajoutez dans la synchronisation dans la crontab root :<br />
<br />
# NTP synchronisation de l’heure <br />
0 04 * * * /usr/sbin/ntpdate -B <serveur_distant1> <serveur2> > /dev/null 2>&1<br />
<br />
Positionnez le ntpdate à une heure où l'ordinateur ne fait pas grand chose, typiquement la nuit (4h du matin dans l'exemple ci-dessus). Pour la majorité des cas, une seule synchronisation par jour suffit : les ordinateurs dévient rarement plus d'une seconde par jour.<br />
<br />
== Pare-feu ==<br />
<br />
Si votre machine est un serveur de temps, dites à Netfilter d'ouvrir votre port 123 en UDP :<br />
<br />
iptables -t filter -A INPUT -p udp -m udp --sport 123 --dport 123 -j ACCEPT<br />
<br />
Pour pouvoir se connecter à des serveurs de temps distants, tapez la commande suivante : <br />
<br />
iptables -A INPUT -i eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT<br />
<br />
== Liens ==<br />
<br />
http://www.ntp.org <br />
<br />
Par Jiel, 2005</div>Leahttps://lea-linux.org/documentations/Cr%C3%A9er_un_petit_jeu_pour_AndroidCréer un petit jeu pour Android2024-01-28T15:34:40Z<p>Jiel : </p>
<hr />
<div>{{En construction}}<br />
<br />
Cet article part d'un principe qu'on a quelques notions de programmation, sans être un développeur aguerri. On veut faire un petit jeu pour s'amuser, quelque chose d'assez basique, en quelques heures.<br />
<br />
Pour créer un jeu, il y a pas mal de pré-requis non technique : avoir une bonne idée, connaître le marché, la monétisation, le type de graphisme etc. Ici, on ne va s'intéresser qu'à l'aspect technique.<br />
<br />
Pour développer un jeu sur Android, on peut utiliser Android Studio, l'environnement de développement intégré (IDE) officiel pour le développement d'applications Android. On peut aussi développer uniquement à partir des API graphiques OpenGL ES ou Vulkan avec Android Games Development Kit (AGDK) pour développer un jeu en C ou C++. Ces deux méthodes sont pour les développeurs aguerris.<br />
<br />
La grande majorité des développeurs de jeux utilisent un moteur de jeu (en anglais, ''game engine''). Un moteur de jeu est un logiciel qui prend en charge pas mal d'aspects de jeux, comme le graphisme, l'audio, la prise en charge des périphériques etc. Nous pouvons donc nous concentrer sur le contenu du jeu. Un moteur supporte un ou plusieurs langage de programmation.<br />
<br />
Les moteurs du jeu les plus populaires sont Unity (qui supporte C#) et Unreal (qui supporte C++). Cependant, aucun de ces deux moteurs ne sont libres, donc il n'est pas possible de faire un jeu vraiment libre en utilisant ces moteurs, car on ne pourra pas redistribuer les fichiers liés à ces moteurs. On se basera donc plutôt sur des moteurs de jeux libres, comme Godot (qui supporte GDScript, C# et C++) ou Defold (qui supporte Lua).<br />
<br />
Ici, on va choisir Godot et le C++. <br />
<br />
Installons Godot selon la méthode de sa distribution. Par exemple sous Ubuntu ou Debian :<br />
<br />
sudo apt-get install godot<br />
<br />
Sous Fedora :<br />
<br />
sudo dnf install godot<br />
<br />
Installons ensuite un certain nombre de bibliothèques nécessaires:<br />
<br />
sudo apt-get install libc6:i386 libncurses5:i386 libstdc++6:i386 lib32z1 libbz2-1.0:i386<br />
<br />
ou<br />
<br />
sudo dnf install zlib.i686 ncurses-libs.i686 bzip2-libs.i686<br />
<br />
<br />
On va maintenant télécharger le SDK Android Studio sur https://developer.android.com/studio.</div>Jielhttps://lea-linux.org/documentations/Le_langage_CLe langage C2024-01-01T14:56:59Z<p>Jiel : /* Conclusion */</p>
<hr />
<div>Le langage C a la réputation d'être compliqué, pourtant, c'est plutôt faux. Nous allons voir comment apprendre ses bases en seulement 10 minutes! Il ne s'agit pas de tout savoir, mais de découvrir le langage par l'exemple. Ensuite, c'est la pratique qui vous fera progresser! À vos marques, prêts, partez!<br />
<br />
== Petit programme ==<br />
<br />
Commençons par regarder ce petit programme :<br />
<br />
<syntaxhighlight lang="C"><br />
#include <stdio.h> <br />
<br />
int main(void)<br />
{<br />
printf("Bonjour tout le monde !\n");<br />
return 0;<br />
}<br />
</syntaxhighlight><br />
<br />
D'abord on inclut la bibliothèque ''stdio.h'', responsable des entrées et des sorties standards. Cela nous permet d'utiliser la fonction ''printf'', qui permet d'ajouter du texte dans le terminal. <br />
<br />
Ensuite on définit la fonction appelée au démarrage du programme, ''main''. Cette fonction renvoit un entier (''int'') et ne prend rien en paramètre (''void''). Son code est contenu dans des accolades.<br />
<br />
Puis on appelle la fonction ''printf'', qui va afficher la chaîne « Bonjour tout le monde ! » suivie d'un retour à la ligne (''\n'').<br />
<br />
Enfin, on renvoit ''0'', code qui indique à Linux que tout s'est terminé normalement (''return 0;'')<br />
<br />
Pour exécuter ce programme, on va le compiler:<br />
<br />
<syntaxhighlight lang="bash">gcc bonjour.c</syntaxhighlight><br />
<br />
La compilation donne un fichier exécutable appelé ''a.out''<br />
<br />
On le la,ce avec :<br />
<br />
<syntaxhighlight lang="bash"><br />
$ ./a.out<br />
<br />
Bonjour tout le monde !<br />
</syntaxhighlight><br />
<br />
== Commentaires ==<br />
<br />
Les commentaires sont inclus entre /* et */, dans ce cas ils peuvent s'étaler sur plusieurs lignes :<br />
<br />
<syntaxhighlight lang="C"><br />
/* <br />
un commentaire <br />
deux commentaires<br />
*/<br />
</syntaxhighlight><br />
<br />
Ou alors on précède chaque ligne de deux slashs // :<br />
<br />
<syntaxhighlight lang="C"><br />
// un commentaire<br />
// deux commentaires<br />
</syntaxhighlight><br />
<br />
== Variables et pointeurs ==<br />
<br />
Les variables sont identifiées par leur nom et leur type. Elles peuvent être soit globales, si elles sont disponibles pour tout le programme, soit locales, si elles sont à l'intérieur d'une fonction ou d'une partie de fonction. Elles sont initialisées grâce au symbole ''='' :<br />
<br />
<syntaxhighlight lang="C"><br />
#include <stdio.h><br />
#include <stdlib.h><br />
<br />
double vitesse ; /* 'vitesse' est une variable globale de type réel */<br />
<br />
int main(int argc, char *argv[])<br />
{<br />
int bicyclettes = 4; /* 'bicyclettes' est une variable de type entier locale à la fonction 'main', elle vaut 4 */<br />
printf("Vous avez %d vélos\n", bicyclettes);<br />
return 0;<br />
}<br />
</syntaxhighlight><br />
<syntaxhighlight lang="text"><br />
Vous avez 4 vélos<br />
</syntaxhighlight><br />
<br />
Il existe différents types de variables, voici quelques exemples : ''int'' pour les nombres entiers courts, ''long'' pour les longs nombres entiers, ''float'' et ''double'' pour les nombres décimaux, ''char'' pour une lettre.<br />
<br />
Dans le printf, on a un % suivi d'une lettre, qui permet de dire quoi afficher. %d représente ''int'', %ld représente ''long'', %f ''float'' ou ''double''.<br />
<br />
Les pointeurs en C sont des variables spéciales qui contiennent l'adresse mémoire d'une autre variable. Ils sont utilisés pour manipuler et accéder directement à cette variable en utilisant cette adresse.<br />
<br />
Ainsi, ''bicyclettes'' correspond à la valeur de la variable et ''&bicyclettes'' correspond à l'adresse de cette même variable.<br />
<br />
Pour créer une variable de type pointeur, on rajoute le symbole * devant son nom :<br />
<br />
<syntaxhighlight lang="C">int *bicyclettes = &bicyclettes;</syntaxhighlight><br />
<br />
Les pointeurs semblent un peu archaïques et compliqués au début, mais on s'habitude vite.<br />
<br />
On peut récupérer une variable avec scanf :<br />
<br />
<syntaxhighlight lang="C"><br />
int main(int argc, char *argv[])<br />
{<br />
int bicyclettes = 0; // On initialise la variable à 0<br />
<br />
printf("Combien de vélos sont dans votre garage ? ");<br />
scanf("%d", &bicyclettes); // On demande d'entrer l'âge avec scanf<br />
printf("Vous avez %d vélos dans votre garage.\n", bicyclettes);<br />
<br />
return 0;<br />
}<br />
</syntaxhighlight><br />
<syntaxhighlight lang="text"><br />
Combien de vélos sont dans votre garage ? 6<br />
Vous avez 6 vélos dans votre garage.<br />
</syntaxhighlight><br />
<br />
== Tableaux ==<br />
<br />
Les tableaux s'initialisent comme suit:<br />
<br />
<syntaxhighlight lang="C"><br />
int tableau[3];<br />
<br />
tableau[0] = 1983;<br />
tableau[1] = 1989;<br />
tableau[2] = 1995;<br />
</syntaxhighlight><br />
<br />
Attention, les index des tableaux commencent à 0 et leur nom sans crochet est un pointeur sur l'adresse de la première case du tableau :<br />
<br />
<syntaxhighlight lang="C">printf("%d", tableau);</syntaxhighlight><br />
<syntaxhighlight lang="text">1400</syntaxhighlight><br />
<br />
Si on demande la variable qui se trouve à cette adresse, on obtient la première valeur du tableau, on fera :<br />
<br />
<syntaxhighlight lang="C">printf("%d", *tableau);</syntaxhighlight><br />
<syntaxhighlight lang="text">1983</syntaxhighlight><br />
<br />
Ce qui correspond à :<br />
<br />
<syntaxhighlight lang="C">printf("%d", tableau[0]);</syntaxhighlight><br />
<syntaxhighlight lang="text">1983</syntaxhighlight><br />
<br />
Pour avoir la 2e variable, on fera :<br />
<br />
<syntaxhighlight lang="C">printf("%d", tableau[1]);</syntaxhighlight><br />
<syntaxhighlight lang="text">1989</syntaxhighlight><br />
<br />
Le C a aussi les listes chaînées, les tables de hachage et les piles et les files.<br />
<br />
== Chaînes de caractères ==<br />
<br />
Une chaîne de caractères est un tableau de type char. Elle se termine toujours par un \0, le caractère de fin de chaîne.<br />
<br />
<syntaxhighlight lang="C">char chaine[8] = "manchot"; // manchot fait 7 lettres + le caractère \0</syntaxhighlight><br />
<br />
Il existe quelques fonctions prédéfinies dans la bibliothèque pour les chaînes string.h, par exemple :<br />
<br />
<syntaxhighlight lang="C"><br />
#include <stdio.h><br />
#include <string.h><br />
<br />
int main() {<br />
char chaine1[20] = "Bonjour";<br />
char chaine2[20] = "Léa";<br />
char resultat[40];<br />
<br />
// strlen: longueur d'une chaîne<br />
printf("Longueur de chaine1 : %d\n", strlen(chaine1));<br />
printf("Longueur de chaine2 : %d\n", strlen(chaine2));<br />
<br />
// strcat: concacténation de deux chaînes<br />
strcat(chaine1, chaine2);<br />
printf("Chaîne concacténée : %s\n", chaine1);<br />
<br />
// strcpy: copie une chaîne dans une autre<br />
strcpy(resultat, chaine1);<br />
printf("Chaîne copiée : %s\n", resultat);<br />
<br />
// strcmp: comparer deux chaînes<br />
int comparison = strcmp(chaine1, chaine2);<br />
if (comparison == 0) {<br />
printf("Les chaînes sont égales.\n");<br />
} else if (comparison < 0) {<br />
printf("chaine1 est plus petite que chaine2.\n");<br />
} else {<br />
printf("chaine1 est plus grande que chaine2.\n");<br />
}<br />
<br />
// strstr: trouver une sous sous-chaîne dans une chaîne<br />
char *substring = strstr(chaine1, "Léa");<br />
if (substring != NULL) {<br />
printf("Sous-chaîne trouvée : %s\n", substring);<br />
} else {<br />
printf("Sous-chaîne non trouvée.\n");<br />
}<br />
<br />
// sprintf: formater une chaîne<br />
int num = 42;<br />
sprintf(resultat, "La réponse est %d.", num);<br />
printf("%s\n", resultat);<br />
<br />
return 0;<br />
}<br />
</syntaxhighlight><br />
<syntaxhighlight lang="text"><br />
Longueur de chaine1 : 7<br />
Longueur de chaine2 : 4<br />
Chaîne concacténée : BonjourLéa<br />
Chaîne copiée : BonjourLéa<br />
chaine1 est plus petite que chaine2.<br />
Sous-chaîne trouvée : Léa<br />
La réponse est 42.<br />
</syntaxhighlight><br />
<br />
On utilise ''\n'' pour aller à la ligne. Un autre caractère courant dans les chaînes est ''\t'' pour la tabulation.<br />
<br />
== Opérations sur les nombres ==<br />
<br />
Les opérations sur les nombres sont assez simples :<br />
<br />
<syntaxhighlight lang="C"><br />
#include <stdio.h><br />
<br />
int main() {<br />
float nombre1, nombre2;<br />
float somme, difference, produit, quotient;<br />
<br />
// Saisie de deux nombres réels<br />
printf("Entrez le premier nombre réel: ");<br />
scanf("%f", &nombre1);<br />
printf("Entrez le deuxième nombre réel: ");<br />
scanf("%f", &nombre2);<br />
<br />
// Calculs de la somme, la différence, le produit<br />
somme = nombre1 + nombre2;<br />
difference = nombre1 - nombre2;<br />
produit = nombre1 * nombre2;<br />
<br />
// Résultats<br />
printf("Le résultat de l'addition est: %f\n", somme);<br />
printf("Le résultat de la soustraction est: %f\n", difference);<br />
printf("Le résultat de la multiplication est: %f\n", produit);<br />
<br />
// Vérifions que le 2e nombre n'est pas égal à 0 avant de diviser<br />
if (nombre2 != 0.0f) {<br />
quotient = nombre1 / nombre2;<br />
printf("Le résultat de la division est: %f\n", quotient);<br />
} else {<br />
printf("Erreur: Division par zéro\n");<br />
}<br />
<br />
return 0;<br />
}<br />
</syntaxhighlight><br />
<syntaxhighlight lang="text"><br />
Entrez le premier nombre réel: 5<br />
Entrez le deuxième nombre réel: 2<br />
Le résultat de l'addition est: 7.000000<br />
Le résultat de la soustraction est: 3.000000<br />
Le résultat de la multiplication est: 10.000000<br />
Le résultat de la division est: 2.500000<br />
</syntaxhighlight><br />
<br />
Il y a aussi des raccourcis. Ainsi :<br />
<br />
<syntaxhighlight lang="C"><br />
int main() {<br />
int a = 5, b = 3;<br />
<br />
//a++ correspond à a = a+1<br />
printf("Addition avec assignement: %d\n", a++);<br />
<br />
//a-- correspond à a = a-1<br />
printf("Soustraction avec assignement: %d\n", a--);<br />
<br />
//a *= b correspond à a = a*b<br />
a *= b;<br />
printf("Multiplication avec assignement: %d\n", a);<br />
<br />
return 0;<br />
}<br />
</syntaxhighlight><br />
<syntaxhighlight lang="text"><br />
Addition avec assignement: 5<br />
Soustraction avec assignement: 6<br />
Multiplication avec assignement: 15<br />
</syntaxhighlight><br />
<br />
== Structures de contrôle ==<br />
<br />
Voici un exemple avec les structures conditionnelles if, else if et else:<br />
<br />
<syntaxhighlight lang="C"><br />
if (strcmp(taille, "85a") == 0)<br />
{<br />
printf("Tout ce qui est petit est joli !");<br />
}<br />
else if (strcmp(taille, "90b") == 0)<br />
{<br />
printf("Tout ce qui est moyen est bien !");<br />
}<br />
else if (strcmp(taille, "95c") == 0)<br />
{<br />
printf("Quand c'est gros c'est beau !");<br />
}<br />
else<br />
{<br />
printf("Chaque taille a son charme");<br />
}<br />
</syntaxhighlight><br />
<br />
Veuillez noter que switch ne supporte pas les chaînes de caractères, donc il faut utiliser if à la place pour les chaînes. Un exemple similaire avec switch, avec seulement un caractère :<br />
<br />
<syntaxhighlight lang="C"><br />
switch (taille)<br />
{<br />
case 'a':<br />
printf("Tout ce qui est petit est joli !");<br />
break;<br />
case 'b':<br />
printf("Tout ce qui est moyen est bien !");<br />
break;<br />
case 'c':<br />
printf("Quand c'est gros c'est beau !");<br />
break;<br />
default:<br />
printf("Chaque taille a son charme");<br />
break;<br />
}<br />
</syntaxhighlight><br />
<br />
On peut aussi définir les conditions avec ? et : :<br />
<br />
<syntaxhighlight lang="C">jours = (bissextile) ? 366 : 365;</syntaxhighlight><br />
<br />
Ce qui est équivalent à :<br />
<br />
<syntaxhighlight lang="C"><br />
if (bissextile)<br />
jours = 366;<br />
else<br />
jours = 365;<br />
</syntaxhighlight><br />
<br />
Une boucle en programmation est une structure qui permet de répéter un bloc de code plusieurs fois, en fonction d'une condition. Elle permet d'exécuter des instructions de manière itérative jusqu'à ce que la condition spécifiée soit satisfaite.<br />
<br />
La boucle "while" exécute un bloc de code tant que la condition spécifiée est vraie. <br />
<br />
<syntaxhighlight lang="C"><br />
int nombre = 0;<br />
<br />
while (nombre < 5)<br />
{<br />
printf("La valeur est %d\n", nombres);<br />
nombres++;<br />
}<br />
</syntaxhighlight><br />
<br />
La boucle "for" parcourt un ensemble de valeurs et exécute quelque chose pour chaque valeur.<br />
<br />
<syntaxhighlight lang="C"><br />
int compteur;<br />
<br />
for (nombre = 0 ; nombre < 5 ; nombre++)<br />
{<br />
printf("La valeur est %d\n", nombre);<br />
}<br />
</syntaxhighlight><br />
<br />
== Fonctions ==<br />
<br />
Normalement, on ne met pas tout dans le ''main'' mais on décompose son code en fonctions. Voici un exemple qui calcule la factorielle d'un nombre :<br />
<br />
<syntaxhighlight lang="C"><br />
#include <stdio.h><br />
<br />
int factorielle(int n) {<br />
if (n == 0 || n == 1) {<br />
return 1;<br />
} else {<br />
return n * factorielle(n - 1);<br />
}<br />
}<br />
<br />
int main() {<br />
int num;<br />
<br />
printf("Entrez un nombre: ");<br />
scanf("%d", &num);<br />
<br />
int result = factorielle(num);<br />
<br />
printf("Factorielle de %d est %d\n", num, result);<br />
<br />
return 0;<br />
}<br />
</syntaxhighlight><br />
<syntaxhighlight lang="bash"><br />
Entrez un nombre: 8<br />
Factorielle de 8 est 40320<br />
</syntaxhighlight><br />
<br />
== Manipulation des fichiers ==<br />
<br />
fopen ouvre des fichiers, fclose les ferme, fgets les lit, fputs et fprintf écrivent des chaînes de caractère dedans.<br />
Ces fonctions prennent comme paramètre quelle permission est autorisée sur les fichiers : "r" (lecture), "w" (écriture); "r+" (lecture et écriture), "w+" (lecture et écriture, avec suppression du contenu précédemment).<br />
<br />
<syntaxhighlight lang="C"><br />
#include <stdio.h><br />
#include <stdlib.h><br />
<br />
int main() {<br />
FILE *fichier;<br />
char entree[100];<br />
<br />
// Ouvrir le fichier pour l'écriture<br />
fichier = fopen("lea.txt", "w");<br />
<br />
if (fichier == NULL) {<br />
printf("Erreur lors de l'ouverture du fichier\n");<br />
return 1;<br />
}<br />
<br />
// Écrire du texte dans le fichier en utilisant fputs<br />
fputs("Bonjour, Léa!\n", fichier);<br />
<br />
// Écrire du texte formaté dans le fichier en utilisant fprintf<br />
fprintf(fichier, "Linux date de : %d\n", 1991);<br />
<br />
// Fermer le fichier<br />
fclose(fichier);<br />
<br />
// Réouvrir le fichier pour la lecture<br />
fichier = fopen("lea.txt", "r");<br />
<br />
if (fichier == NULL) {<br />
printf("Erreur lors de l'ouverture du fichier\n");<br />
return 1;<br />
}<br />
<br />
// Lire une ligne du fichier en utilisant fgets<br />
fgets(entree, sizeof(entree), fichier);<br />
printf("Entrée: %s", entree);<br />
<br />
// Fermer le fichier<br />
fclose(fichier);<br />
<br />
return 0;<br />
}<br />
</syntaxhighlight><br />
<syntaxhighlight lang="text"><br />
Entrée: Bonjour, Léa!<br />
<br />
$ cat lea.txt <br />
Bonjour, Léa!<br />
Linux date de : 1991<br />
</syntaxhighlight><br />
<br />
== Mémoire ==<br />
<br />
Une variable peut prendre plus ou moins d'espace en mémoire, notamment en fonction de son type. On peut réserver de la mémoire avec malloc() pour une variable et la libérer avec free(). <br />
<br />
<syntaxhighlight lang="C"><br />
#include <stdio.h><br />
#include <stdlib.h><br />
<br />
int main() {<br />
int *ptr;<br />
int n;<br />
<br />
printf("Entrez le nombre d'entiers à allouer en mémoire : ");<br />
scanf("%d", &n);<br />
<br />
// Allocation de la mémoire pour n entiers à l'aide de malloc<br />
ptr = (int*) malloc(n * sizeof(int));<br />
if (ptr == NULL) {<br />
printf("Erreur d'allocation de mémoire\n");<br />
exit(1);<br />
}<br />
<br />
// Affectation de valeurs à la mémoire allouée<br />
for (int i = 0; i < n; i++) {<br />
ptr[i] = i * i;<br />
}<br />
<br />
// Affichage du contenu de la mémoire allouée<br />
printf("Contenu de la mémoire allouée :\n");<br />
for (int i = 0; i < n; i++) {<br />
printf("%d ", ptr[i]);<br />
}<br />
printf("\n");<br />
<br />
// Libération de la mémoire allouée à l'aide de free<br />
free(ptr);<br />
<br />
return 0;<br />
}<br />
</syntaxhighlight><br />
<syntaxhighlight lang="text"><br />
Entrez le nombre d'entiers à allouer en mémoire : 4<br />
Contenu de la mémoire allouée :<br />
0 1 4 9 <br />
</syntaxhighlight><br />
<br />
== Conclusion ==<br />
<br />
Vous avez maintenant les bases du langages. Vous serez capables de lire et d'écrire de petits programmes en C. Pour progresser, rien de meilleur que la pratique. Pour aller plus loin avec le C, nous vous conseillons le livre de référence ''The C Programming Language'' (''Le langage C Norme ANSI'') par Brian Kernighan et Dennis Ritchie.<br />
<br />
{{Développement}}<br />
<br />
{{Copy|2024|[[Utilisateur:Jiel|Jiel Beaumadier]]|FDL}}</div>Jielhttps://lea-linux.org/documentations/FastChatFastChat2024-01-01T08:17:27Z<p>Jiel : </p>
<hr />
<div>[https://github.com/lm-sys/FastChat FastChat] est un logiciel libre (licence Apache 2.0) pour entraîner, mettre à disposition et évaluer des robots conversationnels. C'est une alternative libre à [[ChatGPT]]. L'avantage du libre, c'est que l'on peut utiliser un grand nombre de modèles différents. Ainsi, FastChat supporte par exemple LLama 2, Vicuna, Alpaca, GPT4ALL, Baize, xDAN-AI, ChatGLM, Dolly, Falcon, FastChat-T5, Guanaco, MTP, OpenAssistant, OpenChat, RedPajama, StableLM, WizardLM. Et il est même possible d'ajouter son propre modèle!<br />
<br />
== Pré-requis ==<br />
<br />
Un ordinateur avec au moins 15G d'espace libre, car les modèles les plus petits font rapidement cette taille. Par défaut, FastChat les stockent dans le répertoire .cache de votre répertoire personnel. Idéalement, un processeur graphique (GPU) qui va être utilisé par FastChat en complément du processeur, mais ce n'est pas obligatoire.<br />
<br />
== Installation ==<br />
<br />
Installation directe avec pip:<br />
<br />
<syntaxhighlight lang="bash"><br />
$ pip3 install "fschat[model_worker,webui]"<br />
Defaulting to user installation because normal site-packages is not writeable<br />
Collecting fschat[model_worker,webui]<br />
Downloading fschat-0.2.34-py3-none-any.whl (220 kB)<br />
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 220.1/220.1 kB 1.8 MB/s eta 0:00:00<br />
Requirement already satisfied: aiohttp in /home/jiel/.local/lib/python3.11/site-packages (from fschat[model_worker,webui]) (3.9.1)<br />
Requirement already satisfied: fastapi in /home/jiel/.local/lib/python3.11/site-packages (from fschat[model_worker,webui]) (0.108.0)<br />
Requirement already satisfied: httpx in /home/jiel/.local/lib/python3.11/site-packages (from fschat[model_worker,webui]) (0.26.0)<br />
Collecting markdown2[all]<br />
Downloading markdown2-2.4.12-py2.py3-none-any.whl (41 kB)<br />
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 41.2/41.2 kB 4.5 MB/s eta 0:00:00<br />
<br />
Running setup.py install for wavedrom ... done<br />
Attempting uninstall: gradio-client<br />
Found existing installation: gradio_client 0.8.0<br />
Uninstalling gradio_client-0.8.0:<br />
Successfully uninstalled gradio_client-0.8.0<br />
Attempting uninstall: gradio<br />
Found existing installation: gradio 4.12.0<br />
Uninstalling gradio-4.12.0:<br />
Successfully uninstalled gradio-4.12.0<br />
Successfully installed fschat-0.2.34 gradio-3.50.2 gradio-client-0.6.1 markdown2-2.4.12 nh3-0.2.15 protobuf-4.25.1 pydantic-1.10.13 shortuuid-1.0.11 svgwrite-1.4.3 tiktoken-0.5.2 wavedrom-2.0.3.post3<br />
</syntaxhighlight><br />
<br />
Alternativement, on peut cloner le dépôt et on installe avec pip:<br />
<br />
<syntaxhighlight lang="bash"><br />
$ git clone https://github.com/lm-sys/FastChat.git<br />
$ cd FastChat<br />
$ pip3 install --upgrade pip # enable PEP 660 support<br />
$ pip3 install -e ".[model_worker,webui]"<br />
</syntaxhighlight><br />
<br />
== Lancer FastChat ==<br />
<br />
Lançons FastChat avec le modèle libre FastChat-T5 (license Apache 2.0). La commande va d'abord télécharger le modèle et puis lancer l'interface de discussion :<br />
<br />
<syntaxhighlight lang="bash"><br />
$ python3 -m fastchat.serve.cli --model-path lmsys/fastchat-t5-3b-v1.0<br />
<br />
tokenizer_config.json: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 2.40k/2.40k [00:00<00:00, 16.4MB/s]<br />
spiece.model: 100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 792k/792k [00:00<00:00, 4.39MB/s]<br />
added_tokens.json: 100%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 150/150 [00:00<00:00, 550kB/s]<br />
special_tokens_map.json: 100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 2.20k/2.20k [00:00<00:00, 12.9MB/s]<br />
You are using the default legacy behaviour of the <class 'transformers.models.t5.tokenization_t5.T5Tokenizer'>. This is expected, and simply means that the `legacy` (previous) behavior will be used so nothing changes for you. If you want to use the new behaviour, set `legacy=False`. This should only be set if you understand what it means, and thouroughly read the reason why this was added as explained in https://github.com/huggingface/transformers/pull/24565<br />
Special tokens have been added in the vocabulary, make sure the associated word embeddings are fine-tuned or trained.<br />
Special tokens have been added in the vocabulary, make sure the associated word embeddings are fine-tuned or trained.<br />
config.json: 100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 1.52k/1.52k [00:00<00:00, 6.09MB/s]<br />
generation_config.json: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 142/142 [00:00<00:00, 684kB/s]<br />
.gitattributes: 100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 1.48k/1.48k [00:00<00:00, 11.2MB/s]<br />
README.md: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 1.98k/1.98k [00:00<00:00, 16.0MB/s]<br />
pytorch_model.bin.index.json: 100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 50.8k/50.8k [00:00<00:00, 385kB/s]<br />
pytorch_model.bin: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 6.71G/6.71G [22:57<00:00, 4.87MB/s]<br />
Fetching 10 files: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [22:57<00:00, 137.77s/it]<br />
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 1/1 [00:37<00:00, 37.81s/it]<br />
Human: <br />
</syntaxhighlight><br />
<br />
Cela peut prendre plusieurs minutes pour que le chat soit prêt, car il doit d'abord télécharger le modèle. Même si la commande finit en erreur, si le modèle a été téléchargé, vous n'aurez plus à le télécharger la prochaine fois si vous relancez la commande.<br />
<br />
Si vous avez une erreur de type: "PermissionError: [Errno 13] Permission denied: '/home/jiel/.cache/huggingface/hub/models--lmsys--vicuna-7b-v1.5'"<br />
<br />
Ajustez les droits sur le cache puis relancez la commande précédente:<br />
<br />
<syntaxhighlight lang="bash"><br />
$ sudo chown -R $USER:$USER /home/$USER/.cache/huggingface/<br />
$ python3 -m fastchat.serve.cli --model-path lmsys/fastchat-t5-3b-v1.0<br />
</syntaxhighlight><br />
<br />
Si vous n'avez pas de processeur graphique (GPU) ou que vous avez une erreur du type "RuntimeError: Found no NVIDIA driver on your system. Please check that you have an NVIDIA GPU and installed a driver from http://www.nvidia.com/Download/index.aspx", ou une erreur de mémoire, il existe une solution.<br />
<br />
Alors ajoutez deux options à la fin de la commande. Cela indique à FastChat de n'utiliser que le processeur (CPU) mais pas le processeur graphique (GPU). Cependant, dans ce cas cela demande plusieurs dizaines de gigaoctets de mémoire. Si vous n'avez pas assez de mémoire, vous pouvez activer la compresssion 8 bits. Cela va réduire l'utilisation de la mémoire mais dégrader un peu la qualité du modèle. Vous verrez, le chat sera lent, mais fonctionnera très bien quand même!<br />
<br />
<syntaxhighlight lang="bash"><br />
$ python3 -m fastchat.serve.cli --model-path lmsys/fastchat-t5-3b-v1.0 --device cpu --load-8bit<br />
<br />
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 2/2 [00:44<00:00, 22.42s/it]<br />
Human: <br />
</syntaxhighlight><br />
<br />
Vous pouvez commencer à discuter.<br />
<br />
<syntaxhighlight lang="text"><br />
Human: Aimes-tu Linux?<br />
Assistant: Yes, I am familiar with Linux and its many applications. How may I assist you?<br />
Human: Partez-vous français?<br />
Assistant: Oui, je parle français. Comment puis-je vous aider?<br />
</syntaxhighlight><br />
<br />
== Autres modèles ==<br />
<br />
On peut lancer FastChat pour le modèle Vicuna (non libre, Llama 2 Community License Agreement) :<br />
<br />
<syntaxhighlight lang="bash"><br />
$ python3 -m fastchat.serve.cli --model-path lmsys/vicuna-7b-v1.5<br />
<br />
tokenizer_config.json: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 749/749 [00:00<00:00, 3.34MB/s]<br />
tokenizer.model: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 500k/500k [00:00<00:00, 1.98MB/s]<br />
special_tokens_map.json: 100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 438/438 [00:00<00:00, 1.88MB/s]<br />
config.json: 100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 615/615 [00:00<00:00, 2.24MB/s]<br />
pytorch_model.bin.index.json: 100%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 26.8k/26.8k [00:00<00:00, 10.2MB/s]<br />
Downloading shards: 0%| <br />
pytorch_model-00001-of-00002.bin: 100%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 9.98G/9.98G [09:17<00:00, 5.48MB/s]<br />
pytorch_model-00001-of-00002.bin: 69%|█████████████████████████████████████████████████████████████████████████████████████████████████ | 6.92G/9.98G [58:47<35:10, 1.45MB/s]<br />
pytorch_model-00001-of-00002.bin: 18%|████████████████████████▉ | 1.81G/9.98G [1:05:18<4:53:51, 463kB/s]<br />
pytorch_model-00002-of-00002.bin: 100%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 3.50G/3.50G [10:40<00:00, 5.46MB/s]<br />
Downloading shards: 100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 2/2 [1:15:59<00:00, 2279.83s/it]<br />
Loading checkpoint shards: 100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 2/2 [00:15<00:00, 7.54s/it]<br />
generation_config.json: 100%|██████<br />
USER: <br />
</syntaxhighlight><br />
<br />
{{Logiciels}}<br />
<br />
{{Copy|2024|[[Utilisateur:Jiel|Jiel Beaumadier]]|FDL}}</div>Jielhttps://lea-linux.org/documentations/Alpaca-LoRAAlpaca-LoRA2023-12-30T15:55:39Z<p>Jiel : </p>
<hr />
<div>{{En construction}}<br />
<br />
Clonez le dépôt git :<br />
<br />
<syntaxhighlight lang="bash"><br />
$ git clone https://github.com/tloen/alpaca-lora.git<br />
<br />
Clonage dans 'alpaca-lora'...<br />
remote: Enumerating objects: 607, done.<br />
remote: Total 607 (delta 0), reused 0 (delta 0), pack-reused 607<br />
Réception d'objets: 100% (607/607), 27.84 Mio | 3.65 Mio/s, fait.<br />
Résolution des deltas: 100% (358/358), fait.<br />
</syntaxhighlight><br />
<br />
Allez dans le répertoire du dépôt :<br />
<br />
<syntaxhighlight lang="bash"><br />
$ cd ./alpaca-lora/<br />
</syntaxhighlight><br />
<br />
Installez les dépendances python avec pip (cette étape peut prendre plusieurs minutes) :<br />
<br />
<syntaxhighlight lang="bash"><br />
$ pip install -r requirements.txt<br />
<br />
docker logs --tail 50 --follow --timestamps 20637ec29080<br />
Defaulting to user installation because normal site-packages is not writeable<br />
Collecting git+https://github.com/huggingface/peft.git (from -r requirements.txt (line 9))<br />
Cloning https://github.com/huggingface/peft.git to /tmp/pip-req-build-9hr4dfxr<br />
Running command git clone --filter=blob:none --quiet https://github.com/huggingface/peft.git /tmp/pip-req-build-9hr4dfxr<br />
Resolved https://github.com/huggingface/peft.git to commit cf04d0353f0343cbf66627228c4495f51669af34<br />
Installing build dependencies ... done<br />
Getting requirements to build wheel ... done<br />
Preparing metadata (pyproject.toml) ... done<br />
Collecting accelerate<br />
Downloading accelerate-0.25.0-py3-none-any.whl (265 kB)<br />
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 265.7/265.7 kB 2.5 MB/s eta 0:00:00<br />
Collecting appdirs<br />
Downloading appdirs-1.4.4-py2.py3-none-any.whl (9.6 kB)<br />
Collecting loralib<br />
<br />
(...)<br />
<br />
Successfully installed accelerate-0.25.0 aiofiles-23.2.1 aiohttp-3.9.1 aiosignal-1.3.1 altair-5.2.0 annotated-types-0.6.0 anyio-4.2.0 appdirs-1.4.4 asttokens-2.4.1 attrs-23.1.0 bitsandbytes-0.41.3.post2 black-23.12.1 colorama-0.4.6 contourpy-1.2.0 cycler-0.12.1 datasets-2.16.0 dill-0.3.7 executing-2.0.1 fastapi-0.108.0 ffmpy-0.3.1 filelock-3.13.1 fire-0.5.0 fonttools-4.47.0 frozenlist-1.4.1 fsspec-2023.10.0 gradio-4.12.0 gradio-client-0.8.0 h11-0.14.0 httpcore-1.0.2 httpx-0.26.0 huggingface-hub-0.20.1 importlib-resources-6.1.1 ipython-8.19.0 jedi-0.19.1 jinja2-3.1.2 jsonschema-4.20.0 jsonschema-specifications-2023.12.1 kiwisolver-1.4.5 loralib-0.1.2 markupsafe-2.1.3 matplotlib-3.8.2 matplotlib-inline-0.1.6 mpmath-1.3.0 multidict-6.0.4 multiprocess-0.70.15 mypy-extensions-1.0.0 networkx-3.2.1 numpy-1.26.2 nvidia-cublas-cu12-12.1.3.1 nvidia-cuda-cupti-cu12-12.1.105 nvidia-cuda-nvrtc-cu12-12.1.105 nvidia-cuda-runtime-cu12-12.1.105 nvidia-cudnn-cu12-8.9.2.26 nvidia-cufft-cu12-11.0.2.54 nvidia-curand-cu12-10.3.2.106 nvidia-cusolver-cu12-11.4.5.107 nvidia-cusparse-cu12-12.1.0.106 nvidia-nccl-cu12-2.18.1 nvidia-nvjitlink-cu12-12.3.101 nvidia-nvtx-cu12-12.1.105 orjson-3.9.10 pandas-2.1.4 parso-0.8.3 pathspec-0.12.1 peft-0.7.2.dev0 platformdirs-4.1.0 prompt-toolkit-3.0.43 psutil-5.9.7 pure-eval-0.2.2 pyarrow-14.0.2 pyarrow-hotfix-0.6 pydantic-2.5.3 pydantic-core-2.14.6 pydub-0.25.1 pyparsing-3.1.1 python-multipart-0.0.6 referencing-0.32.0 rpds-py-0.16.2 safetensors-0.4.1 semantic-version-2.10.0 sentencepiece-0.1.99 shellingham-1.5.4 sniffio-1.3.0 stack-data-0.6.3 starlette-0.32.0.post1 sympy-1.12 termcolor-2.4.0 tokenize-rt-5.2.0 tokenizers-0.15.0 tomlkit-0.12.0 toolz-0.12.0 torch-2.1.2 tqdm-4.66.1 traitlets-5.14.0 transformers-4.36.2 triton-2.1.0 tzdata-2023.4 uvicorn-0.25.0 wcwidth-0.2.12 xxhash-3.4.1 yarl-1.9.4<br />
</syntaxhighlight><br />
<br />
S'il n'est pas encore installé, installez [[docker]].<br />
Par exemple sous Fedora:<br />
<br />
<syntaxhighlight lang="bash"><br />
sudo dnf -y install dnf-plugins-core<br />
sudo dnf config-manager --add-repo https://download.docker.com/linux/fedora/docker-ce.repo<br />
sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin<br />
</syntaxhighlight><br />
<br />
Ou sous Ubuntu<br />
<br />
Commencez par ajouter la clef GPG officielle de docker:<br />
<br />
<syntaxhighlight lang="bash"><br />
sudo apt-get update<br />
sudo apt-get install ca-certificates curl gnupg<br />
sudo install -m 0755 -d /etc/apt/keyrings<br />
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg<br />
sudo chmod a+r /etc/apt/keyrings/docker.gpg<br />
</syntaxhighlight><br />
<br />
Puis ajouter le dépôt à Apt sources:<br />
<syntaxhighlight lang="bash"><br />
echo \<br />
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \<br />
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \<br />
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null<br />
sudo apt-get update<br />
</syntaxhighlight><br />
<br />
Enfin installez docker:<br />
<syntaxhighlight lang="bash"><br />
$ sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin<br />
</syntaxhighlight><br />
<br />
Démarrez docker:<br />
<syntaxhighlight lang="bash"><br />
$ systemctl start docker<br />
</syntaxhighlight><br />
<br />
Construisez le conteneur pour Alpaca-LoRA (cette étape peut prendre plusieurs minutes):<br />
<syntaxhighlight lang="bash"><br />
$ sudo docker build -t alpaca-lora .<br />
[+] Building 542.5s (4/10) docker:default<br />
=> [internal] load .dockerignore 0.0s<br />
=> => transferring context: 141B 0.0s<br />
=> [internal] load build definition from Dockerfile 0.0s<br />
=> => transferring dockerfile: 733B 0.0s<br />
=> [internal] load metadata for docker.io/nvidia/cuda:11.8.0-devel-ubuntu22.04 2.1s<br />
=> [internal] load build context 0.5s<br />
=> => transferring context: 118.27MB 0.4s<br />
=> [1/6] FROM docker.io/nvidia/cuda:11.8.0-devel-ubuntu22.04@sha256:94fd755736cb58979173d491504f0b573247b1745250249415b07fefc738e41f<br />
</syntaxhighlight><br />
<br />
(...)<br />
<br />
[+] Building 1.1s (11/11) FINISHED docker:default<br />
=> [internal] load .dockerignore 0.0s<br />
=> => transferring context: 141B 0.0s<br />
=> [internal] load build definition from Dockerfile 0.0s<br />
=> => transferring dockerfile: 733B 0.0s<br />
=> [internal] load metadata for docker.io/nvidia/cuda:11.8.0-devel-ubuntu22.04 1.0s<br />
=> [1/6] FROM docker.io/nvidia/cuda:11.8.0-devel-ubuntu22.04@sha256:94fd755736cb58979173d491504f0b573247b1745250249415b07fefc738e41f 0.0s<br />
=> [internal] load build context 0.0s<br />
=> => transferring context: 7.33kB 0.0s<br />
=> CACHED [2/6] RUN apt-get update && apt-get install -y git curl software-properties-common && add-apt-repository ppa:deadsnakes/ppa && apt install -y python3.10 && rm -rf /var/lib/apt/lis 0.0s<br />
=> CACHED [3/6] WORKDIR /workspace 0.0s<br />
=> CACHED [4/6] COPY requirements.txt requirements.txt 0.0s<br />
=> CACHED [5/6] RUN curl -sS https://bootstrap.pypa.io/get-pip.py | python3.10 && python3.10 -m pip install -r requirements.txt && python3.10 -m pip install numpy --pre torch --force-reinstall --index-url 0.0s<br />
=> CACHED [6/6] COPY . . 0.0s<br />
=> exporting to image 0.0s<br />
=> => exporting layers 0.0s<br />
=> => writing image sha256:867aeac24d83cc145aa7c002aec3758026703bbeec79081f3f6b88b63257654b 0.0s<br />
=> => naming to docker.io/library/alpaca-lora <br />
</syntaxhighlight><br />
<br />
Si la commande finit en erreur, et que vous ne comprenez pas l'erreur, relancez-la. Si c'est une des commandes à l'intérieur de la commande qui plante, essayez de la lancer indépendamment, puis de relancer la commande originale.<br />
<br />
On choisit un modèle parmi ceux disponibles sur https://huggingface.co/models. Ici on va choisir le modèle vigogne, pour le français. Un binaire contenant plusieurs gigaoctets va être téléchargés.<br />
<br />
$ sudo docker run --shm-size 64g -p 7860:7860 -v ${HOME}/.cache:/root/.cache --rm alpaca-lora generate.py --load_8bit --base_model 'bofenghuang/vigostral-7b-chat' --lora_weights 'bofenghuang/vigostral-7b-chat'<br />
<br />
docker run --shm-size 64g -p 7861:7861 -v ${HOME}/.cache:/root/.cache --rm alpaca-lora generate.py --load_8bit --base_model 'baffo32/decapoda-research-llama-7B-hf' --lora_weights 'tloen/alpaca-lora-7b'</div>Jielhttps://lea-linux.org/documentations/L%C3%A9annuaire_S%C3%A9curit%C3%A9_et_vie_priv%C3%A9eLéannuaire Sécurité et vie privée2023-12-30T14:21:51Z<p>Lea : Page créée avec « ==Léannuaire - Sécurité et vie privée== ===Navigation dans l'annuaire=== * Retour à l'index ===Liste des sites=== ====Exodus Privacy==== Exodus vous aide à savoir quels sont les pisteurs et permissions embarqués dans les applications installées sur votre smartphone. * {{flag-en}} https://exodus-privacy.eu.org Catégorie:Léannuaire »</p>
<hr />
<div>==Léannuaire - Sécurité et vie privée==<br />
<br />
===Navigation dans l'annuaire===<br />
* [[Annuaire:Index|Retour à l'index]]<br />
<br />
===Liste des sites===<br />
<br />
====Exodus Privacy====<br />
Exodus vous aide à savoir quels sont les pisteurs et permissions embarqués dans les applications installées sur votre smartphone.<br />
* {{flag-en}} https://exodus-privacy.eu.org<br />
<br />
[[Catégorie:Léannuaire]]</div>Leahttps://lea-linux.org/documentations/Logith%C3%A8que_AndroidLogithèque Android2023-12-30T09:32:28Z<p>Lea : /* Liste des logiciels [Android] */</p>
<hr />
<div>== Logithèque - Android ==<br />
<br />
Logiciels intéressants et parfois méconnus pour [[Android]].<br />
<br />
=== Navigation dans la logithèque ===<br />
<br />
* [[Logithèque:Index|Retour à l'index]]<br />
<br />
===Liste des logiciels [Android]===<br />
<br />
==== Exodus ====<br />
Exodus vous aide à savoir quels sont les pisteurs et permissions embarqués dans les applications installées sur votre smartphone.<br />
<br />
* https://exodus-privacy.eu.org<br />
<br />
Licence : GPL v3.<br />
<br />
==== Fairemail ====<br />
<br />
Client de messagerie pour les courriels/emails, supportant plusieurs comptes de réception, le stockage hors connexion, la synchronisation bidirectionnelle. C'est un logiciel libre, qui existe en version gratuite ou payante (offrant plus de fonctionnalités).<br />
<br />
* https://email.faircode.eu<br />
<br />
Licence : GPL v3.<br />
<br />
==== Firefox ====<br />
<br />
Navigateur web plus respectueux des standards et de la vie privée que ses concurrents. Disponible pour Linux, Firefox fonctionne aussi sous Android.<br />
<br />
* https://signal.org<br />
<br />
Licence : MPL 2.0.<br />
<br />
==== Organic Maps ====<br />
<br />
Organic Maps est une application Android de cartes hors ligne pour les voyageurs, les touristes, les randonneurs et les cyclistes, basée sur des données provenant de'OpenStreetMap.<br />
<br />
* https://organicmaps.app<br />
<br />
Licence : Apache License v2.0<br />
<br />
==== Signal ====<br />
<br />
Application de messagerie instantanée, supportant appels vocaux et vidéo, messages texte ou médias. Alternative à WhatsApp, Signal permet de communiquer de façon chiffrée et sécurisée. Géré par une fondation, Signal essaye d'assure un maximum de confidentialité et de respect de la vie privée.<br />
<br />
* https://signal.org<br />
<br />
Licence : AGPL-3.0.<br />
<br />
==== VLC ====<br />
<br />
Application de lecture vidéo et audio. Disponible pour Linux, VLC fonctionne aussi sous Android.<br />
<br />
* https://www.videolan.org<br />
<br />
Licence : GPL v2.<br />
<br />
<br />
[[Catégorie:Logithèque]]<br />
[[Catégorie:Android]]</div>Leahttps://lea-linux.org/documentations/EID_BelgiqueEID Belgique2023-12-16T14:40:29Z<p>Lea : </p>
<hr />
<div>L’eID est la carte d’identité électronique belge. Elle permet de s'identifier, de s'authentifier et de signer électroniquement. Elle est utilisée notamment sur les sites de l'administration belge.<br />
<br />
Elle fonctionne sous Linux, avec un lecteur de carte, après l'installation de quelques logiciels. Des instructions sont sur <br />
https://eid.belgium.be/fr/installation-du-logiciel-eid-sous-linux, voici dessous quelques détails supplémentaires.<br />
<br />
== Installez les paquets ==<br />
<br />
D'abord, vous devez télécharger le middleware eid-archive sur votre appareil en allant à la page https://eid.belgium.be/fr/installation-du-logiciel-eid-sous-linux.<br />
<br />
Allez dans le répertoire où vous avez téléchargé '''eid-archive''' et installez le en cliquant dessus ou avec la ligne de commande.<br />
<br />
Par exemple pour Fedora, RHEL:<br />
<syntaxhighlight lang="bash">sudo dnf install ./eid-archive*.rpm</syntaxhighlight><br />
<br />
Pour Ubuntu et Debian:<br />
<syntaxhighlight lang="bash">sudo apt-get install ./eid-archive*.deb</syntaxhighlight><br />
<br />
Ensuite, installez les paquets '''eid-viewer''' et/ou '''eid-mw''' de la manière normale pour votre distribution.<br />
<br />
Par exemple pour Fedora:<br />
<syntaxhighlight lang="bash">sudo dnf install eid-viewer</syntaxhighlight><br />
<br />
Ou sous Ubuntu et Debian:<br />
<syntaxhighlight lang="bash">sudo apt-get install eid-mw eid-viewer</syntaxhighlight><br />
<br />
== Installez l'add-on pour le navigateur ==<br />
<br />
Finalement, vous devez installer l’add-on 'eID Belgique' officielle dans Firefox ou Chromium.<br />
<br />
Dans Firefox, allez dans Outils > Extension et thèmes pou tapez ''about:addons'' dans la barre d'URL. Cherchez 'eID Belgique'.<br />
<br />
[[Image:EID addon 1.jpg|400px]]<br />
<br />
Cliquez « Ajouter à Firefox ».<br />
<br />
[[Image:EID addon 2.jpg]]<br />
<br />
Cliquez « Ajouter ».<br />
<br />
[[Image:EID addon 3.jpg]]<br />
<br />
== Connectez-vous ==<br />
<br />
Le lecteur de carte doit être connecté avant le démarrage du navigateur. C'est un lecteur de carte basique, en vente un peu partout.<br />
<br />
Sur un site qui fonctionne avec l'eID, connectez-vous. Une requête va vous identifier, cliquez sur « Ok ».<br />
<br />
[[Image:EID certificat.jpg]]<br />
<br />
Vous pouvez maintenant vous connecter avec vos codes PUK et PIN.<br />
<br />
[[Image:EID PIN.jpg]]<br />
<br />
<br/><br />
<br/><br />
'''<b>[[Sécurité et vie privée|@ Retour à la rubrique Sécurité et vie privée]]</b>'''<br />
<br/><br />
<br />
{{Copy|2023|[[Utilisateur:Jiel|Jiel Beaumadier]]|FDL}}<br />
<br />
[[Catégorie:Sécurité et vie privée]]</div>Jielhttps://lea-linux.org/documentations/Recette_de_cr%C3%AApes_facileRecette de crêpes facile2023-12-15T17:11:21Z<p>Jiel : Page créée avec « Demat les Bretons, et les autres! Ici, une recette de crêpes facile et rapide. Quel rapport avec les logiciels libres? Aucun. Mais vous pouvez essayer de faire des crêpes en forme de manchot! = Ingrédients = Cette recette est pour 3 personnes: * 250g de farine * 50g de margarine ou de beurre * 4 oeufs * Un demi-litre de lait * Une pincée de sel * 2 cuillerée à soupe de sucre = Pâte à crêpes = Mettez la farine, le sucre et le sel dans un saladier. Fa... »</p>
<hr />
<div>Demat les Bretons, et les autres! Ici, une recette de crêpes facile et rapide. Quel rapport avec les logiciels libres? Aucun. Mais vous pouvez essayer de faire des crêpes en forme de manchot!<br />
<br />
= Ingrédients =<br />
<br />
Cette recette est pour 3 personnes:<br />
<br />
* 250g de farine<br />
* 50g de margarine ou de beurre<br />
* 4 oeufs<br />
* Un demi-litre de lait<br />
* Une pincée de sel<br />
* 2 cuillerée à soupe de sucre<br />
<br />
= Pâte à crêpes =<br />
<br />
Mettez la farine, le sucre et le sel dans un saladier.<br />
Faites un puit au milieu et ajoutez les œufs (sans la coquille).<br />
Mélangez jusqu'à ce que le mélange devienne épais, puis ajoutez le lait froid progressivement jusqu'à obtenir une pâte assez molle.<br />
Faites fondre la margarine ou le beurre, et ajoutez là dans le saladier, mélangez.<br />
<br />
= Cuisson des crêpes =<br />
<br />
Mettez un peu d'huile dans une poêle et laissez la devenir chaude.<br />
Avec une louche, versez un peu de pâte dans la poêle en faisant un mouvement circulaire pour bien répartir la pâte.<br />
Quand la crêpe commence à être un peu orangée (après 30 secondes), retournez là et laissez la cuire de l'autre côté.<br />
Bon appétit ! Kalon digor !<br />
<br />
[[Catégorie:Détente]]</div>Jielhttps://lea-linux.org/documentations/Installer_ChatGPT_sous_LinuxInstaller ChatGPT sous Linux2023-12-15T13:13:18Z<p>Lea : /* Obtenir une clef API pour ChatGPT */</p>
<hr />
<div>= ChatGPT =<br />
<br />
ChatGPT (Chat Generative Pre-trained Transformer, c'est à dire transformeur pré-entrainé de chat génératif) est un robot logiciel conversationnel qui utilise l'intelligence artificielle pour dialoguer. En particulier, ChatGPT répond à des questions, se souvient des questions précédentes, complète des phrases, fait des traductions, des syntèses, voire écrit des articles.<br />
<br />
Au niveau technique, pour les curieux sur l'intelligence artificielle: ChatGPT utilise un modèle de langage, entraîné par apprentissage supervisé et apprentissage par renforcement. Son fonctionnement est volontairement bridé et ChatGPT reste vague sur des sujets tabous décidés par ses concepteurs.<br />
<br />
L'accès à ChatGPT est gratuit, mais ce n'est pas un logiciel libre et son utilisation requiert de se créer un compte sur le site web de son éditeur. Veuillez noter que l'historique des chats peut être revu ou utilisé pour améliorer les services de ChatGPT. Ne postez pas d'information sensible ou privée sur le chat. D'autre part, ChatGPT peut se tromper, ne suivez pas ses conseils aveuglement. Ce n'est ni un ami, ni un psychiatre.<br />
<br />
Enfin, veuillez noter qu'il existe des alternatives libres à ChatGPT et son modèle GPT, tels que par exemple Alpaca-LoRA, LLaMa, Hugging Face Transformers.<br />
<br />
= Créer un compte ChatGPT =<br />
<br />
Notez que pour protéger votre vie privée, vous pouvez choisir de ne pas donner votre vrai nom, votre vrai âge et utiliser une adresse de courriel à usage unique.<br />
<br />
Allez sur https://openai.com et cliquez sur "Sign Up" pour vous créer un compte.<br />
<br />
[[Image:ChatGPT_signup.jpg]]<br />
<br />
Entrez un email pour vous créer un compte et cliquez sur "Signu up" de nouveau, ensuite on vous demandera aussi un mot de passe.<br />
<br />
[[Image:ChatGPT_creation_compte.jpg]]<br />
<br />
Allez dans votre boîte de messagerie et vérifiez le courriel que vous a envoyé ChatGPT. Cliquez sur le lien pour confirmer votre adresse de messagerie.<br />
<br />
Ensuite ChatGPT vous demandera votre nom complet et votre âge.<br />
<br />
Vous arrivez maintenant dans une fenêtre de chat. Vous pouvez d'ores et déjà utiliser ChatGPT dans votre navigateur.<br />
<br />
[[Image:ChatGPT_chat.jpg|600px]]<br />
<br />
Il existe d'autre logiciels comme [https://github.com/Bavarder Bavarder] qui fournissent une interface graphique pour ChatGPT. Dans la suite, nous allons voir comment utiliser ChatGPT en ligne de commande.<br />
<br />
= Obtenir une clef API pour ChatGPT =<br />
<br />
Une API (Interface de Programmation Applicative, en anglais, Application Programming Interface) est un ensemble de règles et de protocoles qui permet à différents logiciels de communiquer entre eux, ici le client avec le moteur ChatGPT. Une clef API est un ensemble de caractères alphanumériques qui servent comme jeton d'authentification.<br />
<br />
Les APIs peuvent prendre différentes formes, notamment les APIs Web, qui sont couramment utilisées. Une API Web permet à des applications de communiquer via le protocole HTTP (Hypertext Transfer Protocol) pour échanger des données. Les données sont souvent échangées au format JSON (JavaScript Object Notation) ou XML (eXtensible Markup Language).<br />
<br />
Retournez sur https://openai.com et cliquez sur 'Log In'. Ensuite, cliquez sur API. Vous arriverez sur la page https://platform.openai.com/docs/overview<br />
<br />
[[Image:ChatGPT_api_keys_telephone.jpg]]<br />
<br />
Sur la droite, cliquez sur la première icône et choisissez "API keys". Cliquez sur le bouton "Start verification". Avant de créer votre clef API, l'éditeur de ChatGPT veut savoir votre téléphone : c'est très invasif. Là aussi, vous pouvez utiliser un numéro de téléphone temporaire.<br />
<br />
Ensuite, créez une nouvelle clef API en cliquant sur 'Create new secret key'. ChatGPT va vous affichez des caractères. Copiez les et conservez les précieusement, pour des raisons de sécurité, c'est la seule fois que vous la verrez.<br />
<br />
[[Image:ChatGPT_creation_clef_API.jpg]]<br />
<br />
= Shell GPT =<br />
<br />
Installez pip. Par exemple sous Fedora:<br />
<br />
<syntaxhighlight lang="bash"><br />
$ sudo dnf install python3-pip<br />
</syntaxhighlight><br />
<br />
Puis installez shell-gpt:<br />
<br />
<syntaxhighlight lang="bash"><br />
$ pip3 install shell-gpt<br />
<br />
Defaulting to user installation because normal site-packages is not writeable<br />
Collecting shell-gpt<br />
Downloading shell_gpt-0.9.4-py3-none-any.whl (23 kB)<br />
Requirement already satisfied: click<9.0.0,>=7.1.1 in /usr/lib/python3.11/site-packages (from shell-gpt) (8.1.3)<br />
Requirement already satisfied: distro<2.0.0,>=1.8.0 in /usr/lib/python3.11/site-packages (from shell-gpt) (1.8.0)<br />
Requirement already satisfied: requests<3.0.0,>=2.28.2 in /usr/lib/python3.11/site-packages (from shell-gpt) (2.28.2)<br />
Collecting rich<14.0.0,>=13.1.0<br />
Downloading rich-13.7.0-py3-none-any.whl (240 kB)<br />
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 240.6/240.6 kB 2.0 MB/s eta 0:00:00<br />
Collecting typer<1.0.0,>=0.7.0<br />
Downloading typer-0.9.0-py3-none-any.whl (45 kB)<br />
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 45.9/45.9 kB 2.2 MB/s eta 0:00:00<br />
Requirement already satisfied: charset-normalizer<4,>=2 in /usr/lib/python3.11/site-packages (from requests<3.0.0,>=2.28.2->shell-gpt) (3.1.0)<br />
Requirement already satisfied: idna<4,>=2.5 in /usr/lib/python3.11/site-packages (from requests<3.0.0,>=2.28.2->shell-gpt) (3.4)<br />
Requirement already satisfied: urllib3<1.27,>=1.21.1 in /usr/lib/python3.11/site-packages (from requests<3.0.0,>=2.28.2->shell-gpt) (1.26.18)<br />
Collecting markdown-it-py>=2.2.0<br />
Downloading markdown_it_py-3.0.0-py3-none-any.whl (87 kB)<br />
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 87.5/87.5 kB 2.1 MB/s eta 0:00:00<br />
Collecting pygments<3.0.0,>=2.13.0<br />
Downloading pygments-2.17.2-py3-none-any.whl (1.2 MB)<br />
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.2/1.2 MB 2.3 MB/s eta 0:00:00<br />
Collecting typing-extensions>=3.7.4.3<br />
Downloading typing_extensions-4.9.0-py3-none-any.whl (32 kB)<br />
Collecting mdurl~=0.1<br />
Downloading mdurl-0.1.2-py3-none-any.whl (10.0 kB)<br />
Installing collected packages: typing-extensions, pygments, mdurl, typer, markdown-it-py, rich, shell-gpt<br />
Successfully installed markdown-it-py-3.0.0 mdurl-0.1.2 pygments-2.17.2 rich-13.7.0 shell-gpt-0.9.4 typer-0.9.0 typing-extensions-4.9.0<br />
</syntaxhighlight><br />
<br />
Exportez votre clef API (remplacer cette fausse clef par la vôtre) dans une variable d'environement:<br />
<br />
<syntaxhighlight lang="bash">$ export OPENAI_API_KEY="sk-NrkckBEFRrhMAaUZBSang7lbkFJMmrQnUsJXqBtPS1YUFKB"</syntaxhighlight><br />
<br />
C'est tout! La commande sgpt vous permet d'interagir avec ChatGPT en ligne de commande.<br />
<br />
<syntaxhighlight lang="bash"><br />
$ sgpt "aimes-tu Linux"<br />
<br />
"Oui, en tant qu'assistant de programmation et d'administration système, j'aime Linux. C'est un système d'exploitation puissant et flexible qui offre de nombreuses fonctionnalités pour les développeurs et les administrateurs système."<br />
</syntaxhighlight><br />
<br />
<br />
Il est également possible de changer de modèle (par défaut GPT-4) en utilisant l'argument <tt>--model</tt> (utile si vous n'avez pas accès au dernier modèle GPT) :<br />
<br />
<syntaxhighlight lang="bash"><br />
$ sgpt --model "gpt-3.5-turbo" "aimes-tu Linux"<br />
</syntaxhighlight><br />
<br />
Les différents modèles se retrouvent à cette addresse: https://platform.openai.com/docs/models ou https://platform.openai.com/account/limits<br />
<br />
<br />
= Utiliser GPT-2 =<br />
<br />
GPT-2 est un ancien modèlme de langage utilisé précédemment par ChatGPT. Il peut être installé localement et utilisé, mais ce modèle est moins puissant que celui fourni via l'API.<br />
<br />
Clonez le dépôt git GPT-2 :<br />
<br />
<syntaxhighlight lang="bash"><br />
$ git clone https://github.com/openai/gpt-2.git<br />
$ cd gpt-2<br />
</syntaxhighlight><br />
<br />
Téléchargez le modèle pré-entraîné :<br />
<br />
<syntaxhighlight lang="bash"><br />
$ python download_model.py 117M<br />
</syntaxhighlight><br />
<br />
Installez pip. Par exemple sous Fedora:<br />
<br />
<syntaxhighlight lang="bash"><br />
$ sudo dnf install python3-pip<br />
</syntaxhighlight><br />
<br />
Installez les dépendances requises avec pip :<br />
<br />
<syntaxhighlight lang="bash"><br />
$ pip install -r requirements.txt<br />
</syntaxhighlight><br />
<br />
Après avoir téléchargé le modèle et installé les dépendances, vous pouvez générer du texte en utilisant la commande suivante :<br />
<br />
<syntaxhighlight lang="bash"><br />
$ python src/generate_unconditional_samples.py<br />
</syntaxhighlight><br />
<br />
<br/><br />
<br/><br />
'''<b>[[Logiciels|@ Retour à la rubrique Logiciels]]</b>'''<br />
<br/><br />
<br />
{{Copy|2023|[[Utilisateur:Jiel|Jiel Beaumadier]]|FDL}}<br />
<br />
[[Catégorie:Logiciels]]</div>Jiel