Linuxator a écrit 141 commentaires

  • [^] # Re: Un journal aurait été mieux.

    Posté par  (site web personnel) . En réponse au message IT-Edit (Integrated Terminal Editeur).. Évalué à -3.

    Merci pour le tuyaux,

    seulement le problème est que j'arrive pas accéder a l'interface d'écriture d'un article de journal.

    Alors j'ai soumis une dépêche qui reste en attente d'acceptation.

  • [^] # Re: Mélange des cartes

    Posté par  (site web personnel) . En réponse au message Jeu de poker pour Linux.. Évalué à -5.

    tu ne peux pas progresser si tu ne te remets pas en question.

    Je prend note mais personnellement je n'ai pas envie de copier un algorithmes qui existe déjà inventé par un grand mathématicien, et je ne veut pas réinventer la roue.
    Surtout que je ne suis pas fort en math.
    J'ai un niveau seconde générale, je lis beaucoup, mais ça a ses limites, surtout quand ont a pas assez de bases pour apprendre des notions que je n'ai même pas eu le temps de voir a l'école, surtout que l'école est loin maintenant, mais ma soif de savoir ne s'est pas arrêter a la fin de ma scolarité bien au contraire.

    J'apprends beaucoup de choses en lisant et essayer d'implémenter les notions apprise est mon sport favoris en C.

    Sinon j'aurai pu faire le jeu avec python (dont j'ai 4 et demie d'expérience) mais je voulais une difficulté supplémentaire alors imaginer mon n'importe quoi en python, car en faisant n'importe quoi en python l'on arrive assez facilement a ses fins.

    Je comprend ou vous voulez en venir il est vrai que itérer 2 fois sur 32 cartes pour échanger la position d'une seule carte n'est pas très efficace mais ce que vous ne pouviez pas savoir est que les structures de type Stack et Queue sont basé sur des liste chaînées, issue du bouquin mentionner, a moi l'erreur d'itérer sur une liste chaînée au lieu de d'échanger plusieurs pointeurs a la fois, sur 32 cartes.

    Finalement j'ai pris du plaisir a programmer ce jeu et dans un jeu de cartes la rapidité d'exécution n'est pas requise contrairement a la plupart des jeux.

    l'implémentation des algorithmes est bugguée (ils ne font pas ce que tu crois qu'ils font, ce qui justifie ma remarque sur la différence entre "mélanger" et "faire n'importe quoi")

    Alors la je ne comprends pas du tout…
    Mais algorithmes sont peut être inefficace mais ce sont les miens.

    Alors si je ne sais pas dire a l'ordinateur ce que je veux qu'il fasse c'est que je ne sais pas programmer (surtout qu'en C ça se discute: qui sait programmer).
    Mais apparemment l'ordinateur comprends le n'importe quoi que je veux lui faire faire.

    Pour finir j'ai corriger quelques bugs du jeu et mis une nouvelle version sur le serveur, le jeu de carte fonctionne maintenant sans bug connus et j'ai même fait une version Windows.

  • [^] # Re: Mélange des cartes

    Posté par  (site web personnel) . En réponse au message Jeu de poker pour Linux.. Évalué à -4.

    En tout cas, il existe une différence entre "mélanger les cartes" et "faire n'importe quoi avec le paquet", même si le résultat final pourrait ne pas être totalement différent…

    Je voulais implémenter des algorithmes de mélange de cartes simulant les techniques de mélange que je connaît (donc comme un humain mélange les cartes) et ne sont basé sur aucun dogme mathématique sur la répartition finale des cartes.
    Ce n'est pas n'importe quoi pour autant mais ils font exactement ce que j'ai dit dans la description des algorithmes au premier poste.
    Après il faut dire que se sont mes techniques de mélange et c'est tout.

  • [^] # Re: Mélange des cartes

    Posté par  (site web personnel) . En réponse au message Jeu de poker pour Linux.. Évalué à -4.

    (et vu que ton site est toujours inaccessible, on ne risque pas de voir le code pour l'instant, et les réponses se font sur ce dont on dispose, ça n'aide pas).

    Je ne comprends j'ai toujours accès a mon site en tant que client de n'importe poste ou je me trouve et ca m'étonnerai que mes IPS s'activent quand ont clique sur un lien menant a la fiche descriptive de mon programme et si vous y êtes il y a un gros bouton télécharger. Ou vers mon index.
    Si vous avez une réponse 403 c'est que vous avez violer une règle de sécurité que j'ai écrit au niveau de la configuration du serveur.

    […] On s'aperçoit de ses progrès quand on relit son vieux code et qu'on voit à quel point on était mauvais et naïf 10 ans avant. Et ça ne s'arrête jamais, on doit chercher à progresser toute sa vie.

    Ça ne fait que 2 ans pile (début au mois de janvier 2013) que je pratique le C et j'ai débuter la programmation avec python sous Ubuntu 10.04. Donc je n'ai pas autant d'expérience que vous.

    Coté algorithmes et structures de données je suis pas bien fort je suis en train de lire Maîtrise des algorithmes en C et au début je faisait mes propres implémentations des structures de données que j'ai corriger avec le code du bouquin (Dont il faut dire que la théorie est excellemment expliquée, par contre les codes sources sont écrit de manière très complexe et pas du tout explicite.).
    Arriver au chapitre compression de données je n'arrive plus a suivre.

    Je regrette de ne pas avoir attendus plus longtemps avant de lire ce livre la, vue la complexité, car ce n'est pas la première fois que je ces algorithmes et ces structures de données.

    Sans blague, je ne pense pas que Linuxator sache ce que "for (cc=0 ; cc < get_rand(32) ; cc++ )" fait.

    Si et ce n'est pas fait exprès: a chaque itération c est incrémenter de 1 et get_rand(32) est appelée et donc l'arrêt dépend de la valeur de c et de la valeur renvoyer.
    Il aurai fallut assigner le retour de get_rand(32) a une variable et la mettre comme valeur de sortie de la boucle.

  • [^] # Re: et les mises ?

    Posté par  (site web personnel) . En réponse au message Jeu de poker pour Linux.. Évalué à -3.

    Bonjours,
    Comme c'est mon premier jeu en C j'ai pas pousser le jeu trop loin, implémenter un système de mise.

    C'est un jeu de chance suivant les cartes qu'ont jettes ou que l'on gardes.
    Mais les cartes sont présenté de manière retourner et il y a une animation de retournement de carte donc ont découvre les cartes de départ au fur et a mesure que l'on retourne ses cartes et ses nouvelles cartes aussi.

    L'on peut même laisser ses cartes retournés après redistribution et demander a l'ordinateur montré ses cartes.
    C'est juste un question de découverte des cartes, de l'ordinateur ou des siennes ce qui peut provoquer des montés d'adrénaline.

    Par exemple après redistribution ont a déjà une paire que l'on a garder et un AS et l'on laisse les 2 nouvelles cartes retourner et l'on demande a l'ordinateur de montrer ses cartes, sous forme d'animation, et il s'avère qui a deux paires alors l'on clique sur ses 2 cartes pour voir si l'on peut battre les 2 paires de l'ordinateur.

    Merci pour vos commentaires.

  • [^] # Re: mélange

    Posté par  (site web personnel) . En réponse au message Jeu de poker pour Linux.. Évalué à -3.

    Bonjours,
    en faîtes ce sont les règles du poker comme j'ai appris a jouer et la hiérarchie des combinaisons des cartes sont issue du wiki le relatant.

  • [^] # Re: Mélange des cartes

    Posté par  (site web personnel) . En réponse au message Jeu de poker pour Linux.. Évalué à -3.

    Merci pour vos critiques,

    en faîte j'ai implémenter les algorithmes de mélange comme nous ont mélanges les cartes quand ont joue au cartes en famille.

    C.A.D il n'y a aucune base mathématique, afin d'obtenir une dispersion des cartes efficace.
    Donc oui j'ai simuler comment un humains mélange les cartes.

    Les 3 algorithmes sont issue de techniques de mélange que je connaît ou que j'ai inventer pour le programme.

    il aurait suffi de réassigner un nouvel ordre : on tire 32 nombres aléatoires ente 0 et 1, et on utilise l'ordre du vecteur pour réordonner le paquet

    J'ai pas bien compris si vous avez lus le code ou pas, mais le jeu de carte est basé sur une structure de donnée de type FILO (Stack) et les algorithmes de mélange utilisent aussi en complément une structure de type FIFO (Queue), issue de l'étude de ce bouquin.

    Je vous invite simplement a lire le code:

    int get_rand(int modulo) {
    
      /** Simply random function. **/
    
      struct timeval tv ;
      gettimeofday(&tv,NULL) ;
    
        return (int) ((rand_r((unsigned int *) &tv.tv_usec) % modulo) < 0) ? 0 : (rand_r((unsigned int *) &tv.tv_usec) % modulo) ;
    }
    
    
    void mix_card_game_classic(Stack *card_game) {
    
      /** Mix the card game by taken an random card from the game and reinsert in the game at an random position. **/ 
    
      int c ;
    
      for (c=0 ; c < 32 ; c++) {
    
    
          int cc ;
    
          ListElt *card_to_rm  = list_head(card_game) ;
          ListElt *card_to_add = list_head(card_game) ; 
    
          /** Compute an random card taking position. **/
          for (cc=0 ; cc < get_rand(32) ; cc++ ) {
        card_to_rm=list_next(card_to_rm) ;
          }
    
          /** Taken one card from the game. **/
          Card *card_datas = malloc(sizeof(Card)) ;
          if (list_remove_next((List *) card_game,card_to_rm,(void *) &card_datas) !=  0) {
        /** This should never append. **/
        continue ;
          }
    
          usleep(get_rand(25)) ;  /** For random utils. **/
    
          /** Compute an random insert position. **/
          for (cc=0 ; cc < get_rand(32) ; cc++ ) {
        card_to_add=list_next(card_to_add) ;
          }
    
          /** Reinsert the card in the game. **/
          if (list_insert_next((List *) card_game,card_to_add,card_datas) != 0) {
        /** This should never append. **/
        exit(EXIT_FAILURE) ;
          }
    
          usleep(get_rand(25)) ; /** For random utils. **/
    
      }
    
      return ;
    }
    
    
    void mix_card_game_heaps(Stack *card_game) {
    
      /** Mix algorithm which construct 5 cards heaps randomly and push it in an different order to reconstruct the card game. **/
    
      Queue mix_heaps[5] ;
    
      uint8_t c  ;
    
      uint8_t sum=0 ;
    
      uint8_t sizes[5] ;
    
      for (c=0 ; c < 5 ; c++) {
        init_queue(&mix_heaps[c],NULL) ;
      }
    
    
      for (c=0 ; c < 5 ; c++) {
    
        int cc, limit ;
    
        if (c != 4) {
          limit=get_rand(8) ;
        }
        else {
          limit= (32-sum < 0) ? 0 : 32-sum ;
        }
    
        if (limit == 0 && c != 4) {
          limit=2 ;
        }
    
        sizes[c]=limit ;
    
        sum += limit ;
    
    
    
        for (cc=0 ; cc < limit ; cc++) {
    
          Card *card = malloc(sizeof(Card)) ;
    
          /** Take a card from the card game. **/
          if (stack_pop(card_game,(void *) &card) != 0) {
        /** This should not append. **/
        continue ;
          }
    
          /** Push the taken card on the current stack. **/
          enqueue(&mix_heaps[c],card) ;
    
        }
        usleep(get_rand(55)) ;
      }
    
    
    
      for (c=0 ; c < sizes[4] ; c++) {
        /** Flush the heap 5 and put it content inn the card game. **/
    
        Card *card ;
    
        /** Take a card from the heap. **/
        dequeue(&mix_heaps[4],(void *) &card) ;
    
    
        /** Set card in the game. **/
        stack_push(card_game,card) ;
    
      }
    
      for (c=0 ; c < sizes[2] ; c++) {
        /** Flush the heap 3 and put it content inn the card game. **/
    
        Card *card ;
    
        /** Take a card from the heap. **/
        dequeue(&mix_heaps[2],(void *) &card) ;
    
    
        /** Set the card in the game. **/
        stack_push(card_game,card) ;
    
      }
    
      for (c=0 ; c < sizes[0] ; c++) {
        /** Flush the heap 1 and put it content inn the card game. **/
    
        Card *card ;
    
        /** Take a card from the heap. **/
        dequeue(&mix_heaps[0],(void *) &card) ;
    
    
        /** Set card in the game. **/
        stack_push(card_game,card) ;
    
      }
    
      for (c=0 ; c < sizes[3] ; c++) {
        /** Flush the heap 4 and put it content inn the card game. **/
    
        Card *card ;
    
        /** Take a card from the heap. **/
        dequeue(&mix_heaps[3],(void *) &card) ;
    
    
        /** Set the card in the game. **/
        stack_push(card_game,card) ;
    
      }
    
      for (c=0 ; c < sizes[1] ; c++) {
        /** Flush the heap 2 and put it content inn the card game. **/
        Card *card ;
    
        /** Take a card from the heap. **/
        dequeue(&mix_heaps[1],(void *) &card) ;
    
    
        /** Set the card in the game. **/
        stack_push(card_game,card) ;
    
      }
    
      return ;
    }
     void mix_card_game_alternate(Stack *card_game) {
    
      /** Mix algorithm wich construct 2 heaps from the card game
        *  and alterantively take an card from an heap, and put it in the card game.
        ****************************************************************************/ 
    
      Queue *half_game_1 = malloc(sizeof(Queue)) ;
      Queue *half_game_2 = malloc(sizeof(Queue)) ;
    
      init_queue(half_game_1,NULL) ;
      init_queue(half_game_2,NULL) ;
    
      uint8_t c ;
    
      for (c=0 ; c < 32 ; c++) {
        /** Loop to construct the two heaps. **/
        Card *card ;
    
        /** Take an card from the card game. **/
        stack_pop(card_game,(void *) &card) ;
    
        if (c % 2 == 0) {
          /** push the card on the first heap. **/
          enqueue(half_game_1,card) ;
        }
        else {
          /** push the card on the second heap. **/
          enqueue(half_game_2,card) ;
        }
      }
    
    
      for (c=0 ; c < 32 ; c++) {
        Card *card ;
    
        if (c % 2 == 0) {
          /** Take a card from the heap one. **/
          dequeue(half_game_2,(void *) &card) ;
        }
        else {
          /** Take a card from the heap two. **/
          dequeue(half_game_1,(void *) &card) ;
        }
    
        /** Push the card on the card game. **/
        stack_push(card_game,card) ;
      }
    
      free(half_game_1) ;
      free(half_game_2) ;
    
      return ;
    }
    
    

    Après je suis assez fiers de mes algorithmes, malgré vos critiques sévères.

    En fin de compte les cartes sont mélangés car en début le jeu de cartes est générer de manière ordonner et puis après le mélange elle sont mélangées (les cartes ne se suivent plus du tout.).

    Concernant la rapidité et l'optimisation, j'ai bien fait attention pour que les animations s'exécute de manière optimisée, mais a part les animations le jeu n'a pas besoin d'être optimiser en matière de rapidité d'exécution comme cela doit l'être pour la plupart des jeux.

    Merci pour vos critiques.

  • [^] # Re: binaire d'install & économie supposée des lib partagées

    Posté par  (site web personnel) . En réponse au message Une bibliothèque partagée (shared object, *.so) pour conversions et calculs mulitbases.. Évalué à -3.

    Sinon il y a une histoire de construction d'adresses relative aussi. Je me souvient pas très bien.
    Si vous vous demandez d'ou je sort ça il y a un livre intéressant mais qui traite plutôt du fonctionnement matériel d'un ordinateur,
    malgré que le livre s'appelle: Architecture des machines et des systèmes informatiques
    Le livre est très bien fait coté pédagogique, je vous le recommande chaudement, et n'est pas trop difficile a comprendre et il y a un chapitre sur le processus de la compilation.

  • [^] # Re: binaire d'install & économie supposée des lib partagées

    Posté par  (site web personnel) . En réponse au message Une bibliothèque partagée (shared object, *.so) pour conversions et calculs mulitbases.. Évalué à -3.

    Il faut dire que je suis loin d'être un Guru Linux

    Moi non plus. Mais on ne parle pas de linux ici, uniquement de développement.

    Ouais mais tu est quand même beaucoup plus calé que moi, déjà tu a semble-t-il étudier l'informatique a l'école, moi je suis autodidacte depuis presque 5 ans et toi tu a passer 6 ans sur Windows, moi quelques heures le temps de faire une version Windows de mes programmes (python, en C c'est un cauchemar le portage: les libraries externes !!!).

    Au niveau de la table des symbole je n'ai pas bien compris le processus de compilation et la structure d'un exécutable:
    Le compilateur construit une table de symboles d'après l'analyse du code source:

    L'analyseur lexicale insère les symboles: c'est la portion du compilateur charger de regrouper les caractères du code source en chaînes significatives, les lexèmes. Ceux-ci sont traduit en éléments syntaxique, les tokens, qui sont passer a l'analyseur syntaxique. Au fur et a mesure que l'analyseur lexicale rencontre des symboles sur son flux d'entrée, il stocke les informations correspondantes dans la table des symboles. Les deux attributs important mémorisés sont le lexème du symbole et le type de token que constitue ce lexème (Un identificateur ou un opérateur, par exemple). Stocker dans une table de hachage…

    J'ai du regarder dans un livre pour ne pas dire de bêtises dans le paragraphe précédent. Et il y a aussi une histoire de d'analyse de BNF ??? Un truc qui permet de traiter tous les éléments d'un langage de programmation comme grep peut décrire une langue parlé…

    Sinon je ne sais pas trop.

  • [^] # Re: binaire d'install & économie supposée des lib partagées

    Posté par  (site web personnel) . En réponse au message Une bibliothèque partagée (shared object, *.so) pour conversions et calculs mulitbases.. Évalué à -3.

    Mon plus gros problème est de faire de la pub pour mes créations:
    En faisant de la pub sur le site de pygame pour un jeu programmer en python avec pygame. Je fais 1165 téléchargements
    Comparez a un autre programme qui n'est pas forcément plus mauvais mais qui ne dispose pas d'un site, permettant de présenter le programme, du module utilisé.
    Je fais 25 téléchargements, en faisant un peu de pub sur 2 ou 3 sites Linux.

    Si vous savez ou l'on peut présenter ses créations dans le but de les faire découvrir aux autres, le termes de pubs n'est pas approprier car je ne vend rien, ça serai vraiment sympa de votre part de m'en informer !!!

  • [^] # Re: binaire d'install & économie supposée des lib partagées

    Posté par  (site web personnel) . En réponse au message Une bibliothèque partagée (shared object, *.so) pour conversions et calculs mulitbases.. Évalué à -4.

    Il faut dire que je suis loin d'être un Guru Linux, et que je n'ai que 2 ans d'expérience avec le C et surtout tout ce qui l'entoure et la grosse lacune de ne pas bien connaître make cmake et co: juste assez pour faire un Makefile avec une unique règle default: ou les quelques lignes nécessaire a l'installation de ma lib sont placer.
    Peut être je devrai lire ce livre mais je n'ai publier que deux programmes en C et donc je manque d'expérience pour le packaging et la lib. La prochaine fois j'utiliserai peut-être libtool comme conseiller.

    Et disons que j'ai un peu déduit ce qu'était une bibliothèque partager de part mes expériences, sans vraiment être certains et instruit sur le sujet, pour faire les pages man je me suis débrouiller comme j'ai put et je suis content du résultat penser a mettre most comme pager c'est plus sympa en coloré ($ export PAGER=most).

    PS: je me suis casser les dents 2 fois sur la calculatrice, une fois avec une interface ncurses et une fois sous forme d'interpréteur pour finalement y arriver avec une interface GTK+3.

  • [^] # Re: LIbtool

    Posté par  (site web personnel) . En réponse au message Une bibliothèque partagée (shared object, *.so) pour conversions et calculs mulitbases.. Évalué à -4. Dernière modification le 26 décembre 2014 à 11:42.

    C'est bien joli, mais si j'ai un accès physique à ta machine, ton datetime-lock seul n’empêchera pas d’accéder à ton sytème, même sans connaître tes mot de passe. Et le plus beau c'est que tu ne le sauras pas…
    Soit en bootant la machine avec un autre init (init=/bin/bash dans la ligne de commande du shell) soit en extrayant le disque.

    D'accord, ça dépends du degrés de parano, mais dans le README.txt du programme (qui est juste une pierre dans un système de protection) il est conseiller de mettre un cadenas sur son ordinateur pour éviter qu'on puisse l'ouvrir: sur la plupart des modèles il y a une petite rondelle, je ne sais pas si vous l'avez remarquer, pour placer un cadenas afin d'éviter de se faire ouvrir.
    Sinon il faut configurer le bios de façon a ce qu'il ne boot pas sur le CD/DVD et surtout mettre un mot de passe bios. Sinon un meuble fermé, adapté, pour mettre son U.C est recommander aussi.
    La chambre forte et les lasers pour le plus paranos qui ont les moyens.

    Sinon je suis aller rapidement sur le site officiel de libtool et donc c'est un outil pour distribué des libraries comme le dit son nom.

  • [^] # Re: LIbtool

    Posté par  (site web personnel) . En réponse au message Une bibliothèque partagée (shared object, *.so) pour conversions et calculs mulitbases.. Évalué à -4.

    Merci pour cette info,
    étant actuellement logué sur un OS Windows, je ne peut faire de recherches concernant "libtool" dans l'immédiat.

    Mais ça parait assez intéressant surtout que je vois plusieurs utilités personnelle:

    -) J'ai un programme de sécurité nommer datetime-lock, le problème est que le programme doit être au démarrage, ce que je n'arrive qu'a faire avec la distribution que j'utilise: Ubuntu.
    J'ai essayer avec plusieurs autres distributions dans une VM sans succès notamment avec la commande chkconfig.

    Attention le programme a un bug, que j'ai récemment découvert, si l'on l'installe sans configurer une première fois une plage, il s'exécute ce qui n'est pas voulus.
    Je vais le bugfix dès que j'aurai le temps.

    ça s'appelle "libtool", et c'est très bien intégré avec les outils "autoconf" / "automake" qui permet la génération d'un script de configuration et des makefiles en fonction des parametres détéctés sur l'OS de l'utilisateur

    Pourrait tu développer le sujet si tu est connaisseur, utilisateur ce serai vraiment sympa de ta part, de m'éclairer un peu plus que le simple tuyau, je te serai reconnaissant.

    Car je pratique le C que depuis 2 ans et je n'ai publier et donc distribuer que 2 programmes, je manque donc d'expérience concernant le packaging de programme écrit en C.

    PS: désolé pour les fôtes d'orthogaffes.

    Merci pour vos réponses éclairées.

  • # La library hobdcalc disponible come shared library.

    Posté par  (site web personnel) . En réponse au message Une calculatrice multibases écrit en C avec GTK+3.. Évalué à -3.

    Pour finir,
    J'ai finit la shared library annoncée, avec une Makefile comme script d'installation.
    la présentation sur ce forum de
    hodbcalc une shared library for multibases conversions and calculation.

    Merci pour vos réponses éclairées qui m'ont bien aider.

  • [^] # Re: précision des flottants

    Posté par  (site web personnel) . En réponse au message Une calculatrice multibases écrit en C avec GTK+3.. Évalué à -3.

    Et puis, je t'avoue, galculator commence à me lasser sérieusement, changer de calculatrice est un truc auquel je pense de plus en plus fortement. Je me suis donc dit: pourquoi pas (mais j'ai pas compilé, flemme d'installer les libs de dev gtk).

    Prend simplement le fichier de format *.deb:
    A condition d'avoir une connexion internet, et d'avoir un OS de la famille debian, ça installe le programme que les dépendances soit installées ou pas. C'est un format de fichier difficile a construire, car il existe un programme se nommant lintian qui vérifie que le fichier *.deb est au normes et qui t'avertis avant d'installer quoi que ça soit si le fichier n'est pas conformes, mais c'est aussi pratique qu'un *.exe (avec installeur) sous Windows.
    Et si tu a le moindre doute en terme de confiance par rapport aux opérations effectuer sur ton OS.
    Tu peut simplement décompresser le fichier *.deb et vérifier les 2 scripts et les sources compilés.

  • [^] # Re: précision des flottants

    Posté par  (site web personnel) . En réponse au message Une calculatrice multibases écrit en C avec GTK+3.. Évalué à -3.

    Merci pour ces précisions,
    petite note: le mot opérande en anglais ne prends pas de 'e' à la fin: d'ou la confusion.

    Concernant les fichiers d'en tête (*.h): ce sont souvent les seules fichiers que l'on retrouve dans le dossier /usr/include et ils ne contiennent que les déclaration des fonctions:

    void ma_func(int mon_int, char *mon_string) ;  
    

    Le corps des fonctions étant contenus dans des fichiers compilés qui sont des library partager ou shared object d'extension .so dont ont doit donner le lien au compilateur avec l'option -l de gcc.

    Je parle en connaissance de cause car je suis en train de travailler sur une library partagée, qui justement sera la library hobdcalc.
    C'est pour bientôt car j'ai terminer les fonctions et il me reste a écrire une partie des manpages, un readme et éventuellement générer une documentation.

    Je ferai un nouveau poste car il reste quelques points a éclaircir:
    -Le chemin ou sont situer les library partagées ne sont pas les mêmes sur les différentes distribution ? Sous Ubuntu elles sont situer dans /usr/lib.
    - Et j'ai le même problème avec les manpages /usr/share/man/ sous Ubuntu.
    Faire un script d'installation propre: ton conseil d'utilisé make me tente de plus en plus.

    Concernant les conseils données je m'en souviendrai pour la prochaine fois, car je ne retouche rarement a un code que je vient de publier (sauf bug fonctionnel), sinon pour faire un Ghobdcalc version 2. Car après un mois de codage acharné l'on a pas forcément envie de retoucher le code.

    Je retiens les conseils données et je les appliquerai car la dernière fois que j'ai publier un programme C ont m'a conseiller d'inclure des fichiers d'extension *.c et non *.h ce que j'ai fait ce coup ci et j'ai compris la différence entre les deux.

    J'ai fracturer le code selon le type de fonctions: fonction touchant aux strings, aux opération etc..
    Je penserai a le fracturer encore plus en fonction des structures manipulées.

    Je ne connais pas GTK, et quand je vois la direction ou ça va, je n'ai pas envie d'apprendre. Pour le moment, je suis très heureux avec mes scanf/printf en fait. Si je dois utiliser des GUI, j'aurai plus tendance à partir sur wxWidgets, voire Qt.
    Il y à d'autres libs aussi, genre fltk qui passeront avant GTK.

    Personnellement j'ai mis un an et demie avant d'envisager d'apprendre une GUI en C. Pas de regrets car cela permet de créer une GUI et donc de rendre accessible des programmes fonctionnant en ligne de commande a un publique qui n'est pas adepte de la ligne de commande, comme dans le cas d'une simple calculatrice.

    Une réflexion que j'ai appris dans un livre consiste a réfléchir sur le type de publique visé par son programme et donc le choix d'utiliser une GUI.

    Sinon j'utilise également un simple éditeur et le terminal comme toi. Pas de IDE comme code::block ou autres anjuta…

    Encore merci d'avoir prêter attention a mon code, car l'on a trop souvent ignoré mes créations sur les forums Linux (pas de réponses a la présentation d'un programme).

  • [^] # Re: précision des flottants

    Posté par  (site web personnel) . En réponse au message Une calculatrice multibases écrit en C avec GTK+3.. Évalué à 1.

    Il faut savoir que:

    type float précision 6 maximale codé sur 4 bytes.
    type double précision 15 maximale codé sur 8 bytes.
    type long double précision 19 maximale codé sur 10 bytes.

    Je pense que le l'inexactitude vient du codage interne des float, double, long double sous forme de:
    mantisse, exposant, signe.

    Si tu te demande ce qu'est une mantisse, un exposant: utilise le formateur %e.
    Par exemple: 1.234568e+08
    mantisse: 1.234568
    exposant: 08
    signe: +

    Le nombre de bits attribuer a la mantisse et a l'exposant dépendent du type et un bit pour le signe (d'ailleurs je crois que le 10 ième byte du long double ne sert que a stocker le signe).
    L'ordinateur ne peut pas stocker les valeurs exactes selon ce système de codage, mais des valeurs très proches.

    La FPU (Floating-Point Unit) qui sert (servait) a stocker les nombre a virgule est composé de 8 registre de de 80 bits (10 bytes) sur un ordinateur 32 bits.

    Mais actuellement ont joue avec des registres XMM (128 bits) ou YMM (256 bits) sur les machines 64 bits.

    Ont peut stocker plusieurs nombres a virgules a la fois dans un registre:

    -) 4 floats (simple précision.) XMM.
    -) 2 double (double précision.) XMM.

    Et effectuer des opérations simultanément sur plusieurs nombres (Simple Instruction Multiple Data) dans ces registres, en assembleur.

    En espérant ne pas trop avoir dit de bêtises.

  • [^] # Re: précision des flottants

    Posté par  (site web personnel) . En réponse au message Une calculatrice multibases écrit en C avec GTK+3.. Évalué à -2.

    Merci pour ces critiques,
    une réponse rapide par citations:

    Objectivement, ton code:

    est en franglais. Soit tu codes en français, soit tu codes en anglais, mais évites les mélanges, ça ne fait qu'ajouter à la confusion.

    Je ne comprend pas j'ai coder exclusivement en anglais, ou est-ce mon anglais qui est franglais (c.a.d que je traduit du français littéralement en anglais ce qui ne donne pas un anglais correct) ?

    est monolithique. J'ai l'impression que toute la logique se situe uniquement dans le fichier contenant la fonction main. Tu devrais séparer ton code en unités logiques.

    La fonction main n'appelle pratiquement que la fonction de génération de la GUI et c'est dans les callback de celle-ci que j'appelle les fonctions du programme. Qu'appelle tu unité logique ?

    se répète trop. J'ai l'impression que tu répètes les mêmes blocs de code pour chaque instantiation de structure (ou est-ce un tableau?) de type, par exemple, "Operation": operande_1, operande_2, result.

    C'est normale il y a une structure Operande qui contient les membres dont a besoin une opérande:

    -) Une valeur booléen indiquant si l'opérande est un nombre a virgule ou un entier.
    -) La valeur en décimale (soit en de type long double soit de type long long en fonction que l'opérande est un entier ou un chiffre a virgule.)
    -) La valeur représenter sous forme de string en base 2, 8 et 16 (un membre par base).
    -) Un uint8_t représentant la base qui a été utiliser pour en coder l'opérande.
    -) Un string contenant le string de la valeur qui a été utiliser pour coder l'opérande.

    Cela me permet de pas faire de dégénération lors des conversion entre base avec des appels a des fonctions de conversions de base successifs.

    Après la structure Operation contient entre autre 3 membres de type struct Operande:
    -) Une pour la première opérande.
    -) Une pour la seconde opérande.
    -) Une pour le résultat.
    Et la structure Operation est remis a zéro après chaque opération et n'est instancier qu'au démarrage du programme statiquement.
    Et il existe une fonction pour chaque manipulation de ses membres:
    -) Remise a zéro.
    -) Filling d'une opérande.
    etc…
    C'est la structure principale du programme, GUI hormis.

    tes fonctions ne sont pas assez spécialisées. Elles manipulent des données provenant de nombreuses sources, généralement des variables globales.

    J'en prend bien note. Je pense que mon organisation est trop bordélique pour voir la logique des fonctions et donc leurs spécialisations.

    abuse des variables globales. Ces variables sont à éviter: elles rendent le code très difficile à maintenir, car on ne sait jamais quelle fonction à, ou non, des effets de bord et où s'arrêtent ces effets de bord.

    Je sais qu'il faut éviter les variables globales, j'en ai utiliser le moins possible (c.a.d encore beaucoup trop).

    n'est pas documenté.

    Entièrement d'accord je voulais en finir a la fin et j'ai oublier de faire des sessions de commentaires du code pendant le développement, comme je fait d'habitude, ce qui fait que le code n'est pas très documenter.

    Je ne contredit en rien ce qui été dit mais bon la vision de celui qui code et de celui qui relit n'est jamais la même. J'admets même que ce n'est pas du code C propre, trop noyer par GTK+3.

    PS: Est a cause de l'erreur d'orthographe du mot opérande en anglais que tu dit que mon code est du franglais…???
    Je ne comprend toujours pas cette critique.

    Merci d'avoir pris le temps de lire mon code, c'est vraiment gentil d'avoir fait l'effort je t'en remercie encore une fois.

  • # pas de réponse en 4 semaines.

    Posté par  (site web personnel) . En réponse au message 2 programmes GTK distribuer sous forme de paquetage deb.. Évalué à -5.

    Salut les Linuxiens de tout bords,
    merci pour votre solidarité et coopération dans la mesure que le premier programme n'a été télécharger que 19 fois et le deuxième 3 fois depuis ce poste (le 19/07/14 à 12:52).
    Si personne de désire tester mes programmes et me donner votre impression, voir lire le code si vous êtes un python, qui contient d'ailleurs un module de redimensionnement d'image afin de faire rentrer une image dans un cadre sans influencer le rapport largeur/hauteur qui est issue d'un de mes premiers programmes ResizeImgForFrame, je vais craquer car ce n'est pas que sur ce site que mes créations sont boycotter…

    S'il vous plaît prenez 5 minutes pour tester mes programmes, dont je ne connaît la portabilité entre distributions Linux supportant le format de fichier *.deb d'ailleurs, ca serai sympa déjà puis si vous désirez faire un commentaire ce serai génial. Je serai ravis au point que ma raie du ulc sourit !!!

    Non plutôt une mauvaise critique que pas de critiques du tout.

    Un paquet deb est facilement désinstallable grâce a la logithèque, dpkg, ou gdebi.

    Merci pour votre collaboration car au vus des circonstances: temps passer a bosser sur le programmes et leurs empaquetage au format *.deb je suis un peu frustré de ne pas avoir de feedback sur aucun site ou j'ai fait la promo de mes progs. A croire que Big Brother a une dent envers moi.

  • # programmes distribuer sous forme de paquetage *.deb

    Posté par  (site web personnel) . En réponse au message Distributions utilisant le système de paquetage *.deb.. Évalué à -5.

    Salut les Linuxiens de tout bords,

    suite a vos précieux conseils et a vos réactions, j'ai publier 2 programmes distribuer sous forme de paquetage *.deb
    Il est vrai que l'installation passe par un dossier temporaire dans /usr/local/bin qui est effacer une fois l'installation terminer car il n'est pas possible, du moins si l'on veut que sont paquetage soit valide, de copier les dossiers directement dans /usr/share/NomDeMonProgramme/.

    Et j'ai aussi pris en compte vos réaction concernant la création du dossier car l'un des deux programmes a besoin d'un dossier de fichiers temporaires donc le programme crée a chaque démarrage après un petit test si le dossier si le dossier n'existe pas déjà suite a un lancement antérieur dans la même session, dans le dossier /tmp un dossier temporaire:

    PyImaging: un programme de traitement d'images avec de multiples effets de des capacités de mixage d'images selon un algorithme:
    il faut renseigner 2 fichiers en entré et parfois donner des paramètres et l'algorithme produit une image de sortie prévisualisable avant un éventuel enregistrement.
    Sinon pour le simple traitement d'image les possibilités ne manquent pas.
    Le programme supporte pas mal de formats de fichiers images.
    Le fichier *.deb contient un *.pdf de documentation du programme.

    EraserDropBox: Une drop box d'effacement sécurisé.
    Il suffit de glisser-déposer le dossier ou fichier a effacer de manière sécurisé, car le programme fait appel au programme wipe comme sous-processus, dans la drop box suite a quoi
    vous pourrez naviguer dans les dossiers sélectionnés ou ajouter, avec un sélecteur de fichier, retirer un fichier ou dossier ou encore retirer tous les éléments de la liste des fichiers et dossiers a effacer.

    Bref un petit programme utile, simple et efficace.

    Le processus d'effacement peut durer un petit moment wipe faisant bien sont boulot en fonction du nombre de fichiers dossier a effacer et du nombre d'itérations choisie (nombre d'écrasement des fichiers).

    PS: Ce sont mes premiers programme utilisant comme GUI (py)GTK avant je faisais avec Tkinter.

  • [^] # Re: merci pour vos réponses.

    Posté par  (site web personnel) . En réponse au message Distributions utilisant le système de paquetage *.deb.. Évalué à -5.

    Merci encore pour vos nombreuses réponses et réactions,

    je pense que vous êtes tous plus efficace que lintian dans le but de créer mon premier programme distribuer sous forme de paquetage *.deb et ce n'est pas un sous entendus que ça soit clair c'est un compliment a la communauté Linux.

    J'ai noter toutes vos réactions concernant le sujet et je pense changer quelques points de ma façon de faire avec mon programme et les paquetages *.deb.

    Utiliser un répertoire système pour les ressources de mon programme car c'est possible sous Linux contrairement a Windows d'ou la pratique, du dossier cacher dans le pseudo $HOME (en faîtes .AppData), vient:

    pas possible de changer les droits (personnellement je n'y arrive pas) sous "Programmes Files"… et d'ailleurs je n'ai jamais essayer et essaierai jamais car j'ai débuté sous Linux et je finirai sous Linux.
    Mais comme ont dit l'on en apprends tous les jours.

    Par contre, je suis d'avis que:
    la tache de créer un dossier caché dans le $HOME, si c'est vraiment nécessaire, ne doit en aucun cas revenir au programme, plutôt un sous programme créer pour l'occasion et qui s'efface tous seule après avoir accomplis sa tache car c'est possible, sauf si la performance n'est pas une priorité - pas comme dans un jeu.

    Bon après vos bons conseils et divergences qu'il faut jauger soit même, afin de vous proposer un programme installable sous forme de paquetage *.deb.
    Je vous remercie encore pour votre coopération a mon premier paquetage deb.

    C'est là que je balance le lien pour le programme seulement, j'ai quelques points a changer concernant celui-ci et vous n'y êtes pas étranger.

    Question: êtes vous sur que la software center (Logithèque), ou gdebi, résout le problème d'installation des paquets dont dépend le programme automatiquement ?

    PS: il est vrai que le script postinst est une horreur et sûrement une erreur de débutant, mais il est valide d'après mon amis lintian qui est de cet avis.

  • [^] # Re: merci pour vos réponses.

    Posté par  (site web personnel) . En réponse au message Distributions utilisant le système de paquetage *.deb.. Évalué à -5.

    Merci encore pour vos nombreuses réponses et réactions,

    je pense que vous êtes tous plus efficace que lintian dans le but de créer mon premier programme distribuer sous forme de paquetage *.deb et ce n'est pas un sous entendus que ça soit clair c'est un compliment a la communauté Linux.

    J'ai noter toutes vos réactions concernant le sujet et je pense changer quelques points de ma façon de faire avec mon programme et les paquetages *.deb.

    Utiliser un répertoire système pour les ressources de mon programme car c'est possible sous Linux contrairement a Windows d'ou la pratique, du dossier dans le pseudo $HOME (en faîtes .AppData), vient:

    pas possible de changer les droits (personnellement je n'y arrive pas) sous "Programmes Files"… et d'ailleurs je n'ai jamais essayer et essaierai jamais car j'ai débuté sous Linux et je finirai sous Linux. Mais comme ont dit l'on en apprends tous les jours.

    Par contre, je suis d'avis que: la tache de créer un dossier dans le $HOME, si c'est vraiment nécessaire, ne doit en aucun cas revenir au programme, plutôt un sous programme créer pour l'occasion et qui s'efface tous seule après avoir accomplis sa tache car c'est possible, sauf si la performance n'est pas une priorité pas comme dans un jeu.

    Bon après vos bons conseils et divergences qu'il faut jauger soit même, afin de vous proposer un programme installable sous forme de paquetage *.deb.
    Je vous remercie encore pour votre coopération a mon premier paquetage deb.

    C'est la que je balance le lien pour le programme seulement, j'ai quelques points a changer concernant celui-ci et vous n'y êtes pas étranger.

    Question: êtes vous sur que la software center (Logithèque), ou gdebi, résout le problème d'installation des paquets dont dépend le programme automatiquement ?

    PS: il est vrai que le script postinst est une horreur et sûrement une erreur de débutant, mais il est valide d'après mon amis lintian qui est de cet avis.

  • [^] # Re: merci pour vos réponses.

    Posté par  (site web personnel) . En réponse au message Distributions utilisant le système de paquetage *.deb.. Évalué à -5.

    Euh… attend, pourquoi tu installes des paquets dans les scripts au juste? Si tu en dépends, ils doivent être listés dans le fichier DEBIAN/control, sur la ligne "Depends"!
    Accessoirement, ça permettra aux gens qui suppriment apt-get de pouvoir utiliser ton paquet.

    Je pensais a installer les dépendances pour mon programme (automatiser la tâche),
    car si l'utilisateur cible clique ou exécute (dpkg -i) mon paquetage *.deb il peut soit:

    -) avoir installer les dépendances tout seule dans ce cas pas de soucis mon script teste si les paquets sont installé avant l'appel a apt-get.

    -) Exécuter bêtement le paquet afin d'installer le programme et dans ce cas le test et l'installation sont utile (sous condition d'une connexion internet et disponibilité de apt-get).

    Et que faire si ce n'est pas le cas car le programme ne peut pas fonctionner sans ses paquets.

    En faîte je pensais faire un peu comme apt-get et résoudre les dépendances automatiquement. Toujours est-il que mon paquetage n'est pas disponible sur le net pour l'instant, c'est pas pour rien que je poste dans un forum Linux avant.

    Ce n'est pas un programme emmerdeur, mais un programme qui t'aide à créer des paquets de qualité, chose importante pour les utilisateurs et les mainteneurs.

    Je doit créer un dossier cacher dans le $HOME de l'utilisateur pour les ressources de mon programme et ça a été un vrai calvaire de créer un paquetage valide car:
    -) Utiliser des dossiers personnaliser dans un fichier *.deb qui ne soit pas:
    -) /bin | /usr/bin | /usr/share/bin | et /usr/local/bin
    N'est pas admis par lintian.

    Heureusement que l'on peut exécuter un script…

    Je trouve simplement que lintian est trop stricte et il est vrai que les paquetage se doivent d'être de qualité contrôler mais je répète lintian est trop restrictif car la fenêtre de dialogue avertis que le paquet peut compromettre le système ce qui n'est nullement le cas de mon paquetage et encore moins mon intention. (Ca m'est arriver avec le programme caine: après l'installation j'ai dû formater). Et cette restriction sévère de lintian est une entrave a la liberté des programmeurs Linux qui se dit (et il l'est) être un système libre, car il ne peuvent pas effectuer une tâche comme créer un dossier caché dans le $HOME de l'utilisateur sans passer par un dossier temporaire dans /usr/* …

  • # merci pour vos réponses.

    Posté par  (site web personnel) . En réponse au message Distributions utilisant le système de paquetage *.deb.. Évalué à -5.

    Merci pour vos nombreuse réponses je vais regarder les liens que vous m'avez laisser,
    pour entrer dans la conversation,
    d'abord:

    Mon script Post-Install: le script qui est exécuter après la copie des fichiers d'un paquetage *.deb,
    car c'est un peu comme créer un miroir qui sera installer sur la machine cible.

    Par exemple si ont place des fichiers sous /usr/local/bin/ dans l'arborescence du paquetage *.deb, ceux-ci sont copier dans le dossier /usr/local/bin/ de la machine cible, puis le script Post-Install est exécuter (Il y a aussi Pre-Install, Pre-Remove, Post-Remove)

    Mon script Post-Install Fait appel a des test comme:

      python -m pygtk # Démarrer python en chargeant le module pygtk a usage de test.
      if [[ $? != 0 ]] ; then
        apt-get install python-gtk2
      fi
    

    Du coup si le paquet python-gtk2 n'est pas déjà installé il faut que la distribution cible utilise le système apt-get.
    Sous Ubuntu aptitude n'est pas compris dans l'installation standard…

    Ca fait un problème de compatibilité de plus, bien sur ont peut avoir la présence d'esprit de regarder les paquets dont le programme dépend quand ont installe le paquetage *.deb: c'est pas pour rien que cette information est compris dans le paquetage deb.

    Et puis un paquetage *.deb valide n'est pas aisé a générer, car il existe un programme anmaired'heure qui s'appelle lintian et qui vérifie sévèrement la validité du paquetage *.deb.

    Installerai vous le programme si pendant l'installation une fenêtre de dialogue s'ouvre et vous dit que le paquetage n'est pas valide ?

    Avant je faisait des tarball avec des scriptes d'installation et de désinstallation compatible Ubuntu, mais il faut bien évoluer et le format *.deb en est une pour moi.

    Si vous voulez évoluer je peut vous conseiller le programme DEBREATE dont je connait un tutoriel d'initiation.

    Mais qui ne fait pas tout le travail quand il s'agit de créer un paquetage *.deb valide, je vous laisse vous dépatouiller si vous voulez générer des fichiers *.deb.

  • [^] # Re: Merci pour vos réponses.

    Posté par  (site web personnel) . En réponse au message Installer les distributions maîtresse afin d'élargir mon horizon. . Évalué à -5.

    Merci pour cette réponses pleines de suggestions intéressantes:
    Ma technique d'élaboration de tarball a bien sur évoluer depuis mes débuts:

    c.a.d que dans un tarball (par exemple le prochain)
    il y a:

    -Un README.txt (Je connait le format *.rst mais je n'y ai pas penser pour le README.rst)

    -Les scripts d'installation et de désinstallation

    """ Tu parle de l'outil make mais du peu que j'en sais si je peut automatiser l'installation d'un fichier source python, en C c'est l'outil de compilation mais je le connait que trop peu. """

    installent les sources ou le fruit de la compilation dans le dossier /usr/local/bin/ dont j'estime être la place des programmes externes et créent ou supprime les dépendances comme des images pour un jeu par exemple dans un dossier caché du $HOME de l'utilisateur.

    Et les icônes, README.txt, License sont copier dans un dossier portant le nom du programme dans /usr/share/.

    Puis un fichier *.desktop est créer et finalement ont peut supprimer le contenus de l'archive (celle-ci doit être garder pour une désinstallation) et le programmes est installer sur le système du client.

    -Si le programme a besoin d'une documentation on la trouve dans le README.txt, tu me parle de manpages, je ne suis pas si ambitieux, mais un *.pdf ferait l'affaire je pense, par opposition au fichier *.txt que j'utilisai pour les notices pour les jeux nécessitant une notice a part.

    -Une license est fournis et les fichiers sources comme le README.txt s'y référent.

    PS1: Les gens râles quand je distribue des fichiers python pré-compiler donc je distribue les sources.

    PS2: Concernant les changelogs je n'ai pas besoin de forge sauf pour les programmes que j'estime pouvoir être améliorer pour lesquelles j'ai bien un compte github.

    Merci pour vos réponses.