Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#2201 Le 10/10/2012, à 18:32

Pylades

Re : /* Topic des codeurs [7] */

Dans mon exemple, fontconfig c’est la bibliothèque que tu veux lier.
Et clang, c’est le compilateur, comme gcc.

Sinon, pkg-config(1) est ton ami.


“Any if-statement is a goto. As are all structured loops.
“And sometimes structure is good. When it’s good, you should use it.
“And sometimes structure is _bad_, and gets into the way, and using a goto is just much clearer.”
                Linus Torvalds – 12 janvier 2003

Hors ligne

#2202 Le 10/10/2012, à 18:51

nathéo

Re : /* Topic des codeurs [7] */

Je n'ai pas très bien compris, ça forme la bibliothèque (auqeul on utilise déjà "ar rc") ou ça lie la bibliothèque et les autres fichier à un programme ou code source ?


C'est rarement par le sarcasme qu'on élève son âme.
Le jus de la vigne clarifie l'esprit et l'entendement.
De quoi souffres-tu ? De l'irréel intact dans le réel dévasté ?
La liberté n'est qu'un vain fantôme, quand une classe d'hommes peut affamer l'autre impunément. timezone[America/Bogota]

Hors ligne

#2203 Le 10/10/2012, à 19:13

The Uploader

Re : /* Topic des codeurs [7] */

Lien vers l'histoire de Windows 9X (contient un article du super blog "The Old New Thing") smile

Dernière modification par The Uploader (Le 10/10/2012, à 19:13)


- Oldies PC : Intel Pentium 3 @ 800 Mhz sur CM ASUS P2B-F, GeForce 4 Ti4800 SE, Disque Dur Hitachi 160 Go, 512 Mo de RAM, 3DFX Voodoo 2, Sound Blaster 16 ISA PnP, Windows 98 SE / XP)
- Desktop : Intel Core i7 6700K @ 4 GHz sur CM ASUS Z170-P, GeForce GTX 1070, SSD Samsung 850 EVO 1 To, 16 Go de RAM, Disque Dur Seagate Barracuda 3 To, Windows 10

Hors ligne

#2204 Le 10/10/2012, à 19:32

Pylades

Re : /* Topic des codeurs [7] */

Bah, c’est pour lier ta bibliothèque à ton programme, pas pour te faire le café… neutral


“Any if-statement is a goto. As are all structured loops.
“And sometimes structure is good. When it’s good, you should use it.
“And sometimes structure is _bad_, and gets into the way, and using a goto is just much clearer.”
                Linus Torvalds – 12 janvier 2003

Hors ligne

#2205 Le 10/10/2012, à 19:39

xapantu

Re : /* Topic des codeurs [7] */

nathéo a écrit :

Je n'ai pas très bien compris, ça forme la bibliothèque (auqeul on utilise déjà "ar rc") ou ça lie la bibliothèque et les autres fichier à un programme ou code source ?

Dans l'exemple de Πυλάδης, ça prend les deux fichiers objets plop.o et plouf.o, ça les lie dynamiquement à fontconfig, c'est à dire que ça regarde lit les fonctions qui sont d'une part dans plop.o et plouf.o, et d'autre part dans la lib de fontconfig (un fichier du genre /usr/lib/libfontconfig.so), et ça te sort une erreur si il manque quelque chose. Ça n'inclue pas fontconfig dans ton exécutable, ça met juste une instruction pour dire à la machine de lire aussi libfontconfig.so quand tu lance l'exécutable. (Donc il faut que fontconfig soit installé.)
Ça c'est donc pour les dynamiques.

Quand tu compile en statique, ça fait à peu près la même chose, sauf que gcc inclut directement le binaire de fontconfig (le fichiers doit être un truc du genre /usr/lib/libfontconfig.la ou .a ? je sais plus...) dans ton exécutable, et tu n'a donc pas besoin que la librairies soit installée sur la machine de tout le monde quand tu distribue ton exécutable.
Ce ne sont pas les mêmes arguments à donner au compilateur.

Voilà voilà, ça fait quelques temps que je n'ai pas touché à ça, donc c'est un peu approximatif, mais je pense que c'est l'idée générale (je suis persuadé que quelqu'un me corrigera dans le cas contraire !).

Hors ligne

#2206 Le 10/10/2012, à 19:53

nathéo

Re : /* Topic des codeurs [7] */

Merci pour l'explication claire xapantu (d'ailleurs, ça faisait un moment que je t'avais pas croisé dans le coin tongue), je pense qu'avec ça, je devrais m'en sortir, mais si on as déjà une bibliothèque (créée justement avec la commande "ar rc") y'a-t-il une opération spéciale à faire ou un paramètre à préciser ?


C'est rarement par le sarcasme qu'on élève son âme.
Le jus de la vigne clarifie l'esprit et l'entendement.
De quoi souffres-tu ? De l'irréel intact dans le réel dévasté ?
La liberté n'est qu'un vain fantôme, quand une classe d'hommes peut affamer l'autre impunément. timezone[America/Bogota]

Hors ligne

#2207 Le 10/10/2012, à 20:03

Kanor

Re : /* Topic des codeurs [7] */

nathéo si tu fais pas un peu de rtfm tu es mal

man ar

Hors ligne

#2208 Le 10/10/2012, à 20:15

grim7reaper

Re : /* Topic des codeurs [7] */

Πυλάδης a écrit :

Il vous ont appris ce que c’est qu’un compilateur, à Epitech ?

Plutôt une chaîne de compilation, vu que là c’est plus une histoire d’éditeur de lien que de compilateur.
Mais ça reste navrant qu’une école ne présente pas ça au début…



xapantu a écrit :

Voilà voilà, ça fait quelques temps que je n'ai pas touché à ça, donc c'est un peu approximatif, mais je pense que c'est l'idée générale (je suis persuadé que quelqu'un me corrigera dans le cas contraire !).

Un peu ouais (genre quand tu compiles en statique ça n’inclue pas toute la bibliothèque mais juste les fonctions que tu appelles) mais ça reste correct wink



nathéo a écrit :

y'a-t-il une opération spéciale à faire ou un paramètre à préciser ?

Bah le nom de ta bibliothèque…
Et si elle est pas installée dans les répertoires connus du compilo’, faut lui indiquer mais bon là tu peu aussi STFW ou RTFM gcc.

Dernière modification par grim7reaper (Le 10/10/2012, à 20:25)

Hors ligne

#2209 Le 10/10/2012, à 20:19

Pylades

Re : /* Topic des codeurs [7] */

grim7reaper a écrit :

Plutôt une chaîne de compilation, vu que là c’est plus une histoire d’éditeur de lien que de compilateur.

C’était une vraie question ; en fait je me suis mal exprimé, je voulais savoir si on les avait fait compiler « à la main » ou au moins montré les argument passés au compilo…


“Any if-statement is a goto. As are all structured loops.
“And sometimes structure is good. When it’s good, you should use it.
“And sometimes structure is _bad_, and gets into the way, and using a goto is just much clearer.”
                Linus Torvalds – 12 janvier 2003

Hors ligne

#2210 Le 11/10/2012, à 12:40

Elzen

Re : /* Topic des codeurs [7] */

Un peu de nouveau concernant mes problèmes existentiels :

ArkSeth a écrit :

Édit2 : d'ailleurs, ça me fait penser qu'il existe une réponse, potentiellement propre, à ce problème, dans le cas où le code en question est généré dynamiquement : faire générer la CSS dynamiquement aussi. Dans le cas d'une CSS générée dynamiquement, ça ne poserait pas particulièrement de soucis d'avoir une liste exhaustive de couples (lien, image) plutôt qu'un traitement unique pour chaque lien. Mais bon, dans mon cas, je préfère rester à du statique.

En fait, j'pense que je vais faire un truc dans ce genre-là…

Je reste sur mon idée de pages générées statiquement (en gros, le CGI génère la page dans des fichiers HTML/CSS en dur au moment où on modifie quelque chose, puis le serveur web renvoie directement ces pages-là sans avoir besoin de recalculer à chaque fois) ; mais je peux effectivement faire générer d'un côté un fichier HTML sans balises <img />, et de l'autre un fichier CSS spécifique ajoutant les images requises. Ce sera quand même plus propre.

Je n'voulais pas au départ, parce que je pensais que la page en question resterait faite-main, mais en fait j'vais en mettre quelques unes à d'autres endroits du site, donc autant faire la génération automatique, ce sera plus simple.

ArkSeth a écrit :

Pour simplifier ce que je voudrais, en gros : une gestion des autorisations d'accès qui soit relativement facile à faire évoluer (sans avoir besoin de relancer le serveur à chaque fois que tu veux interdire un nouveau document), qui soit propre et sécurisée (je préférerais éviter les sessions gérées par le CGI), pas trop contraignante pour l'utilisateur (une page de login plutôt qu'une popup, par exemple), et si possible compatible avec les comptes machines réels.

Mon système de permissions restant relativement permissif (genre, il suffit de se connecter, même en utilisant le compte invité, pour avoir accès au truc ; t'façon les utilisateurs qui auront un vrai compte auront aussi un accès SSH pour les trucs vraiment confidentiels), j'pense opter pour la stratégie que j'avais évoqué ci-dessus : accès libre en HTTP ; accès authentifié sur l'ensemble du site en HTTPS.
Pour les fichiers restreints, je vais simplement identifier les fichiers protégés par un caractère spécial (genre « § », c'est un carac ASCII, donc pas de soucis dans les URL, normalement) ; et demander au serveur Web de bloquer l'accès aux fichiers contenant ce caractère en HTTP, mais pas en HTTPS.
Étant donné mes besoins, ça me paraît une solution plutôt pas mal smile

Par contre, pour remplacer la popup par une page de login, la simple redirection de l'erreur 401 vers une page spéciale n'a pas suffi. Je n'sais pas trop si c'est possible, du coup… (mais ça ne devrait pas être trop gênant, si c'est uniquement en HTTPS et appliqué à l'ensemble du site).

Il faut encore que je regarde pour un annuaire LDAP correspondant aux comptes machines réels (Le Rouge, tu as encore de la doc sous la main ou ça date trop ?)

Hors ligne

#2211 Le 11/10/2012, à 12:46

Dr Le Rouge

Re : /* Topic des codeurs [7] */

Non, mais c'est pas dur à trouver ^^


C'est deux suites de Cauchy qui veulent aller à la soirée 'no limit'. Hélas, à l'entrée le videur leur dit : "désolé, c'est complet !".
mon site perso (π²/6.fr) et mon blog

Hors ligne

#2212 Le 11/10/2012, à 13:50

Rolinh

Re : /* Topic des codeurs [7] */

Il n'y a que moi ou bien vous aussi vous trouvez rarement le courage (à tort sûrement) de lire les posts d'ArkSeth?
En fait, je ne sais pas comment il fait pour faire si long à chaque post O_O

Hors ligne

#2213 Le 11/10/2012, à 14:30

grim7reaper

Re : /* Topic des codeurs [7] */

ArkSeth a écrit :

un caractère spécial (genre « § », c'est un carac ASCII, donc pas de soucis dans les URL, normalement)

Non, c'est pas de l'ASCII ça.

Hors ligne

#2214 Le 11/10/2012, à 14:34

Elzen

Re : /* Topic des codeurs [7] */

Rolinh a écrit :

Il n'y a que moi ou bien vous aussi vous trouvez rarement le courage (à tort sûrement) de lire les posts d'ArkSeth?
En fait, je ne sais pas comment il fait pour faire si long à chaque post O_O

En déplaçant mes doigts sur le clavier et en appuyant tongue

Blague à part, vu que j'poste surtout sur des questions d'approches un peu complexes, j'essaye de spécifier un peu le contexte, en fait je n'vois pas trop comment je pourrais faire moins en restant compréhensible hmm

grim7reaper a écrit :

Non, c'est pas de l'ASCII ça.

Ah ? Mince hmm Ça risque de poser un problème d'accessibilité, du coup ? T'aurais autre chose à me suggérer ?

(Et du coup : si ç'n'est pas un caractère de base, et vu à quel point on ne s'en sert jamais, que fout ce truc à être d'accès aussi facile sur le clavier azerty standard ? yikes)

Hors ligne

#2215 Le 11/10/2012, à 14:47

grim7reaper

Re : /* Topic des codeurs [7] */

ArkSeth a écrit :

T'aurais autre chose à me suggérer ?

$ ?

Hors ligne

#2216 Le 11/10/2012, à 14:57

Elzen

Re : /* Topic des codeurs [7] */

Ah ouais, vérification effectuée, l'ASCII simple, ç't'encore plus limité que ce que je croyais naïvement yikes

Le $ dans les noms de fichiers, ça ne pose pas de problème pour l'accès par les URL, mais c'est un peu plus chiant pour l'accès en shell ('faut juste mettre un antislash devant, ç'tout, m'enfin bon, tant qu'à choisir les noms de fichiers exprès, j'aimerais bien que ça passe directement…)

Le @, sachant que ce sera nécessairement après le ndd, ça risque quand même de poser problème, ou pas ?

Hors ligne

#2217 Le 11/10/2012, à 15:00

grim7reaper

Re : /* Topic des codeurs [7] */

Sinon % ?

Hors ligne

#2218 Le 11/10/2012, à 15:03

Elzen

Re : /* Topic des codeurs [7] */

Bah, c'est réservé, dans les URL, ça sert à représenter les espaces et les caractères spéciaux.

Hors ligne

#2219 Le 11/10/2012, à 15:06

grim7reaper

Re : /* Topic des codeurs [7] */

Ha oui, merde >_<
Bah ^ alors.

Dernière modification par grim7reaper (Le 11/10/2012, à 15:07)

Hors ligne

#2220 Le 11/10/2012, à 15:35

Rolinh

Re : /* Topic des codeurs [7] */

ArkSeth a écrit :

En déplaçant mes doigts sur le clavier et en appuyant tongue

Blague à part, vu que j'poste surtout sur des questions d'approches un peu complexes, j'essaye de spécifier un peu le contexte, en fait je n'vois pas trop comment je pourrais faire moins en restant compréhensible hmm

Nan c'est sûr. J'ai écrit ça aujourd'hui mais c'est surtout que j'ai déjà vu passer certains de tes posts qui étaient hyper long et qu'en moyenne tes posts sont beaucoup plus long que la moyenne de ceux des gens sur ce forum. wink

Hors ligne

#2221 Le 11/10/2012, à 15:42

Elzen

Re : /* Topic des codeurs [7] */

grim7reaper a écrit :

Bah ^ alors.

Esthétiquement parlant, et au niveau représentativité, je préférerais l'arobase, en fait ; mais je n'sais pas si c'est potentiellement dangereux ou pas (l'arobase est un caractère réservé uniquement pour séparer le ndd du login/mdp, une fois le premier slash passé, il ne sert plus à rien, normalement… je crois). Si ç'n'est pas bon, j'utiliserai ^, ouais (si on doit rester à l'ASCII, t'façon, les choix sont limités ><)

Rolinh a écrit :

Nan c'est sûr. J'ai écrit ça aujourd'hui mais c'est surtout que j'ai déjà vu passer certains de tes posts qui étaient hyper long et qu'en moyenne tes posts sont beaucoup plus long que la moyenne de ceux des gens sur ce forum. wink

Bah j'ai une certaine tendance à participer à des trolls et autres discussions du même genre, ce qui a tendance à faire assez rapidement monter la quantité de texte…

Hors ligne

#2222 Le 11/10/2012, à 16:01

Shanx

Re : /* Topic des codeurs [7] */

Bonjour,
je suis en train de m’entraîner en C (avec l’aide bienveillante de Pylade, qui m’explique des trucs que je comprend pas big_smile).
Du coup, je cherche des idées de petits jeux que je pourrais coder. Si vous avez ça en poche, je suis preneur.

Sinon, voilà un petit code qui propose deux jeux, et dans lequel j’aimerais en implémenter plus :

#include <stdio.h>
#include <stdlib.h>

void cherche(void) {
	const int MAX = 100, MIN = 1; //pour la génération du nombre aléatoire
	int i = 1; //compteur
	int nombreMystere; //s'il y a deux joueurs
	int nombreEntre;

	srand(time(NULL));
	nombreMystere = (rand() % (MAX - MIN + 1)) + MIN;
    
	while (nombreEntre != nombreMystere) {
		printf("Entrez un nombre : ");
		scanf("%d", &nombreEntre);
		if (nombreEntre < nombreMystere) {
			puts("Plus haut !\n");
			i++;
		}
		else if (nombreEntre > nombreMystere) {
			puts("Plus bas !\n");
			i++;
		}
	}
	printf("C'est pas mal, mais il t’a quand même fallu %d coups…\n", i);
}

void allumettes(void) {
	int i = 1; //Compteur de tour
	int a; //Nombre d’allumette(s) enlevée(s) à chaque tour
	int reste = 12; //On part avec 10 allumettes
	puts("Le principe est simple : il y a 12 allumettes. Tu peux en enlever 1, 2 ou 3 à chaque tour. Tu es opposé à l’ordinateur. Celui qui prend la dernière allumette a gagné.");
	while (reste > 0) {
		puts("------------");
		printf("Tour %d.\n", i);

		//L’utilisateur joue
		while (a < 1 || a > 3) {
			puts("Combien d’allumettes souhaites-tu retirer ?");
			scanf("%d", &a);
		}
		reste = reste - a;
		printf("Il reste %d allumettes.\n", reste);

		//Au tour de l’ordi. Le but est de laisser un nombre d’allumette multiple de 4.
		a= reste % 4;
		reste -= a;
		printf("L’ordinateur enlève %d allumette(s), il en reste donc %d.\n", a, reste);
		
		if (reste == 0) {
			puts("D’ailleurs, tu as perdu.");
		}

		i++; //On incrémente le compteur de tour
		a = 0; //Si on ne le fait pas, le while dont la condition porte sur a reste toujours vrai.
	}

}

int main (void) {
	int a;
	while (1) {
		puts("--------");
		puts("Bonjour ! À quel jeu veux-tu jouer ?");
		while (a < 1 || a > 3) {
			puts("1. Tu veux chercher le nombre mystère ?");
			puts("2. Tu veux jouer aux allumettes ?");
			puts("3. Sortir.");
			scanf("%d", &a);
		}
		
		if (a == 3) {
			puts("Au revoir.");
			break;
		}

		switch (a) {
			case 1 : cherche(); break;
			case 2 : allumettes(); break;
			default : puts("BOUM !");
		}
		a=0;
	}
}

Je sais que le menu du main est mal foutu, mais je n’ai pas compris les améliorations proposées par Pylade…


Mes randos : grande traversées des Alpes, de l'Islande, de la Corse, du Japon (en vélo), etc.
Traversée des États-Unis à pied

Hors ligne

#2223 Le 11/10/2012, à 16:01

Shanx

Re : /* Topic des codeurs [7] */

Bonjour,
je suis en train de m’entraîner en C (avec l’aide bienveillante de Pylade, qui m’explique des trucs que je comprend pas big_smile).
Du coup, je cherche des idées de petits jeux que je pourrais coder. Si vous avez ça en poche, je suis preneur.

Sinon, voilà un petit code qui propose deux jeux, et dans lequel j’aimerais en implémenter plus :

#include <stdio.h>
#include <stdlib.h>

void cherche(void) {
	const int MAX = 100, MIN = 1; //pour la génération du nombre aléatoire
	int i = 1; //compteur
	int nombreMystere; //s'il y a deux joueurs
	int nombreEntre;

	srand(time(NULL));
	nombreMystere = (rand() % (MAX - MIN + 1)) + MIN;
    
	while (nombreEntre != nombreMystere) {
		printf("Entrez un nombre : ");
		scanf("%d", &nombreEntre);
		if (nombreEntre < nombreMystere) {
			puts("Plus haut !\n");
			i++;
		}
		else if (nombreEntre > nombreMystere) {
			puts("Plus bas !\n");
			i++;
		}
	}
	printf("C'est pas mal, mais il t’a quand même fallu %d coups…\n", i);
}

void allumettes(void) {
	int i = 1; //Compteur de tour
	int a; //Nombre d’allumette(s) enlevée(s) à chaque tour
	int reste = 12; //On part avec 10 allumettes
	puts("Le principe est simple : il y a 12 allumettes. Tu peux en enlever 1, 2 ou 3 à chaque tour. Tu es opposé à l’ordinateur. Celui qui prend la dernière allumette a gagné.");
	while (reste > 0) {
		puts("------------");
		printf("Tour %d.\n", i);

		//L’utilisateur joue
		while (a < 1 || a > 3) {
			puts("Combien d’allumettes souhaites-tu retirer ?");
			scanf("%d", &a);
		}
		reste = reste - a;
		printf("Il reste %d allumettes.\n", reste);

		//Au tour de l’ordi. Le but est de laisser un nombre d’allumette multiple de 4.
		a= reste % 4;
		reste -= a;
		printf("L’ordinateur enlève %d allumette(s), il en reste donc %d.\n", a, reste);
		
		if (reste == 0) {
			puts("D’ailleurs, tu as perdu.");
		}

		i++; //On incrémente le compteur de tour
		a = 0; //Si on ne le fait pas, le while dont la condition porte sur a reste toujours vrai.
	}

}

int main (void) {
	int a;
	while (1) {
		puts("--------");
		puts("Bonjour ! À quel jeu veux-tu jouer ?");
		while (a < 1 || a > 3) {
			puts("1. Tu veux chercher le nombre mystère ?");
			puts("2. Tu veux jouer aux allumettes ?");
			puts("3. Sortir.");
			scanf("%d", &a);
		}
		
		if (a == 3) {
			puts("Au revoir.");
			break;
		}

		switch (a) {
			case 1 : cherche(); break;
			case 2 : allumettes(); break;
			default : puts("BOUM !");
		}
		a=0;
	}
}

Je sais que le menu du main est mal foutu, mais je n’ai pas compris les améliorations proposées par Pylade…


Mes randos : grande traversées des Alpes, de l'Islande, de la Corse, du Japon (en vélo), etc.
Traversée des États-Unis à pied

Hors ligne

#2224 Le 11/10/2012, à 16:43

Pylades

Re : /* Topic des codeurs [7] */

Hey, tu peux faire des lignes plus courtes, comme ça :

puts("long long long long long long long long long long long long long long long long "
    "long long long long long long long long long long long long long long");

Pour un autre exercice, tu peux faire le fizz-buzz, ça ne casse pas trois pattes à un canard, mais ça te fait pratiquer…

Sinon, dans ce que je t’ai montré pour le menu, pour rappel :

int main(void) {
    while (1) {
        long g;
        char[4] ans;
        puts("Veuillez sélectionner un jeu :");
        puts("1. Truc");
        puts("2. Machin");
        puts("3. Quitter");
        fgets(ans, sizeof ans, stdin);
        g = strtol(ans, NULL, 10);
        if (g == 3)
            break;
        switch (g) {
            case 1:
                truc();
                break;
            case 2:
                machin();
                break;
            default:
                puts("Ne me prends pas pour un con ; donne une valeur convenable.");
        }
    return 0;
}

qu’est-ce que tu ne comprends pas ? T’as juste à RTFM fgets et strtol, en plus il me semble que t’as à peu près compris l’usage de ces deux fonctions.
Bon, OK, l’usage de sizeof peut sembler un peu bizarre, mais tu peux considérer que c’est un moyen correct d’obtenir 4, la longueur du tableau.

Sinon, argc et argv, ce sont les arguments de main utilisés pour recevoir les arguments sur la ligne de commande (en fait, ce sont les noms qui leur sont couramment donnés). argc est un entier, c’est le nombre d’arguments passés. argv est un pointeur vers un tableau de chaînes de caractères, terminé par NULL, où sont contenus les arguments, le premier étant le nom utilisé pour invoquer ton programme.
Exemple d’utilisation :

#include <stdio.h>
#include <assert.h>
int main(int argc, char** argv) {
    size_t i;
    for (i=0; argv[i]; i++) {
        printf("argument %ld: %s\n", i, argv[i]);
    }
    assert(i == argc);
    return 0;
}

Exécute ce programme et tu verras.

Dernière modification par Πυλάδης (Le 11/10/2012, à 16:45)


“Any if-statement is a goto. As are all structured loops.
“And sometimes structure is good. When it’s good, you should use it.
“And sometimes structure is _bad_, and gets into the way, and using a goto is just much clearer.”
                Linus Torvalds – 12 janvier 2003

Hors ligne

#2225 Le 11/10/2012, à 18:11

Kanor

Re : /* Topic des codeurs [7] */

ça semble bon le $ dans l'url pour  être utilisé pour autre chose
http://www.bortzmeyer.org/6570.html
https://tools.ietf.org/html/rfc3986

Hors ligne