Contenu | Rechercher | Menus

Annonce

Si vous rencontrez des soucis à rester connecté sur le forum (ou si vous avez perdu votre mot de passe) déconnectez-vous et reconnectez-vous depuis cette page, en cochant la case "Me connecter automatiquement lors de mes prochaines visites".
nombre réponses : 25

#0 Re : -1 »  [PYTHON] Gérer de la musique sans Pygame ? Installer Pygame ? » Le 25/05/2015, à 14:35

grim7reaper
Réponses : 25

Salut,

Si tu ne vises que Linux, tu pourrais passer par GStreamer et son binding Python.
Pour un exemple d‘utilisation tu peux regarder ici (pour la partie wrapping de GStreamer, c’est indépendant de GTK) et (pour l‘appel).

#1 Re : -1 »  /* Topic des codeurs [8] */ » Le 07/04/2015, à 16:20

grim7reaper
Réponses : 2294

Bon, cette fois voilà ma réponse ^^"

The Uploader a écrit :

Très intéressant. Merci Grim' smile

grim' a écrit :

On devrait avoir plus de langages (surtout dans les nouveaux qui sortent) qui traitent les overflow comme des erreurs, comme Ada et Rust par exemple.

J'ai du mal à voir la nouveauté. Java et C# renvoient une exception. C'est ce dont tu parles ?

Java renvoie une exception en cas d’integer overflow ? Tu es sûr de ça ?
Il me semble que ça wrap silencieusement (par contre c’est défini, pas comme en C et C++ où tu as un undefined behavior).

Pour C# idem, rien par défaut (bon ça reste mieux que Java, C# à un mot-clef checked mais bon c’est pas par défaut : c’est la responsabilité du programmeur de l‘utiliser et je suppose que c’est rarement utilisé…).

En Rust et Ada, c’est par défaut (en Ada tu peux même définir des entiers limités (et bien plus encore)).
Ada est vraiment un super langage pour un truc aussi vieux (même s’il continue d’évoluer et de s‘enrichir, la plupart des bonnes idées était là depuis les débuts). Le Hibou en faisait vraiment une publicité déplorable…
Rust aussi est super intéressant (mais il est plus récent aussi, donc il peut directement partir dans les nouveauté sans s’encombrer de retro-compatibilité).

The Uploader a écrit :

Je suis tombé là dessus aujourd'hui, comme ici on désigne souvent Automake comme Autohell j'étais curieux de savoir le retour :
Switch from CMake to Autotools

Bon perso je n'utilise ni CMake ni Autotools...

En effet, la migration dans ce sens est plutôt rare.
Cela dit :
- Cmake peut avoir une target uninstall (c’est pas par défaut, c’est vrai)
- il est portable aussi (même sur Windows, alors que les autotools…) et il laisse le dev’ utiliser ce qu’il veux (ça te génère du Makefile, du fichier de projet Visual, CodeBlock, KDevelop, …)
- ça gère aussi la traduction (Rolinh l’a fait pour dfc) et la documentation (Doxygen c‘est quelques lignes dans ton CMakeList.txt).

Mais bon, CMake a ses défauts aussi, c’est bien vrai (mais l’article ne les aborde pas vraiment j’ai l’impression).

#2 Re : -1 »  /* Topic des codeurs [8] */ » Le 08/04/2015, à 21:10

grim7reaper
Réponses : 2294
The Uploader a écrit :

Ouais, le bound-checking c’est assez standard de nos jours (et Ada le faisait déjà en 1983).
Ça commence même à arriver dans le hardware via Intel (mais bon, c’est lourd : il faut adapter le noyau, le compilateur, …).

The Uploader a écrit :

Intéressant. S'il faut choisir en Autotools et CMake pour un projet Qt, je prendrais CMake.

Il me semble que CMake s’utilise assez bien avec Qt (KDE est passé à CMake il me semble).

#3 Re : -1 »  /* Topic des codeurs [8] */ » Le 25/05/2015, à 15:47

grim7reaper
Réponses : 2294

Ça semble intéressant mais y’a pas moyen d’avoir au moins les slides en PDF ?
La vidéo ne se lance même pas chez moi donc bon, dommage.

Édit : ha, c’est bon.
Bon bah je regarderais quand j’aurais le temps (j’ai les vidéos de Bret Victor à finir d’abord, pour le moment j’ai vu que « Stop Drawing Dead Fish »).

#4 Re : -1 »  SageMath: Logiciel d'algèbre informatisé » Le 13/05/2015, à 15:00

grim7reaper
Réponses : 29

Salut,

Tu peux essayer bc : il fonctionne avec des nombres de taille arbitraire, il a les fonctions de base (mise à la puissance, racine carré, trigo, exp, log, …).
Bon, par contre il ne gère pas l’écriture scientifique et n’affiche pas de barre de progression hmm

Quels logiciels as-tu essayé jusqu’à maintenant ?

Sinon, à priori Python, Ruby, Haskell (les langages qui utilisent GMP en fait) devrait pouvoir faire ce genre de calcul.

#5 Re : -1 »  SageMath: Logiciel d'algèbre informatisé » Le 13/05/2015, à 15:29

grim7reaper
Réponses : 29

Par le terminal :

sudo apt-get install bc

Sinon, cherche bc dans le gestionnaire de paquet que tu utilises (la logithèque ou autre).

#6 Re : -1 »  SageMath: Logiciel d'algèbre informatisé » Le 13/05/2015, à 16:21

grim7reaper
Réponses : 29

Déjà il fait charger bc avec la bibliothèque mathématique

bc -l

Ensuite :

man 1 bc a écrit :

s (x)  The sine of x, x is in radians.

c (x)  The cosine of x, x is in radians.

a (x)  The arctangent of x, arctangent returns radians.

l (x)  The natural logarithm of x.

e (x)  The exponential function of raising e to the value x.

j (n,x) The Bessel function of integer order n of x.

Il n’y a pas la factorielle par contre. Et je n’ai pas l’impression qu’il y ai de constantes prédéfinies (genre pi et e) non plus (bon au pire e = e(1)).

#7 Re : -1 »  Debugger OpenCL » Le 13/05/2015, à 14:53

grim7reaper
Réponses : 1

Salut,

J’ai téléchargé l’archive et chez moi le programme se lance bien.
Est-ce que ton système est 64-bit ?

#8 Re : -1 »  [C++] Loi de Déméter » Le 09/05/2015, à 09:47

grim7reaper
Réponses : 5
Destroyers a écrit :

Imaginons une classe Personnage ayant un attribut Arme. la classe Arme possède un attribut std::string name.
Imaginons maintenant une classe gui qui affiche mon jeu.
Le problème: comment afficher le nom de l'Arme ? gui a besoin de récupérer l'Arme de mon personnage, mais je ne peux pas créer d'accesseur getArme() dans mon Personnage (selon ce que je viens de citer).
Je ne peux pas non plus créer getArmeName() non seulement par ce que c'est encore un accesseur mais en plus par ce que Personnage utiliserait un attribut de Arme (ce que la loi de Déméter interdit aussi).
Comment afficher le nom de l'Arme via ma classe gui ? Comment le récupérer ?

Je pense qu’il y a deux solutions ici :
- soit la classe GUI n’a pas besoin de connaître la classe Arme, dans ce cas la classe Personnage pourrait fournir ce qu’il faut via une méthode getDescription par exemple (qui renverrait une description du personnage, de son arme, son équipement…)
- soit la classe GUI a besoin de connaître la classe Arme et dans ce cas pourrait intéragir directement avec, sans passer par Personnage.

Destroyers a écrit :

Ce problème est également ennuyeux si mon Personnage a un attribut Sprite. Impossible d'appeler Personnage.getSprite() pour utiliser Sprite.setPosition() ou Sprite.draw(), alors de quelle manière dessiner mon sprite ?
Peut être est-ce la conception même de mes classes qui n'est pas bonne ? Aidez moi :3

La classe Personnage pourrait avoir une méthode move et draw, non ?
Ainsi, l’utilisation d’un sprite serait transparente (après tout, c’est un détail interne).

Destroyers a écrit :

J'ai une autre question à ce sujet:
Si Personnage a un attribut int vie, vu que ce n'est pas un objet, la loi de déméter m'autorise-t-elle à créer un accesseur getVie() ?

Déjà, d’une manière général tu n’as pas besoin de fournir automatiquement des accesseurs (et encore moins des setters) pour chaque attributs (on voit souvent ça en Java malheureusement), sinon il n’y a aucune encapsulation au final…
Si tout ce que tu as besoin de savoir par rapport à la vie c’est si le perso est mort, tu peux avoir une méthode isAlive par exemple.

Enfin, dernier conseil : n’hésites pas à aller sur forum C++ de developpez.com car ils ont des gens qui s’y connaissent très bien en C++ et POO.

#9 Re : -1 »  [C++] Loi de Déméter » Le 12/05/2015, à 05:27

grim7reaper
Réponses : 5
Destroyers a écrit :
alius a écrit :

ton objet arme doit implémenter une interface dans le genre affichable qui déclare une méthode afficheNomArme() et qui a pour principe d'afficher le nom de l'arme dans le gui.

grim7reaper a écrit :

La classe Personnage pourrait avoir une méthode move et draw, non ?

Ce que vous dites est intéressant, mais dans ce cas mes classes ne respectent plus la loi de responsabilité unique, ce qui poserait des problèmes de d'entretien du code.

Exact, mauvaise solution.

Destroyers a écrit :
grim7reaper a écrit :

Déjà, d’une manière général tu n’as pas besoin de fournir automatiquement des accesseurs (et encore moins des setters) pour chaque attributs (on voit souvent ça en Java malheureusement), sinon il n’y a aucune encapsulation au final…

Ne t'en fais pas je ne fais pas un accesseur par attribut. wink

C’est bien alors, car c’est une mauvaise pratique assez courante malheureusement.

Destroyers a écrit :

Je demande juste si d'une manière générale cette loi nous autorise à faire des accesseurs sur des types de base. j'ai donné ici l'exemple de la vie mais il peut en être de même pour le mana, la vitesse de déplacement, ou même le nombre d'instances de son contenues dans un soundCache.

La loi de Demeter n’interdit pas de fournir des accesseurs, mais elle interdit de les chaîner.

Destroyers a écrit :
grim7reaper a écrit :

- soit la classe GUI n’a pas besoin de connaître la classe Arme, dans ce cas la classe Personnage pourrait fournir ce qu’il faut via une méthode getDescription par exemple (qui renverrait une description du personnage, de son arme, son équipement…)

Passer par une classe pour accéder à une autre est justement ce que je cherche a éviter pour respecter la loi de Déméter.

Non, le fait qu’une méthode de la classe Personnage fasse appel à une méthode de la classe Arme est OK, car la loi t’autorise à appeler les méthodes de tes variables membres.
Donc tu peux tout à fait avoir une méthode Personnage.getDescription() qui va appeler les méthodes de Arme.

Destroyers a écrit :
grim7reaper a écrit :

- soit la classe GUI a besoin de connaître la classe Arme et dans ce cas pourrait intéragir directement avec, sans passer par Personnage.

C'est exactement ce que je cherche à faire big_smile
Mais c'est là que je ne sais pas comment faire... puisque mon Arme est dans mon Personnage hmm
C'est là que je demande de l'aide ^^

Je pense que si ta classe GUI a une méthode void display(const Arme& weapon) et que tu l’appelles via

GUI.display(perso.getArme())

Ça devrait être OK, car dans la méthode display tu pourras accéder aux méthodes et attributs de la classe Arme (car c’est un objet passé en paramètre)
De plus, maintenant, si un jour l’Arme n’est plus dans la class Personnage, ça n’impactera pas le code de la classe GUI (il faudra seulement changer l’appel), donc tu évites le couplage.

#10 Re : -1 »  [C++] règles de programmation objet [RESOLU] » Le 23/04/2015, à 13:05

grim7reaper
Réponses : 9

Salut,

Pour moi, un fichier serait représenté par une classe à sémantique d’entité.

Destroyers a écrit :

Étant donné que j'ai du redéfinir mon destructeur, ma classe possédant un pointeur, selon  la règle des grands trois (Big rule of three), je devrais aussi redéfinir le constructeur de copie et l'opérateur d'affectation... Si ma classe a une sémantique de valeur, ce que je n'arrive pas à déterminer...

Premier point : la « règle de trois » en C++ n’est pas absolu (mais c‘est une bonne indication), il ne faut pas l’appliquer à l’aveugle.

https://en.wikipedia.org/wiki/Rule_of_three_%28C%2B%2B_programming%29 a écrit :

The rule of three (also known as the Law of The Big Three or The Big Three) is a rule of thumb in C++ (prior to C++11) that claims that if a class defines one of the following it should probably explicitly define all three.

En C++11 c’est même devenu « règle de cinq ».

Deuxième point : le fait de définir explicitement ces trois opérateurs ne fait pas de ta classe une classe à sémantique de valeur. Cela va dépendre de comment tu les définis.
Par exemple, pour une classe à sémantique d’entité tu peux les définir explicitement comme étant non utilisable (depuis le C++11 c’est très simple).

#11 Re : -1 »  [C++] règles de programmation objet [RESOLU] » Le 23/04/2015, à 15:41

grim7reaper
Réponses : 9
Destroyers a écrit :

Ah merci ton lien m'apprend un truc utile.
C'est vrai que je vois mal l'utilité de copier un objet issu de cette classe ... je vais de ce pas me contenter de supprimer la définition du constructeur de copie et l'opérateur d'affectation.
En revanche, ma classe est dérivée 4 fois:
Basic_File ==> File ==> KeyWordFile ==> GroupedKeyWordFile
du coup... dois-je mettre ces fonctions en virtuel ? dois-je les réécrire dans chaque classe ?

Il me semble qu‘il est inutile d’utiliser virtual ici.
Non, pas besoin de les réecrire dans les classes filles tant que tu ne redéfinis pas ces fonctions. Les implémentations par défauts vont appeler les fonctions de la classe parente (fonctions qui n’existent pas) et donc tu devrais bien avoir une erreur à la compilation.

Destroyers a écrit :

Tu parles de règle de cinq, tu pourrais me dire quelles sont ces 5 méthodes maintenant ? wink

Elles sont dans la page Wikipedia que j‘ai cité, les deux nouvelles méthodes sont lièes à la move semantic.

Destroyers a écrit :

Et au delà de ça, pour m'aligner avec le titre du topique, où pourrais-je trouver un condensé des règles de programmation orientée objet (en Français) ?

Le blog d’Emmanuel Deloget contient d’excellent articles à ce sujet, dans la catégorie « Architecture Orientée Objet ». Il y présente, entre autres, les principes de bases que sont la loi de Déméter et S.O.L.I.D.

#12 Re : -1 »  python: arrêter un thread » Le 25/04/2015, à 10:58

grim7reaper
Réponses : 11

Salut,

Arrêter un thread n’est pas quelque chose d’anodin (il peut-être au milieu d’une opération critique), c’est pour cela qu’il n’y a pas de façon simple et sûre dans 100% des cas. Le mieux étant que le thread se termine de lui-même.
Sinon, je n’ai pas l’impression que les threads soit la meilleure solution à ton problème.

Qu’essaye tu de faire exactement ?

#13 Re : -1 »  python: arrêter un thread » Le 27/04/2015, à 20:24

grim7reaper
Réponses : 11

Ok, merci pour les détails.

Je pense que le problème vient de la méthode run qui « bloque » le thread.
Pour vérifier cette hypothèse, tu pourrais ajouter un print après l’appel à run et voir si quelque chose s’affiche.

#14 Re : -1 »  python: arrêter un thread » Le 28/04/2015, à 10:25

grim7reaper
Réponses : 11

Salut,

Je pense qu’il va vraiment falloir appliquer les conseils du lien de la FAQ que tu m’avais donné. C’est la source de tout tes problèmes.
Parmis ce qui est proposé, dtach me semble le plus simple à utiliser.
Quelque chose dans ce genre là peut-être :

run("dtach -n /tmp/cvlc_bg -Ez cvlc {} & echo $! > PID1.txt".format(self.IP_multicast[0]))

#15 Re : -1 »  python: arrêter un thread » Le 25/04/2015, à 19:55

grim7reaper
Réponses : 11

Ok.

Tu as vraiment besoin d’avoir un thread qui tourne en permanence ?
Parce que si tu veux seulement lancer VLC, tu peux le faire dans un processus à part (je te conseille de jeter un coup d’œil au module subprocess (qui contient la classe Popen), ça devrait t’intéresser).

Si tu dois vraiment passer par des threads, il faudrait s'assurer que la fonction qui est lancé par ton thread se termine d’elle-même à un moment. Selon la doc’ ça devrait résoudre ton problème :

https://docs.python.org/3/library/threading.html#thread-objects a écrit :

Once a thread object is created, its activity must be started by calling the thread’s start() method. This invokes the run() method in a separate thread of control.

Once the thread’s activity is started, the thread is considered ‘alive’. It stops being alive when its run() method terminates – either normally, or by raising an unhandled exception. The is_alive() method tests whether the thread is alive.

#16 Re : -1 »  python: arrêter un thread » Le 27/04/2015, à 13:18

grim7reaper
Réponses : 11

Salut !

D’où vient la fonction run que tu appelles dans callback1E ?
Normalement, si cette fonction run se termine (je ne connais pas cette fonction mais je suppose qu’elle va se terminer quand avconv est stoppé ou tué) alors callback1E va se terminer et ton thread devrait disparaître.
Si avconv n’est jamais arrêté, alors je suppose que la fonction run ne se termine pas non plus (et donc ton thread va continuer d’exister).
En plus, comme le thread est occupé en dehors de l’interpréteur Python (il exécute une commande externe) ça pourrait expliquer que tu ne puisses pas le stopper même via _Thread__stop).

totola a écrit :

Mais du coup je pourrais utiliser subprocess dans ce cas-là??

Pour la commande en locale (cvlc dans ton exemple) oui. En plus, en passant par Popen tu pourrais même faire un kill du process sans avoir à passer par un fichier PID externe
Pour la commande via SSH, ça devrait être possible (à vérifier).

#17 Re : -1 »  [C++] Compiler avec gcc un programme utilsant la SDL2.0 » Le 26/04/2015, à 11:42

grim7reaper
Réponses : 2

Salut,

Ici :

main.o : main.cpp fonctions.cpp
	g++ -c main.cpp  -o main.o  `sdl2-config --cflags --libs`

tu compiles le fichier, tu as seulement besoin de --cflags je pense.

Là :

Programme : main.o fonctions.o
	g++ main.o fonctions.o -o Programme

Tu fais l’éditions des liens, tu auras donc besoin des bibliothèques.

Du coup, ton Makefile serait :

Programme : main.o fonctions.o
	g++ main.o fonctions.o -o Programme `sdl2-config --libs`
main.o : main.cpp fonctions.cpp
	g++ -c main.cpp  -o main.o  `sdl2-config --cflags`
fonctions.o : fonctions.cpp
	g++ -c fonctions.cpp -o fonctions.o

#18 Re : -1 »  Je ne trouve pas mes fichiers Windows » Le 22/04/2015, à 10:52

grim7reaper
Réponses : 1

Doublon : merci de continuer ici.

#19 Re : -1 »  [Information] Python 3.4.0 : built-in function hash » Le 21/04/2015, à 09:05

grim7reaper
Réponses : 2

Salut,

C’est tout à fait normal, je te rassure. Depuis Python 3.3, la hash randomization est activé par défaut.

https://docs.python.org/3/whatsnew/3.3.html a écrit :

Security improvements:

    Hash randomization is switched on by default.

Tu peux la désactiver (ou l'activer pour les versions précédentes) via la variable d’environnement PYTHONHASHSEED.

Exemple :

% PYTHONHASHSEED=$(date +%s) python3 -c "print(hash('0'))"

Pourquoi cette randomization ?

Comme la release note l‘indique, c’est pour des raisons de sécurité. C‘est lié à un type d’attaque bien particulier (hash flooding), qui existe au moins depuis 2003.
Son principe est simple et consiste à générer artificiellement des collisions dans les tables de hachage pour les ralentir (jusqu‘a obtenir un déni de service dans le cas d’une application Web).
Ça avait été discuté ici (si l‘anglais ne te dérange pas, il y a la présentation faite par l’auteur ici, ou une autre des auteurs de SipHash).

En conséquence, la plupart des langages affectés ont remplacé leur fonction de hash par SipHash (comme Perl et Python par exemple) et ont ajouté de la randomization.

#20 Re : -1 »  [Python] Changer la version de python » Le 21/04/2015, à 09:21

grim7reaper
Réponses : 4

Salut,

Il est probable que cela pose problème en effet.

Cela dit, Python 2 et Python 3 peuvent être installé en parallèle sur ton système (il suffit d‘installer le paquet python3, qui ne remplacera pas le paquet python). Tu peux ensuite utiliser celui que tu veux pour développer (et les applications systèmes utiliseront ce dont elles ont besoin).

Une autre solution, selon tes besoins, serait d’utiliser virtualenv.

#21 Re : -1 »  INFECTION VIRUS yxo.warmportrait » Le 08/04/2015, à 13:05

grim7reaper
Réponses : 78
moko138 a écrit :

Merci à Robinwood et à nam pour leurs explications.

Il y a beaucoup plus léger que uzbl - que j'essaye d'apprivoiser, merci libc6, mais c'est vraiment pas intuitif - c'est elinks d'où je réponds en cette ce moment.

En plus léger que uzbl (mais tout en restant graphique, pour le texte je préfère w3m), je vous conseille surf (de suckless, les même qui font dwm, dmenu, …)

#22 Re : -1 »  Professeur » Le 15/04/2015, à 18:28

grim7reaper
Réponses : 10

Salut,

Je te conseille de jeter un œil à cette discussion.

#23 Re : -1 »  dernier espoir avant mise au rebut-pb CG nvidia gtx 260m » Le 15/04/2015, à 10:35

grim7reaper
Réponses : 2

Doublon. Merci de continuer la discussion ici.

#24 Re : -1 »  Quel langage ayant un lien avec Linux ? » Le 07/04/2015, à 15:42

grim7reaper
Réponses : 15
claudius01 a écrit :
grim7reaper a écrit :

...Un langage vient avec sa « philosophie » (c’est pas le bon mot, mais j’arrive pas à retrouver le mot qui va bien).

Ce mot ne serait-il pas le paradigme.

Nope, c’est plus large que ça.
Le paradigme c’est « impératif », « logique », «objet », « fonctionelle », …
Même deux langages qui permettent d’utiliser le même paradigme peuvent avoir une « philosophie » différente (Python et Ruby sont tout deux des langages dynamiques qui supportent le paradigme objet, et pourtant leur philosophie est très différente).