Dans le même temps, je suis horrifié par le code des outils de la Mandrake, *objectivement* très peu documenté et lisible. Ça me fait sincèrement chier de voir l'effort nécessaire pour les maintenir, à côté des outils de la Fedora, certes pas aussi avancés mais limpides à parcourir, et en plein boom.
Pour Fedora, on verra ce que ça donnera, mais jusqu'à présent les outils d'aide à la configuration de Mandrake sont plus nombreux et plus puissants alors que les développeurs sont moins nombreux (ils sont un peu plus buggés je le concède, mais globalement ils marchent très bien).
Maintenant, la question de la documentation du code ne se résume pas à un principe qui tient en deux lignes. En particulier, il faut tenir compte du niveau du/des programmeurs, du taux de "turnover" dans l'équipe de développement (Mandrake c'est pas une SSII), du style qu'adopte une équipe de développement (en connaissant le style on comprendra mieux le code), du besoin de maintenance et d'ajout de fonctionnalité du code (il n'est pas le même dans chaque code/projet : par exemple ce que tu documenteras le mieux sera l'API, les exemples de plugin). Bref, mon point de vue sur la question s'étale en anglais ici :
Et sur ce je vois ton journal, dont le ton est, sinon agressif, très provocateur : une merveille d'un côté, quelque chose de forcément bien plus long et plus chiant en Python de l'autre... avoue que tu y es pas allé de main morte !!
Euh ce n'est pas parce que mon journal est provocateur (mais pas insultant à part peut-être "chiant" mais bon faut pas pousser) que j'ai le droit de me prendre : "t'as gagné t'es le meilleur" "un super pro comme toi" (plusieurs fois) "trucs plus importants à faire" "un demi-dieu comme toi" "bravo champion" bon j'arrête mais bon tu situes : au premier ça va je rigole, au deuxième je me dis que t'as l'air chaud, au cinquième j'en ai franchement marre.
je suis absolument persuadé que ce que tu prônes, c'est pour moi un exemple à ne pas suivre.
Je ne prône que l'utilisation d'un langage de script élégant et puissant pour les "petites tâches vite fait", rien de plus, dans cet article tout du moins. Je sais que le code ci-dessus est illisible, mais son propos n'est pas d'être relu et encore moins d'être conservé ; c'est juste d'avoir un outil permettant de faire rapidement une tâche unique.
dis-moi ce que tu penses de l'équivalent en python... tu n'es pas tenté ?
Non. Python pour moi a des avantages indéniables, mais ils sont massacrés par trop d'erreurs. Je te liste les plus importantes que j'ai découvertes lors de mes essais (parfois forcés) avec Python :
fonctions anonymes castrées
On se trouve relativement souvent en face d'une situation dans laquelle on veut appliquer une transformation assez simple à un ensemble de données, et les fonctions anonymes sont indispensables pour pouvoir le faire élégamment (elles le sont aussi entres autres pour brancher un callback dans un système de programmation évenementielle).
Par exemple, j'ai une liste d'entiers, je veux obtenir à la fois la somme de ceux-ci, et la liste avec les entiers doublés. En Perl on le fait comme cela :
Ca pourra te paraître imbitable si tu ne connais pas le Perl et sa variable implicite $_, mais une fois que l'on connaît Perl ça devient très lisible. C'est comme si on disait que l'indentation horizontale de Python rend le code imbitable parce qu'on est habitués aux accolades - c'est juste une particularité du langage, qui une fois connue n'est pas un obstacle à la lisibilité.
C'est très élégant aussi, on peut discuter entre $_ et |e| qui oblige à nommer la variable locale mais ça n'alourdit quasimment pas.
En Python on doit définir une fonction, ou bien utiliser un for... in..., mais on ne pourra plus utiliser d'autre appel fonctionnel derrière, ce qui est génant ; si on veut vraiment le faire fonctionnellement on devra écrire :
somme = 0
nouvelle_liste = map(lambda e:globals().update({'somme':globals().get('somme') + e}) or 2 * e, liste
Pour moi c'est un énorme problème de Python, qui m'empêche d'écrire du code fonctionnel. Et au passage, en terme de qualité, réutilisabilité et maintenabilité, le code fonctionnel est d'une utilité fantastique car il force à écrire des fonctions sans effets de bords.
Sur ce point-là, je suis d'accord que ce n'est pas ce qu'un programmeur débutant fera, mais par contre au bout d'une certaine expérience de programmation le fonctionnel s'impose ; ce qui alimentera pour partie ma future conclusion sur Python.
message d'erreur totalement cryptique
Si tu écris cela :
class Foo:
def __init__(self):
print "Foo"
class Bar(Foo):
def __init__(self):
super(Bar, self).__init__()
print "Bar"
b = Bar()
Tu te prends comme message d'erreur :
File "foo.py", line 7, in __init__
super(Bar, self).__init__()
TypeError: super() argument 1 must be type, not classobj
Si ça t'intéresse, je te laisse tenter de comprendre le sens du message et de trouver d'où vient ce problème, je donne la solution plus bas au [1].
Bien sûr, ce n'est qu'un exemple et ça ne veut pas forcément parler d'un langage en général. Mais franchement, j'ai burlingué auprès de quelques langages maintenant, et je n'ai pas souvenir d'avoir eu avec d'autres langages que Python un message aussi débile (à part peut-être les messages de g++ quand il y a un problème emmêlant les template, les namespace... et heureusement qu'il n'y a pas de multiple dispatch en plus).
interpolations
Il n'y a pas d'interpolation dans les chaînes de caractères. Quelque chose de si pratique disponible dans tellement de langages de script (même Tcl !) et qui n'existe pas en Python, je trouve ça vraiment très dommage. On pourra me dire que ça rend le programme plus lisible, mais au contraire, devoir passer "de droite à gauche" comme on le fait dans un format en C ne rend que le programme moins lisible. C'est un détail mais c'est prodigieusement agaçant quand on programme avec Python.
objet ? pas objet ?
On fait la publicité de Python comme langage objet. Mais pourquoi n'ont-ils pas fait les choses jusqu'au bout ? C'est objet mais pour avoir la longueur d'une chaîne, là où Ruby a fait le boulot correctement (chaine.length) en Python c'est len(chaine). Conversion d'une chaine vers un entier ? En Ruby je fais chaine.to_i en Python rebelote je dois faire int(chaine).
Notons que je n'affirme pas que Perl est mieux là-dessus, Perl est une catastrophe pour l'objet (on peut quand même être heureux d'avoir l'héritage multiple en Perl, surtout quand on fait du Java par ailleurs) ; mais plutôt que si on veut un langage de script élégant, moderne, où tout est objet, il faut vraiment choisir Ruby sur Python.
Et voilà ma conclusion sur Python, je disais que l'absence de fonctionnel l'alimenterait ; les points ci-dessus aussi. Je vais te choquer certainement si tu aimes bien Python, mais je le dis car je l'argumente : pour moi, Python est un bon langage pour mauvais programmeur. Il est parfait dans ce cas-là car il interdit beaucoup de choses élégantes et/ou puissantes car trop compliquées et "imbitable/illisible". Je suis d'accord qu'avec Python il est facile de relire le programme d'un autre, du coup. Mais par contre quand je programme en Python, je m'arrache les cheveux en ayant l'impression d'être castré comme chez Java. Il est bon pour les mauvais programmeurs car tu es sûr qu'ils ne te feront pas quelque chose d'aussi dégueulasse que si ils avaient programmé en Perl ou en C++. Mais je trouve, en tant que programmeur expérimenté (ça sonne prétentieux je sais mais bon ça fait un certain temps que j'en fais, je connais quelques trucs, il m'en reste plein à apprendre et je rencontre souvent des gens qui m'apprennent des choses insoupçonnées, mais je suis expérimenté quand même na), qu'utiliser Python restreint trop l'expressivité de mes programmes et par là-même la vitesse de développement, sans apporter de vrai bénéfice de maintenabilité (on peut faire aussi maintenable en Perl et en Ruby en suivant des consignes cohérentes de style de programmation, qui sont de toutes façons indispensables avec n'importe quel langage quand on développen en équipe).
En deux mots, Python suxor :).
[1] solution : remplacer "class Foo:" par "class Foo(object):" ; j'ai eu de la peine à comprendre le rapport entre le message d'erreur et ça (le "super argument 1" c'est Bar, pas Foo, que je sache !?) et encore moins la différence entre les deux définitions de classe, je ne vois pas trop ce qu'une "classe" peut être d'autre qu'un objet et donc je pensais sincèrement qu'elle héritait implicitement de la top-class object, mais bon apparemment non ; d'ailleurs dans ton code plus haut tu n'hérites pas d'objet, attention à ne pas te heurter un jour à ce problème
(je passe sur la duplication de commentaires par rapport à ton premier, auquel j'ai déjà répondu plus bas, au sujet de mon code caca pas documenté toussa) (toi d'ailleurs qui a l'air de mettre en haute estime la qualité, lisibilité et maintenabilité du code, je te rappelle que tu dois l'éviter dans ton code, la duplication, mais passons)
D'ailleurs je me demande pourquoi y'a une agression par ligne, j'ai dû te contredire à un moment où tu n'étais pas d'humeur ?
Tu vois c'est con, je voudrais écrire du code imbitable en python que je pourrais même pas, puisque je suis obligé de taper une instruction par ligne.
Ben, non.
>>> print "foo"; print "bar"
foo
bar
>>>
comportant un ou plusieurs espaces avant le point-virgule, ne passent pas avec ton expression rationnelle.
Ben ouais j'ai fait une erreur sur cette regex, et alors ? Tu ne cesses de parler de demi-dieu et compagnie mais je te signale au passage que je n'ai jamais affirmé quoi que ce soit sur la perfection de mon code, ici comme ailleurs. Si tu fais toujours du code parfait sans erreur, bravo. Tu dois être le seul je pense. Et pense à ranger un peu le venin et à revenir sur Terre...
Et pour finir tu continues l'agressions, sur Mandrake et son code.. bravo..
Franchement à part te répondre "va te faire voir pauvre con" là j'ai plus d'idée. Tu juges sans connaître, tu racontes n'importe quoi, tu déverses ton aggressivité de manière totalement gratuite... Non franchement j'ai plus d'autre idée :/...
Euh atterris c'est pas un truc qui doit faire partie du logiciel ou de ses outils, c'est un script one-time pour trouver rapidement un truc foireux au sein de plusieurs centaines de classes.
D'ailleurs après discussion avec les autres, j'ai intégré cette vérification à l'outil de vérification statique de qualité et de standardisation de notre code. Et au passage je te signale que c'est moi qui ait proposé et programmé cet outil, donc comme type qui n'aime pas la lisibilité et la maintenabilité du code, je pense que je suis pas franchement ton client.
Franchement, c'est pas la perfection, mais par rapport à ce que ça pourrait être, je trouve que c'est déjà pas mal. Sans oublier le fait qu'il y a pas tant de question windows-only que ça finalement, et qu'il y a pas mal de questions linux. Moi je trouve que c'est pas mal...
Q6: hum culture gé... si jamais ça strippe au delà de la limite, peut-être ? moyen..
Q17: multiples réponses (mais je me demande si HTTP serait bon, vu qu'en "théorie" c'est pas un protocole d'envoi mais de réception seulement)
si c'est du second degré c'est toi qu'est dans les choux :)
si c'est du premier degré : ethernet et IP n'ont "rien à voir" car ils ne sont pas au même niveau : ethernet c'est le transport physique (il peut transporter de l'IP, de l'IPX, ou n'importe), IP c'est le protocole d'envoi des "paquets" de données sur un réseau (ethernet, token ring ou n'importe).
donc bref pour ta réponse une adresse ethernet ouais c'est l'adresse mac (sur 6 octets). pour voir le mapping sur ton réseau essaie "arp -a", si t'es en IP sur ethernet.
Dans un monde aux interactions aussi complexes, on ne peut, bien sûr, exiger d'un homme politique qu'il soit expert en tout. Les lobbies peuvent lui permettre de s'informer afin de prendre des décisions équilibrées sur des sujets pointus.
Ca commence bien... quand on pense que les lobbies peuvent permettre aux décideurs politiques se "s'informer" c'est qu'on manque cruellement de recul, voire de bon sens.
C'est justement le rôle des experts et commissions nationales voire européennes d'informer les politiques des domaines pointus (même si un organisme comme l'académie des sciences est très critiquée dans les milieux écologistes sur ce rôle-là justement), et certainement pas des lobbies ! Les lobbies ne représentent que ceux qui les financent, et poussent complètement dans le sens des intérêts de ceux qui les financent, au besoin à 180 degrés des intérêts du plus grand nombre et de la société.
En tout cas, je voie SONY d'un autre oeil maintenant ...
Bof Sony a toujours été une énorme boîte qui en profite. Les platines DVD de salon Sony qui ne lisent que les CD ou DVD gravés de marque Sony aussi, ça t'inspire quoi ?
De toutes façons, c'est l'apanage des énormes boîtes, elles en profitent toutes, ce n'est pas nouveau et ce n'est certainement pas la dernière fois. La seule "solution" est de privilégier les plus petites dans ses achats, tant qu'aucune loi n'est là pour interdire à une boîte de faire plus de xx millions de chiffre d'affaire par an sous peine d'être séparée d'office par les autorités.
Hum. A mon avis c'est plutot le souvenir qui est enjolivé. Faut voir qu'a l'epoque c'etait "state of the art". On adore toujours les derniers trucs et quand c'est dépassé ils font pâle figure par rapport aux anciens. Un simple exemple : il y a de nombreux émulateurs pour linux qui font tourner des ROM (légèrement pirates en général) de vieux jeux console, et les gens qui en sont fan ne sont pas légion. Quand on voit ça on y joue trois minutes mais après on laisse. Même si c'est Mario Kart pour SNES et qu'on y avait joué des heures et des jours à l'époque, aujourd'hui ça suxor.
si le partitionnement fait freezer le kernel tu as des chances que l'acces sans partitionnement (si tu l'as fait avant) freeze aussi. recherche plutot la raison/solution/workaround de ce probleme. sur le net on trouve souvent son bonheur pour ce genre de soucis materiel.
Si tu en as absolument besoin avant, tu fais une install réseau, tu tappes "xhost+" dans la console #2 dès que DrakX est démarré (non y'a pas d'espace c'est un petit programme fait exactement pour ça) et après sur une autre machine du réseau tu fais "DISPLAY=ip.de.la.machine.en.cours.d.install:0 xwd -root | convert - screenshot.png".
tu vois bien dans l'API de Gtk::Image ce drôle de RefPtr dans le constructeur que tu veux utiliser ? et tu le passes sous silence comme ça ? c'est pas bien sérieux :)
Glib::RefPtr<Gdk::Pixbuf> pixbuf = Gdk::Pixbuf::create_from_file("/x/y/z/toto.png")
Gtk::Image *pImg= new Image(pixbuf);
Boot sur le CD1 de la mandrake, comme si tu allais l'installer.
Ensuite passe en mode expert, tu tombe sur un ecran en mode texte.
Tape le mot rescue puis enter tu va tomber sur un menu te proposant plusiquer configuration de demarrage.
C'est quoi ce "passe en mode expert" ?
La bonne procédure :
- insérer le CD1
- au tout premier écran Mandrake, avant même d'avoir booté la machine en somme, tapper F1 puis "rescue" puis entrée
ensuite navigue et supprime deux ou trois truc de ton /usr
C'est quoi cette méthode de porc ? 99% de ce qui est dans /usr provient de RPM, il ne faut pas effacer des fichiers au hasard ! La bonne procédure est de virer des RPM. Une fois que tu as choisi de monter les partitions dans /mnt, tu choisis d'accéder à une console, tu tappes "chroot /mnt" pour obtenir ton système normal (avec surtout rpm et urpmi utilisables, du coup), puis tu utilises "urpme <gros-package-installé-récemment>" jusqu'à ce que la commande "df" te montrer que tu as maintenant dégagé un peu d'espace libre.
mais c'est une bonne base je pense que 90% serait à garder. il faudrait juste que quelqu'un de courageux le "corrige" (cependant, en parlant de droits d'auteurs, rien n'est précisé sur la page originale donc par défaut on n'a pas le droit ce serait du plagiat mince)
En général on enlève déjà 20 à 25% pour le vendeur, peut-être 5 à 10% pour le grossiste. Ensuite, il faut intégrer tout le coût de la pub, probablement aussi le retour des invendus, les avances sur production en amont, le sponsoring des festivals, et j'en oublie très certainement.
Ne pas se méprendre : je suis d'accord sur le fond, je trouve la pub un cancer, et je pense que les majors c'est pabien(tm) (tout simplement parce que lorsque une poignée d'entreprises concentrent tout le marché il y a des abus mécaniques), mais ceci dit je ne pense pas qu'ils se fassent 90% de bénéf sur les CD.
Bon, pour l'instant je rangeais les gens critiques du système de notation parmi les chieurs patentés, mais soit je viens d'y adhérer soit je viens de changer d'avis : dans le thread ci-dessus, le message du monsieur qui n'aime pas rencontrer d'autres gens trop semblables à lui, bien qu'exprimant probablement une opinion minoritaire ici (au vu des réponses), est tout sauf inutile. Mais les gens se défoulent sur les notes et utilisent "inutile" comme "je veux cacher j'aime pas". Et moi je n'ai jamais eu autant de confort de browsing que depuis que je browse à -42 de seuil, parce que sinon ça enlève plein de messages intéressants et ça coupe les fils de discussion.
Alors ce système de notation, s'il ne remplit pas les buts qu'il s'était fixés, est-il vraiment utile ? Parce que si c'est pour passer son temps à cliquer sur le petit [+] pour déplier, autant ne pas plier...
Je me posais déjà la question de l'intérêt de se retrouver "entre informaticiens" à l'époque des demo parties. Je n'ai toujours pas trouvé la réponse...
C'est curieux moi c'est tout le contraire : je trouvais déjà qu'on sortait des démo-parties avec des images plein les yeux, un torse regonflé à mille pourcents, l'impression grisante d'avoir vu ou rencontré quelques uns des programmeurs les plus doués, talentueux ou bien fortement timbrés que l'informatique de djeunz pouvait compter.
Et aux seules RMLL où je suis allé j'ai passé 3 jours très similaires, même si certaines conf sont chiantes ce n'est pas le tout. Et moi j'avais même découvert que certains débiannistes n'étaient pas irrémédiablement fermés à tout ce qui ne concernait pas Debian, fou non ?
[^] # Re: Blabla de marketeux de mairde...
Posté par gc (site web personnel) . En réponse au journal Le Ministère de l'Equipement choisit Mandrakesoft. Évalué à 5.
[^] # Re: Pitoyable
Posté par gc (site web personnel) . En réponse au message de la puissance de (beep) pour trouver un truc simple en 2 minutes. Évalué à 3.
Pour Fedora, on verra ce que ça donnera, mais jusqu'à présent les outils d'aide à la configuration de Mandrake sont plus nombreux et plus puissants alors que les développeurs sont moins nombreux (ils sont un peu plus buggés je le concède, mais globalement ils marchent très bien).
Maintenant, la question de la documentation du code ne se résume pas à un principe qui tient en deux lignes. En particulier, il faut tenir compte du niveau du/des programmeurs, du taux de "turnover" dans l'équipe de développement (Mandrake c'est pas une SSII), du style qu'adopte une équipe de développement (en connaissant le style on comprendra mieux le code), du besoin de maintenance et d'ajout de fonctionnalité du code (il n'est pas le même dans chaque code/projet : par exemple ce que tu documenteras le mieux sera l'API, les exemples de plugin). Bref, mon point de vue sur la question s'étale en anglais ici :
http://zarb.org/~gc/html/documenting-code.html(...)
Et sur ce je vois ton journal, dont le ton est, sinon agressif, très provocateur : une merveille d'un côté, quelque chose de forcément bien plus long et plus chiant en Python de l'autre... avoue que tu y es pas allé de main morte !!
Euh ce n'est pas parce que mon journal est provocateur (mais pas insultant à part peut-être "chiant" mais bon faut pas pousser) que j'ai le droit de me prendre : "t'as gagné t'es le meilleur" "un super pro comme toi" (plusieurs fois) "trucs plus importants à faire" "un demi-dieu comme toi" "bravo champion" bon j'arrête mais bon tu situes : au premier ça va je rigole, au deuxième je me dis que t'as l'air chaud, au cinquième j'en ai franchement marre.
je suis absolument persuadé que ce que tu prônes, c'est pour moi un exemple à ne pas suivre.
Je ne prône que l'utilisation d'un langage de script élégant et puissant pour les "petites tâches vite fait", rien de plus, dans cet article tout du moins. Je sais que le code ci-dessus est illisible, mais son propos n'est pas d'être relu et encore moins d'être conservé ; c'est juste d'avoir un outil permettant de faire rapidement une tâche unique.
dis-moi ce que tu penses de l'équivalent en python... tu n'es pas tenté ?
Non. Python pour moi a des avantages indéniables, mais ils sont massacrés par trop d'erreurs. Je te liste les plus importantes que j'ai découvertes lors de mes essais (parfois forcés) avec Python :
fonctions anonymes castrées
On se trouve relativement souvent en face d'une situation dans laquelle on veut appliquer une transformation assez simple à un ensemble de données, et les fonctions anonymes sont indispensables pour pouvoir le faire élégamment (elles le sont aussi entres autres pour brancher un callback dans un système de programmation évenementielle).
Par exemple, j'ai une liste d'entiers, je veux obtenir à la fois la somme de ceux-ci, et la liste avec les entiers doublés. En Perl on le fait comme cela :
@nouvelle_liste = map { $somme += $_; 2*$_ } @liste
Ca pourra te paraître imbitable si tu ne connais pas le Perl et sa variable implicite $_, mais une fois que l'on connaît Perl ça devient très lisible. C'est comme si on disait que l'indentation horizontale de Python rend le code imbitable parce qu'on est habitués aux accolades - c'est juste une particularité du langage, qui une fois connue n'est pas un obstacle à la lisibilité.
En Ruby on le fait comme cela :
somme = 0
nouvelle_liste = list.map{ |e| somme += e; 2*e }
C'est très élégant aussi, on peut discuter entre $_ et |e| qui oblige à nommer la variable locale mais ça n'alourdit quasimment pas.
En Python on doit définir une fonction, ou bien utiliser un for... in..., mais on ne pourra plus utiliser d'autre appel fonctionnel derrière, ce qui est génant ; si on veut vraiment le faire fonctionnellement on devra écrire :
somme = 0
nouvelle_liste = map(lambda e:globals().update({'somme':globals().get('somme') + e}) or 2 * e, liste
Pour moi c'est un énorme problème de Python, qui m'empêche d'écrire du code fonctionnel. Et au passage, en terme de qualité, réutilisabilité et maintenabilité, le code fonctionnel est d'une utilité fantastique car il force à écrire des fonctions sans effets de bords.
Sur ce point-là, je suis d'accord que ce n'est pas ce qu'un programmeur débutant fera, mais par contre au bout d'une certaine expérience de programmation le fonctionnel s'impose ; ce qui alimentera pour partie ma future conclusion sur Python.
message d'erreur totalement cryptique
Si tu écris cela :
class Foo:
def __init__(self):
print "Foo"
class Bar(Foo):
def __init__(self):
super(Bar, self).__init__()
print "Bar"
b = Bar()
Tu te prends comme message d'erreur :
File "foo.py", line 7, in __init__
super(Bar, self).__init__()
TypeError: super() argument 1 must be type, not classobj
Si ça t'intéresse, je te laisse tenter de comprendre le sens du message et de trouver d'où vient ce problème, je donne la solution plus bas au [1].
Bien sûr, ce n'est qu'un exemple et ça ne veut pas forcément parler d'un langage en général. Mais franchement, j'ai burlingué auprès de quelques langages maintenant, et je n'ai pas souvenir d'avoir eu avec d'autres langages que Python un message aussi débile (à part peut-être les messages de g++ quand il y a un problème emmêlant les template, les namespace... et heureusement qu'il n'y a pas de multiple dispatch en plus).
interpolations
Il n'y a pas d'interpolation dans les chaînes de caractères. Quelque chose de si pratique disponible dans tellement de langages de script (même Tcl !) et qui n'existe pas en Python, je trouve ça vraiment très dommage. On pourra me dire que ça rend le programme plus lisible, mais au contraire, devoir passer "de droite à gauche" comme on le fait dans un format en C ne rend que le programme moins lisible. C'est un détail mais c'est prodigieusement agaçant quand on programme avec Python.
objet ? pas objet ?
On fait la publicité de Python comme langage objet. Mais pourquoi n'ont-ils pas fait les choses jusqu'au bout ? C'est objet mais pour avoir la longueur d'une chaîne, là où Ruby a fait le boulot correctement (chaine.length) en Python c'est len(chaine). Conversion d'une chaine vers un entier ? En Ruby je fais chaine.to_i en Python rebelote je dois faire int(chaine).
Notons que je n'affirme pas que Perl est mieux là-dessus, Perl est une catastrophe pour l'objet (on peut quand même être heureux d'avoir l'héritage multiple en Perl, surtout quand on fait du Java par ailleurs) ; mais plutôt que si on veut un langage de script élégant, moderne, où tout est objet, il faut vraiment choisir Ruby sur Python.
Et voilà ma conclusion sur Python, je disais que l'absence de fonctionnel l'alimenterait ; les points ci-dessus aussi. Je vais te choquer certainement si tu aimes bien Python, mais je le dis car je l'argumente : pour moi, Python est un bon langage pour mauvais programmeur. Il est parfait dans ce cas-là car il interdit beaucoup de choses élégantes et/ou puissantes car trop compliquées et "imbitable/illisible". Je suis d'accord qu'avec Python il est facile de relire le programme d'un autre, du coup. Mais par contre quand je programme en Python, je m'arrache les cheveux en ayant l'impression d'être castré comme chez Java. Il est bon pour les mauvais programmeurs car tu es sûr qu'ils ne te feront pas quelque chose d'aussi dégueulasse que si ils avaient programmé en Perl ou en C++. Mais je trouve, en tant que programmeur expérimenté (ça sonne prétentieux je sais mais bon ça fait un certain temps que j'en fais, je connais quelques trucs, il m'en reste plein à apprendre et je rencontre souvent des gens qui m'apprennent des choses insoupçonnées, mais je suis expérimenté quand même na), qu'utiliser Python restreint trop l'expressivité de mes programmes et par là-même la vitesse de développement, sans apporter de vrai bénéfice de maintenabilité (on peut faire aussi maintenable en Perl et en Ruby en suivant des consignes cohérentes de style de programmation, qui sont de toutes façons indispensables avec n'importe quel langage quand on développen en équipe).
En deux mots, Python suxor :).
[1] solution : remplacer "class Foo:" par "class Foo(object):" ; j'ai eu de la peine à comprendre le rapport entre le message d'erreur et ça (le "super argument 1" c'est Bar, pas Foo, que je sache !?) et encore moins la différence entre les deux définitions de classe, je ne vois pas trop ce qu'une "classe" peut être d'autre qu'un objet et donc je pensais sincèrement qu'elle héritait implicitement de la top-class object, mais bon apparemment non ; d'ailleurs dans ton code plus haut tu n'hérites pas d'objet, attention à ne pas te heurter un jour à ce problème
[^] # Re: Pitoyable
Posté par gc (site web personnel) . En réponse au message de la puissance de (beep) pour trouver un truc simple en 2 minutes. Évalué à 2.
D'ailleurs je me demande pourquoi y'a une agression par ligne, j'ai dû te contredire à un moment où tu n'étais pas d'humeur ?
Tu vois c'est con, je voudrais écrire du code imbitable en python que je pourrais même pas, puisque je suis obligé de taper une instruction par ligne.
Ben, non.
>>> print "foo"; print "bar"
foo
bar
>>>
comportant un ou plusieurs espaces avant le point-virgule, ne passent pas avec ton expression rationnelle.
Ben ouais j'ai fait une erreur sur cette regex, et alors ? Tu ne cesses de parler de demi-dieu et compagnie mais je te signale au passage que je n'ai jamais affirmé quoi que ce soit sur la perfection de mon code, ici comme ailleurs. Si tu fais toujours du code parfait sans erreur, bravo. Tu dois être le seul je pense. Et pense à ranger un peu le venin et à revenir sur Terre...
Et pour finir tu continues l'agressions, sur Mandrake et son code.. bravo..
Franchement à part te répondre "va te faire voir pauvre con" là j'ai plus d'idée. Tu juges sans connaître, tu racontes n'importe quoi, tu déverses ton aggressivité de manière totalement gratuite... Non franchement j'ai plus d'autre idée :/...
[^] # Re: Pitoyable
Posté par gc (site web personnel) . En réponse au message de la puissance de (beep) pour trouver un truc simple en 2 minutes. Évalué à 2.
D'ailleurs après discussion avec les autres, j'ai intégré cette vérification à l'outil de vérification statique de qualité et de standardisation de notre code. Et au passage je te signale que c'est moi qui ait proposé et programmé cet outil, donc comme type qui n'aime pas la lisibilité et la maintenabilité du code, je pense que je suis pas franchement ton client.
[^] # Re: ????
Posté par gc (site web personnel) . En réponse au journal concours de technicien de l'Éducation Nationale. Évalué à 2.
[^] # Re: ????
Posté par gc (site web personnel) . En réponse au journal concours de technicien de l'Éducation Nationale. Évalué à 2.
Q17: multiples réponses (mais je me demande si HTTP serait bon, vu qu'en "théorie" c'est pas un protocole d'envoi mais de réception seulement)
[^] # Re: Questions de merde
Posté par gc (site web personnel) . En réponse au journal concours de technicien de l'Éducation Nationale. Évalué à 2.
si c'est du premier degré : ethernet et IP n'ont "rien à voir" car ils ne sont pas au même niveau : ethernet c'est le transport physique (il peut transporter de l'IP, de l'IPX, ou n'importe), IP c'est le protocole d'envoi des "paquets" de données sur un réseau (ethernet, token ring ou n'importe).
donc bref pour ta réponse une adresse ethernet ouais c'est l'adresse mac (sur 6 octets). pour voir le mapping sur ton réseau essaie "arp -a", si t'es en IP sur ethernet.
# lobbies
Posté par gc (site web personnel) . En réponse au journal C'est maintenant qu'ils s'en rende compte.... Évalué à 5.
Ca commence bien... quand on pense que les lobbies peuvent permettre aux décideurs politiques se "s'informer" c'est qu'on manque cruellement de recul, voire de bon sens.
C'est justement le rôle des experts et commissions nationales voire européennes d'informer les politiques des domaines pointus (même si un organisme comme l'académie des sciences est très critiquée dans les milieux écologistes sur ce rôle-là justement), et certainement pas des lobbies ! Les lobbies ne représentent que ceux qui les financent, et poussent complètement dans le sens des intérêts de ceux qui les financent, au besoin à 180 degrés des intérêts du plus grand nombre et de la société.
[^] # Re: Téléphone portable
Posté par gc (site web personnel) . En réponse au journal J'ai testé pour vous .... Évalué à 3.
[^] # Re: Téléphone portable
Posté par gc (site web personnel) . En réponse au journal J'ai testé pour vous .... Évalué à 7.
Bof Sony a toujours été une énorme boîte qui en profite. Les platines DVD de salon Sony qui ne lisent que les CD ou DVD gravés de marque Sony aussi, ça t'inspire quoi ?
De toutes façons, c'est l'apanage des énormes boîtes, elles en profitent toutes, ce n'est pas nouveau et ce n'est certainement pas la dernière fois. La seule "solution" est de privilégier les plus petites dans ses achats, tant qu'aucune loi n'est là pour interdire à une boîte de faire plus de xx millions de chiffre d'affaire par an sous peine d'être séparée d'office par les autorités.
[^] # Re: easter egg
Posté par gc (site web personnel) . En réponse au journal concours de technicien de l'Éducation Nationale. Évalué à 10.
qui connaît la signification de ISA, PCI ? on s'en tappe..
[^] # Re: Remarque:
Posté par gc (site web personnel) . En réponse au journal Mairie de Paris : Microsoft ou pas ?. Évalué à 0.
[^] # Re: J'ai comme un doute là
Posté par gc (site web personnel) . En réponse au journal Merci Mandrake et a ceux du plf. Évalué à 3.
# part
Posté par gc (site web personnel) . En réponse au message Pb installation Mdk 10 Official. Évalué à 2.
# meuh
Posté par gc (site web personnel) . En réponse au message > Faire des Screenshots pendant l'install <. Évalué à 3.
Si tu en as absolument besoin avant, tu fais une install réseau, tu tappes "xhost+" dans la console #2 dès que DrakX est démarré (non y'a pas d'espace c'est un petit programme fait exactement pour ça) et après sur une autre machine du réseau tu fais "DISPLAY=ip.de.la.machine.en.cours.d.install:0 xwd -root | convert - screenshot.png".
[^] # Re: Visuellement ca donne ca
Posté par gc (site web personnel) . En réponse au journal LSM / Bordeaux, informations du dedans ?. Évalué à 2.
[^] # Re: PYTHON !
Posté par gc (site web personnel) . En réponse au journal apprendre à programmer... Évalué à 3.
mouaif... quand on regarde de très loin alors. ça partage Algol comme ancêtre mais bon.
http://people.mandrakesoft.com/~prigaux/language-study/diagram.png(...)
# refptr
Posté par gc (site web personnel) . En réponse au message Gtkmm et les Pixbufs. Évalué à 2.
Glib::RefPtr<Gdk::Pixbuf> pixbuf = Gdk::Pixbuf::create_from_file("/x/y/z/toto.png")
Gtk::Image *pImg= new Image(pixbuf);
# iconv_
Posté par gc (site web personnel) . En réponse au message Iconv. Évalué à 3.
#include <iconv.h>
char* iconv_(char* s, char* from_charset, char* to_charset) {
iconv_t cd = iconv_open(to_charset, from_charset);
char* retval = s;
if (cd != (iconv_t) (-1)) {
size_t s_len = strlen(retval);
/* the maximum expansion when converting happens when converting
tscii to utf-8; each tscii char can become up to 4 unicode chars
and each one of those unicode chars can be 3 bytes long */
char *buf = alloca(4 * 3 * s_len);
{
char *ptr = buf;
size_t ptr_len = 4 * 3 * s_len;
if ((iconv(cd, &s, &s_len, &ptr, &ptr_len)) != (size_t) (-1)) {
*ptr = 0;
retval = buf;
}
}
iconv_close(cd);
}
return strdup(retval);
}
[^] # Re: Rescue...
Posté par gc (site web personnel) . En réponse au message Problème de démarrage sur Mdk 9.2. Évalué à 1.
Ensuite passe en mode expert, tu tombe sur un ecran en mode texte.
Tape le mot rescue puis enter tu va tomber sur un menu te proposant plusiquer configuration de demarrage.
C'est quoi ce "passe en mode expert" ?
La bonne procédure :
- insérer le CD1
- au tout premier écran Mandrake, avant même d'avoir booté la machine en somme, tapper F1 puis "rescue" puis entrée
ensuite navigue et supprime deux ou trois truc de ton /usr
C'est quoi cette méthode de porc ? 99% de ce qui est dans /usr provient de RPM, il ne faut pas effacer des fichiers au hasard ! La bonne procédure est de virer des RPM. Une fois que tu as choisi de monter les partitions dans /mnt, tu choisis d'accéder à une console, tu tappes "chroot /mnt" pour obtenir ton système normal (avec surtout rpm et urpmi utilisables, du coup), puis tu utilises "urpme <gros-package-installé-récemment>" jusqu'à ce que la commande "df" te montrer que tu as maintenant dégagé un peu d'espace libre.
[^] # Re: Pour de vrai
Posté par gc (site web personnel) . En réponse au journal C' est quoi Windows ?. Évalué à 3.
[^] # Re: Pour vraiment vous faire mal au c*l
Posté par gc (site web personnel) . En réponse au journal Petit histoire pour nous les enfants. Évalué à 3.
Ne pas se méprendre : je suis d'accord sur le fond, je trouve la pub un cancer, et je pense que les majors c'est pabien(tm) (tout simplement parce que lorsque une poignée d'entreprises concentrent tout le marché il y a des abus mécaniques), mais ceci dit je ne pense pas qu'ils se fassent 90% de bénéf sur les CD.
[^] # Re: Eh Bien
Posté par gc (site web personnel) . En réponse à la dépêche Appel à contribution sur l'avenir de XUL. Évalué à 8.
# système de notation inutile
Posté par gc (site web personnel) . En réponse au journal LSM / Bordeaux, informations du dedans ?. Évalué à 8.
Alors ce système de notation, s'il ne remplit pas les buts qu'il s'était fixés, est-il vraiment utile ? Parce que si c'est pour passer son temps à cliquer sur le petit [+] pour déplier, autant ne pas plier...
[^] # Re: En direct
Posté par gc (site web personnel) . En réponse au journal LSM / Bordeaux, informations du dedans ?. Évalué à 6.
C'est curieux moi c'est tout le contraire : je trouvais déjà qu'on sortait des démo-parties avec des images plein les yeux, un torse regonflé à mille pourcents, l'impression grisante d'avoir vu ou rencontré quelques uns des programmeurs les plus doués, talentueux ou bien fortement timbrés que l'informatique de djeunz pouvait compter.
Et aux seules RMLL où je suis allé j'ai passé 3 jours très similaires, même si certaines conf sont chiantes ce n'est pas le tout. Et moi j'avais même découvert que certains débiannistes n'étaient pas irrémédiablement fermés à tout ce qui ne concernait pas Debian, fou non ?