Se connecter
Se connecter

ou
Créer un compte

ou
Agrandir
Les Mains dans le Cambouis
Bidouille & Développement Informatique

Sujet Le pub des programmeurs

  • 1 925 réponses
  • 117 participants
  • 122 529 vues
  • 130 followers
Sujet de la discussion Le pub des programmeurs
Salut :coucou: y a des programeurs sur AF si oui vous bossez sous quoi ?
Afficher le sujet de la discussion
171
Bonsoir,
Bon je vais casser un peu la conversation désolé :oops2: moi je cherche des document, en francais et de préférence s'adressant à un publique débutant sur la programmation et l'exploitayion du Z80A merci ;)
172
173

Citation : je trouve que le coup de l'indentation en Python est un super choix


oue mais du coup finis les joie du code C sur une ligne incompréhensible.... :bravo:
174

Citation :
Clair que une fois que tu as goûté à Perl ou Python, tu te sers plus de awk sed et autres shell scripts...



Au depart, je me disais que c'etait plus portable d'utiliser awk ou sed, parce que c'est present partout... Puis j'ai realise que sous windows, bof bof. En fait, python est utilise par de plus en plus d'admin sous windows en remplacement de cmd.exe qui faut bien l'avouer, est une vraie merde.

Citation :
C'est d'ailleurs sûrement l'une des raisons qui lui ont permis de grignoter Perl, lequel est moins bien (je trouve que le coup de l'indentation en Python est un super choix) mais arrivé avant (et donc initialement beaucoup plus populaire)...



Je connais pas vraiment perl, j'ai du faire quelques lignes de programme, difficile de juger. Je supporte pas la syntaxe au premier abord en tout cas. Python, j'ai maintenant programme des trucs de l'ordre du millier de lignes, suffisant pour voir un peu les capacites.

Deja, il y a l'interpreteur ipython, qui rend les choses vraiment sympa, car il utilise pas mal les capacites d'introspection du langage:

- help fonction -> tu as la docstring (docstring, c'est la premiere chaine de charactere suivant la declaration d'une fonction, qui permet la documentation automatique du code).
- completion de commande
- coloration, gestion du graphique
- interface avec le shell systeme (ie bash sous linux ou OS X, cmd sous windows j'imagine)

http://ipython.scipy.org/screenshots/index.html

Pour l'interfacage avec le C, il y a enormement de possibilites:
- l'API python: un peu chaud a cause de la gestion du reference counting
- SWIG
- boost-python: assez baleze, il utilise les trucs imbitables du C++ "moderne" avec template pour generer automatiquement les modules python
- pyrex: langage entre le C et python, qui permet de generer ensuite du C. C'est assez pratique
- ctypes: le plus recent. La, c'est carrement genial, car tu ecris tout le wrapper en python directement. Par exemple, dans mon cas, je veux souvent ecrire des fonctions C qui prennent en argument des vecteurs, matrices, etc... Par exemple, une fonction double sum(const double*, size_t ndim, const size_t* dim) definie dans une librairie libfoo.so.

Sous python + ctypes, ca donne:

from ctypes import cdll, c_double, c_uint, POINTER

_foo = cdll.LoadLibrary('libfoo.so')
def sum(data):
_foo.sum(data.ctypes.as_data(POINTER(c_double)), data.ndim, data.shape.ctypes.as_data(POINTER(c_double)))

Aucune compilation a faire, 4 lignes, et tu as wrappe une fonction qui prend des tableaux en arguments ! Et si les arguments sont pas bon, gestion par exception. Quand tu vois la merde pour faire la meme chose sous matlab (en gros, il faut au moins 40 lignes de code en C, dont les 3/4 pour la gestion d'erreur).
175

Citation :
Je connais bien ces problèmes avec les VSTs mais il n'existe pas vraiment d'alternative non plus. Du coup, le fait de prototyper en python vient de perdre beaucoup d'intérêt d'un coup



Il y a par contre un wrapper pour ladspa (utilisant gstreamer), qui permet donc de tester le moteur audio au moins.

Je viens juste de tester le truc pour un de mes projets, et si tu as un plugin ladspa, il suffit de faire:

gst-launch-0.10 filesrc location=/home/david/Desktop/lux_club_house_mix_2.mp3 ! mad ! audioconvert ! ladspa-delay-5s ! audioconvert ! alsasink

pour tester ton plug de delay sur un mp3 !
176
Je suis d'accord, python c'est bien pratique. Néanmoins pour l'audio, je pense que c'est pas (encore) adapté car pas de wrappeur. En C++, il y a également une foultitude de libraries de calcul numérique, donc le prototypage peut aussi bien sur faire directement en C++. En plus ça tombe bien je me suis super habitué au C++ ;)

Edit: chui sur windows on aura compris donc LADSPA et CoreAudio ça me va pas :bravo:
177

Citation : Je connais pas vraiment perl, j'ai du faire quelques lignes de programme, difficile de juger. Je supporte pas la syntaxe au premier abord en tout cas.


Ben en partant de zéro, il vaut clairement mieux choisir Python. Mais les caractéristiques et qualités des deux sont suffisamment proches (prototypage rapide, portabilité, librairies riches...) pour que connaissant bien l'un on ne soit pas hyper motivé pour découvrir l'autre.

L'une des premières appplis célèbre en Python a été le gestionnaire de package de Red Hat (le versions initiales au moins, parce-que ça a peut-être bien été ré-écrit en C ou C++).

Citation : Néanmoins pour l'audio, je pense que c'est pas (encore) adapté car pas de wrappeur.


Et puis au niveau perfos ça doit être assez loin quand même.

Faudrait plutôt du Caml ou du Objective-Caml pour ça. Quasiment la simplicité de langages de script, et plus rapide que du C...
:mrg:

(A noter que Microsoft en a dérivé F#.)
178

Citation :
Je suis d'accord, python c'est bien pratique. Néanmoins pour l'audio, je pense que c'est pas (encore) adapté car pas de wrappeur



Tu peux le faire toi meme. Surtout que le VST est code en C avec wrapper C++, ce qui devrait permettre un wrapping plus facile (par exemple, python::boost ?)

Citation :
En C++, il y a également une foultitude de libraries de calcul numérique, donc le prototypage peut aussi bien sur faire directement en C++.



?? :???: Pour moi, le C++ est le pire langage possible pour le prototypage.

- Compilation hyper lente, surtout si t'utilises les templates (stl, boost).
- Le C++ n'a pas de verification d'acces aux bornes, necessite de gerer la memoire, etc...
- Le C++ n'a pas de structure evoluee. Il y a bien la STL ou boost, mais c'est quand meme hyper lourd, c'est super facile de faire des erreurs, et changer de structure en cours de route est penible (ce qui est l'oppose de la contrainte de prototypage).
- Le C++ est difficilement scriptable.
- C'est penible de rentrer et de sortir des donnees structurees en C++.

Typiquement, j'avais implemente une librairie en C pour du calcul statistique, ca m'a pris 1 bon mois en comptant les tests sur les differentes plateformes. En C++, ca aurait ete pareil, je pense. Par exemple, ecrire un programme test prenant en entree des donnees structurees type matrices, listes de vecteurs, et sortant le meme types de donnes, c'est penible, ca prend a chaque fois vachement de temps, meme en utilisant des librairies specialisees (par exemple hdf5), et c'est quelque chose dont tu as besoin souvent pour tester la validite de tes calculs.

En python, ca m'a pris 1 journee pour le truc de base, 2 de plus pour le packaging en utilisant un truc que je connaissais pas, plus 1 demi journee pour refactoriser le code.

Citation :
Ben en partant de zéro, il vaut clairement mieux choisir Python. Mais les caractéristiques et qualités des deux sont suffisamment proches (prototypage rapide, portabilité, librairies riches...) pour que connaissant bien l'un on ne soit pas hyper motivé pour découvrir l'autre.



En perl, il y a pas scipy, ce qui fait toute la difference pour moi, quand meme.

ocaml, j'ai clairement envie de m'y mettre un jour; la dualite interprete/compile me plait beaucoup. Avec LISP et haskell, ce sont les 3 langages qui ont l'air de vraiment permettre d'autres manieres de programmer (et qui soient suffisament populaires pour permettre de faire des choses interessantes). Il y a aussi erlang qui a l'air rigolo pour tout ce qui est programmation parallele.

Le C m'a appris le fonctionnement de base d'un programme (gestion memoire, entre autre), le C++ comment ne pas programmer, le python comment reellement utiliser des structures types liste/hash, comment utiliser des meta-classes.
179
J'aime Boost et la STL, peut-être que c'est lent, mais qu'est-ce que c'est efficace !
Le module Boost.Python, je vais sans doute m'y mettre comme j'ai envie de me mettre à Python - et comme il y a des bindings avec un peu presque tout, c'est génial ! -
Vérification d'accès aux bornes : t'as jamais utilisé la STL correctement ;)
Gestion de la mémoire : t'as jamais utilisé les pointeurs intelligents ;)
Pas de structure évoluée : :???: :oo: Tu veux quoi ? Y'a presque tout ce qu'il faut au niveau modularité et réutilisabilité, comme pour tous les autres langages orientés objet
C'est clair que le scriptage, c'est :|, d'où Python :)
Pénible de rentrer sortir des données structurées ? Par rapport à quel langage ?
J'ai aussi conçu des bibliothèques de calcul, le temps utilisé est surtout dû à mon manque d'architecture et de direction au départ, maintenant j'utilise tout ce que j'ai fait facilement !
180

Citation :
Vérification d'accès aux bornes : t'as jamais utilisé la STL correctement



Il y a pas une structure standart pour faire du calcul rapide en C++. valarray a jamais marche, vector est trop lent, tu peux faire un truc qui par exemple change le .at() de vector en [] selon des options de compilation, mais bon, recompiler pour changer ca, genial... Il y a des trucs du genre blitz++, mais c'est ultra lourd, et je trouve la syntaxe des template affreuse en general. J'aime bien relire ce que j'ai fait 6 mois apres, et les template, niveau facilite de lecture, c'est quand meme pas le top.

Citation :
Gestion de la mémoire : t'as jamais utilisé les pointeurs intelligents



Bouah, t'inquiete, smart pointer, tout ca, je connais. Tu peux pas tout simplement pas comparer a un langage ou la gestion est faite pour toi. Il y a a peu pres personne de sain d'esprit pour pretendre que la gestion memoire n'est pas un truc ultra-penible, complexe, et terrible en consequence sur le temps de programmation. Dans certains cas, ca peut etre necessaire, mais dans la plupart des cas, ca l'est plus. smart pointer, il y a tous les trucs bien penibles a prendre en compte parce que tu peux pas copier, tu peux pas utiliser sur les containers alors faut utiliser autre chose, etc... J'ai pas envie de me prendre la tete la dessus quand je veux implementer un nouveau algo de stats que je ne connais pas.

Citation :
Pas de structure évoluée : Tu veux quoi ? Y'a presque tout ce qu'il faut au niveau modularité et réutilisabilité, comme pour tous les autres langages orientés objet



Y a pas de listes, de hashmap, de possibilite de meta-classes. Il y a pas de librairie standard pour le graphique, il y a meme pas de standard pour le multi-threading ! Compare a python, par exemple, qui permet facilement de gerer de multiples protocoles reseaux, qui a une librairie de strings unicode, une lib GUI de base, etc... Le C++ te donne rien, c'est comme le C, en fait, que des trucs ultra basiques.

Niveau dynamique, y a rien (RTTI est une blague, je crois d'ailleurs que pas grand monde l'utilise). C++ reussit quand meme le tour de force d'etre un langage ultra complexe tout en utilisant que des concepts ultra simples. Il y a pas de doc automatique.

Un exemple: disons que pour mon truc statistique (EM pour melange de gaussiennes), j'ai un ensemble de fonctions pour faire les differents calculs. Je veux essayer plusieurs architectures. En python, c'est facile de changer, je suis sur que je vais pas avoir un probleme subtile en reassemblant mes fonctions en classe. Je realise qu'utiliser des hash serait plus approprie que des listes, c'est facile a faire. La STL te permet pas de faire ca (je trouve que l'independance container/algo est surfaite. Concretement, si t'as un code qui utilise la STL, tu peux pas changer facilement de container rien qu'en remplacant list<int> a par vector<int>. Par exemple, l'utilisation du sort est differente).

Plus theoriquement, le C++ est tres difficile a parser correctement, et ca rend le refactoring automatique pour ainsi impossible.

Citation :
Pénible de rentrer sortir des données structurées ? Par rapport à quel langage ?



Par rapport a tous les autres ? :) Par exemple, disons que tu as ecris une fonctions qui calcule une densite de probabilite gaussienne multivariee. Tu veux tester differents cas (matrices spheriques, diagonale, pleines) en comparant avec ton proto matlab. Pour echanger les donnes, ca prend du temps (j'utilise en general hdf5) a programmer. Faut verifier les bornes a nouveau, verifier que les donnees sont celles que tu attends, etc... En python, charger un vecteur multi dimensionnel prend une ligne, et ce quelque soit le type du vecteur, son rang, etc...

Non franchement, avant, j'etais beaucoup matlab + C++. Depuis un an, je suis beaucoup plus python + C, et je me trouve a faire plus de science, moins de trucs a la con en programmant. Comme python possede en standard des outils de packaging, je sais que je peux recopier mon environnement facilement sur un autre ordi (matlab est une merde pour ca, je parle meme pas du C++ evidemment qui exige makefile et autre horreurs).


Alors apres, une fois que tu veux faire une grosse appli, Ok, le C++ s'impose pas mal (quoique, je coderais certainement plus jamais un truc 100% en C++) pour certains types d'applis, mais pour ce que je fais a 90% du temps...

L'autre truc plus lequel le C++ est pas mal je pense, c'est pour utiliser tous les trucs a la mode style template pour faire "middleware" entre C et un langage "haut niveau" comme python ou autre chose. Un truc comme boost::python est par exemple extremement interessant: ca permet de remplacer les parties lentes en python par du C/C++ au fur et a mesure, en gardant dans une certaine mesure la flexibilite de python.