Je n'ai pas dit que ce n'était pas possible, j'ai dit que c'était galère (ce que tu viens de me confirmer), et que c'était incohérent dans le sens ou si tout est objet, rajouter une méthode de classe ou rajouter une méthode à un objet, c'est finalement la même chose, mais ça s'écrit pas du tout pareil.
Un autre exemple pour s'amuser : une méthode dont le nom commence par __ est privé, sauf si le nom se termine aussi par __. C'est tellement cohérent et intuitif qu'on dirait une règle de grammaire du français.
stripatublu% python
Python 2.5.4 (r254:67916, Nov 19 2009, 22:14:20)
[GCC 4.3.4] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> class Plop:
... def __plop(self):
... pass
... def __plop__(self):
... pass
...
>>> plop = Plop()
>>> plop.__plop()
Traceback (most recent call last):
File "", line 1, in
AttributeError: Plop instance has no attribute '__plop'
>>> plop.__plop__()
>>>
Les plus trolleurs auront remarqué le message d'erreur très explicite.
Si tout est objet, cela veut dire que chaque instruction s'execute dans le contexte d'un objet, et donc self doit être défini. Quand tu ouvres un interpréteur ruby, self et définit dès le départ (et est une instance de type ObjectSpace).
Quand je crées une nouvelle classe, je ne fais qu'instancier un objet de type Class. Lorsque je la définis, je suis dans le constructeur de cet objet, et donc self est bien défini, et représente l'instance que je suis en train de définir.
Je ne trouve pas ceci cohérent avec le principe « tout est objet » :
stripatublu% python
Python 2.5.4 (r254:67916, Nov 19 2009, 22:14:20)
[GCC 4.3.4] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> class Plop:
... pass
...
>>> Plop().__class__
<class __main__.Plop at 0x7f82a55b36b0>
>>> Plop.__class__
Traceback (most recent call last):
File "", line 1, in
AttributeError: class Plop has no attribute '__class__'
En ruby, une classe est objet, tu peux créer une classe en appelant le constructeur de Class, et dont le scope n'est pas global. Ça, c'est cohérent avec le principe « tout est objet ».
À appeler des méthodes qui s'executent sur une classe (pour créer des méthodes par exemple).
Ensuite, à partir du moment où tu commences à définir ta classe, elle existe, tout comme le fait qu'un objet existe avant que le constructeur soit terminé. Parce que étant donné qu'on peut rajouter des méthodes à la volée, même si c'est plus galère et/ou moche en Python qu'en Ruby, ta classe n'est jamais complètement définie (au sens ou les méthodes des objets de la classe ne sont jamais figés).
Par exemple, en Ruby, si tu fais def monobjet.manouvellemethode
…
end
tu crées une méthode qui n'existera que sur l'objet monobjet, et pas sur tous les objets de la même classe. Pour créer une méthode de classe, tu utilises exactement le même concept : tu crées une méthode sur la classe que tu es en train de définir.
De même, créer une classe anonyme se fait simplement en instanciant un objet de type class. Quoi de plus logique ?
Ce que j'aime bien dans Ruby que je n'ai pas retrouvé en Python, c'est la cohérence. Il y a très peu de principes à savoir en Ruby, et lorsqu'on les a saisis, on devine facilement comment va se comporter le langage dans un cas inconnu.
Un exemple pour étayer mon propos : self n'est pas défini lors de la définition de la classe en Python. On a aucun moyen d'accéder à l'objet qu'on est en train de définir.
La différence c'est qu'on a pas 15 000 surcouche pour écouter du son avec MPlayer.
C'est assez amusant de voir que lorsqu'on a un outil qui remplit une tâche (alsa pour les drivers, PA pour le mixeur / réseau / choix d'une carte son, jackd pour le routage entres applications) les gens disent qu'on a trop de couches, et quand on a un outil qui fait tout les gens disent que c'est contraire au principe KISS.
Tu négliges le contexte : dans son cas, il ne peut pas changer l'administration en un temps raisonnable (la solution "intelligente"), donc la seule solution "professionnelle" (c'est-à-dire qui permet de résoudre le problème dans les délais) est d'utiliser le seul logiciel qui peut lire le document (à supposer que son problème ne soit pas un problème de polices comme évoqué ailleurs).
Evidemment que LaTeX et OOo sont des solutions professionnelles, si tant est que ce mot ait un sens, quand tu maitrises la chaîne de bout en bout.
Vous seriez les premiers à vous régaler un un service interne de microsoft utilisait sans autorisation un produit d'un autre service sans payer la licence (qui je crois bien n'exempte aucunement MS elle même), et à réclamer justice pour les faire chier
Le code appartient à l'entreprise, pas à un service, donc à priori ce que tu dis ne tient pas. D'autre part, ce n'est pas parce que Microsoft passe un contrat avec un utilisateur qu'elle doit passer le même contrat avec un autre utilisateur (comprendre : il peut y avoir plusieurs licences pour le même code).
Non, les deux limites sont bien égales, c'est juste que l'opération de soustraction n'est pas définie. Voir {http://fr.wikipedia.org/wiki/Droite_réelle_achevée}
Pas sûr que ça marche mais
qemu-img convert -f raw /dev/sda -O qcow2 vm-img.qcow2
permettrait peut-être de n'utiliser comme place que celle effective des données, alors qu'un dd va créer un fichier de la taille du disque dur, quelle que soit l'utilisation du disque.
Le même que l'intérêt d'un webmail par rapport à client mail normal : il suffit que le serveur smtp soit joignable par le serveur hébergeant le roundcube pour pouvoir envoyer des mails de n'importe où sans rien configurer.
Oui, t'es gentil, le thread et le message auquel tu reponds il parle de packaging et comme c'est de Zenitram, de son experience avec son propre projet, donc ta reponse est toujours a cote de la plaque quand tu lui reponds logiciel proprio.
À mon humble avis qui vaut ce qu'il vaut, il suffit de deux choses pour que le développeur n'est rien à faire pour la distribution d'un programme sous Linux : que le logiciel soit libre, et qu'il soit populaire.
Comme Google Chrome est déjà populaire, les problèmes rencontrés pour la distribution sont uniquement liés à sa non-liberté, d'où mon commentaire.
Oh oh oh, t'es un petit rigolo toi, on me l'avait pas encore fait celle la, pourtant ca fait un moment que je tapes sans les accents. Si un seul mot te fait partir dans des delires pareils, faudrait penser a arreter la coke quand meme.
Roh, pourquoi tu m'agresses, alors que j'essaie (maladroitement) de faire un peu d'humour ? Viens donc me faire un gros câlin !
Quelques déductions des réponses que tu donnes (ton avis sur ces déductions m'intéresse):
1/ Tous les utilisateurs Windows sont contents du packaging, un certain nombre des utilisateurs Linux ne le sont pas
2/ Vu que tu utilises deux méthodes de distributions différentes pour Linux et Windows (dynamique et statique), on ne peut pas vraiment savoir si l'insatisfaction des utilisateurs est inhérente à Linux : est-ce que les utilisateurs qui veulent des paquets pour leur distrib seraient satisfaits d'un binaire statique ? Si oui, il n'y a pas de surcharge de travail sur Linux par rapport à Windows. Si non, cela veut dire que l'utilisateur exige une meilleure qualité que l'utilisateur Windows (gestion automatique des mises-à-jour, partage de code, intégration dans ses outils de gestion des programmes...).
3/ Il n'est pas toujours facile de trouver des packageurs quand on a pas une base d'utilisateurs conséquente, même si parmi les utilisateurs un certain nombre sait compiler sans problèmes, et a donc la connaissance technique pour faire un paquet.
4/ La facilité apparente de Windows implique une surcharge de travail (que tu n'as pas quantifiée) : tu dois suivre toi-même les mises à jour des bibliothèques que tu utilises, et recompiler/sortir une nouvelle version lorsque une maj de sécu de la bibliothèque sort.
Suite à ton poste, j'ai un certain nombre d'autres questions, mon but étant d'essayer d'évaluer dans ton cas particulier les charges de travail spécifique à la distribution d'un logiciel, sous windows et linux.
1/ As-tu des plaintes des utilisateurs Windows ? Sur quoi portent-elles ?
2/ As-tu déja répondu à un utilisateur de contacter les développeur de sa distrib, et si oui, quelle à été la réaction de l'utilisateur et de la distrib ?
3/ Quelle est ta méthode de distribution des bibliothèques que tu utilises ? Si c'est un binaire statique, est-ce que surveiller les nouvelles versions des libs, gérer les problèmes de sécurité n'est pas une lourde charge ? Si tu utilises du linkage dynamique, n'est-ce pas compliqué de gérer les installations des libs, les différentes versions, etc ?
4/ Si tu distribues un binaire statique pour Windows, distribues-tu aussi un binaire statique pour Linux ? Si oui, quel est l'avis des utilisateurs sur ce binaire ?
5/ Quel est à peu près le profil de tes utilisateurs ? Power-user, débutant, les deux ?
Vraies questions, parce que je suis curieux :
1/ Qu'est-ce que tu appelles critique ? Je veux dire, quel était le ton de l'utilisateur ?
2/ MediaInfo n'est pas dans l'ubuntu officiel ?
3/ Tu as demandé sur les ml/forums si un développeur ubuntu ne pouvait pas maintenir un paquet pour MediaInfo ?
[^] # Re: Python vs Ruby
Posté par Jean-Philippe Garcia Ballester . En réponse au journal Choisir un framework web.... Évalué à 4.
[^] # Re: Python vs Ruby
Posté par Jean-Philippe Garcia Ballester . En réponse au journal Choisir un framework web.... Évalué à 2.
[^] # Re: Python vs Ruby
Posté par Jean-Philippe Garcia Ballester . En réponse au journal Choisir un framework web.... Évalué à 2.
[^] # Re: Python vs Ruby
Posté par Jean-Philippe Garcia Ballester . En réponse au journal Choisir un framework web.... Évalué à 7.
stripatublu% python
Python 2.5.4 (r254:67916, Nov 19 2009, 22:14:20)
[GCC 4.3.4] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> class Plop:
... def __plop(self):
... pass
... def __plop__(self):
... pass
...
>>> plop = Plop()
>>> plop.__plop()
Traceback (most recent call last):
File "", line 1, in
AttributeError: Plop instance has no attribute '__plop'
>>> plop.__plop__()
>>>
Les plus trolleurs auront remarqué le message d'erreur très explicite.
[^] # Re: Python vs Ruby
Posté par Jean-Philippe Garcia Ballester . En réponse au journal Choisir un framework web.... Évalué à 2.
Quand je crées une nouvelle classe, je ne fais qu'instancier un objet de type Class. Lorsque je la définis, je suis dans le constructeur de cet objet, et donc self est bien défini, et représente l'instance que je suis en train de définir.
Je ne trouve pas ceci cohérent avec le principe « tout est objet » :
stripatublu% python
Python 2.5.4 (r254:67916, Nov 19 2009, 22:14:20)
[GCC 4.3.4] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> class Plop:
... pass
...
>>> Plop().__class__
<class __main__.Plop at 0x7f82a55b36b0>
>>> Plop.__class__
Traceback (most recent call last):
File "", line 1, in
AttributeError: class Plop has no attribute '__class__'
En ruby, une classe est objet, tu peux créer une classe en appelant le constructeur de Class, et dont le scope n'est pas global. Ça, c'est cohérent avec le principe « tout est objet ».
[^] # Re: Python vs Ruby
Posté par Jean-Philippe Garcia Ballester . En réponse au journal Choisir un framework web.... Évalué à 2.
Ensuite, à partir du moment où tu commences à définir ta classe, elle existe, tout comme le fait qu'un objet existe avant que le constructeur soit terminé. Parce que étant donné qu'on peut rajouter des méthodes à la volée, même si c'est plus galère et/ou moche en Python qu'en Ruby, ta classe n'est jamais complètement définie (au sens ou les méthodes des objets de la classe ne sont jamais figés).
Par exemple, en Ruby, si tu fais
def monobjet.manouvellemethode
…
end
tu crées une méthode qui n'existera que sur l'objet monobjet, et pas sur tous les objets de la même classe. Pour créer une méthode de classe, tu utilises exactement le même concept : tu crées une méthode sur la classe que tu es en train de définir.
De même, créer une classe anonyme se fait simplement en instanciant un objet de type class. Quoi de plus logique ?
[^] # Re: Python vs Ruby
Posté par Jean-Philippe Garcia Ballester . En réponse au journal Choisir un framework web.... Évalué à 3.
Ce que j'aime bien dans Ruby que je n'ai pas retrouvé en Python, c'est la cohérence. Il y a très peu de principes à savoir en Ruby, et lorsqu'on les a saisis, on devine facilement comment va se comporter le langage dans un cas inconnu.
Un exemple pour étayer mon propos : self n'est pas défini lors de la définition de la classe en Python. On a aucun moyen d'accéder à l'objet qu'on est en train de définir.
[^] # Re: D'un autre cote..
Posté par Jean-Philippe Garcia Ballester . En réponse au journal Rediriger une sortie audio vers un serveur de streaming.. Évalué à 5.
C'est assez amusant de voir que lorsqu'on a un outil qui remplit une tâche (alsa pour les drivers, PA pour le mixeur / réseau / choix d'une carte son, jackd pour le routage entres applications) les gens disent qu'on a trop de couches, et quand on a un outil qui fait tout les gens disent que c'est contraire au principe KISS.
[^] # Re: Oula
Posté par Jean-Philippe Garcia Ballester . En réponse au journal Déboires avec OpenOffice. Évalué à 6.
Evidemment que LaTeX et OOo sont des solutions professionnelles, si tant est que ce mot ait un sens, quand tu maitrises la chaîne de bout en bout.
[^] # Re: super!
Posté par Jean-Philippe Garcia Ballester . En réponse au journal Des nouvelles du freeze de Debian Squeeze. Évalué à 1.
[^] # Re: Siteduzero
Posté par Jean-Philippe Garcia Ballester . En réponse à la dépêche Microsoft dans le groupe de travail du W3C sur SVG. Évalué à 6.
Le code appartient à l'entreprise, pas à un service, donc à priori ce que tu dis ne tient pas. D'autre part, ce n'est pas parce que Microsoft passe un contrat avec un utilisateur qu'elle doit passer le même contrat avec un autre utilisateur (comprendre : il peut y avoir plusieurs licences pour le même code).
[^] # Re: Et après ?
Posté par Jean-Philippe Garcia Ballester . En réponse à la dépêche Fabrice Bellard bat le record des décimales de Pi. Évalué à 2.
[^] # Re: arretes moi si je me trompes
Posté par Jean-Philippe Garcia Ballester . En réponse au journal Redimensionner un disque qcow2 avec les partitions internes en quelques commandes. Évalué à 3.
[^] # Re: P2V
Posté par Jean-Philippe Garcia Ballester . En réponse au journal Redimensionner un disque qcow2 avec les partitions internes en quelques commandes. Évalué à 6.
qemu-img convert -f raw /dev/sda -O qcow2 vm-img.qcow2
permettrait peut-être de n'utiliser comme place que celle effective des données, alors qu'un dd va créer un fichier de la taille du disque dur, quelle que soit l'utilisation du disque.
[^] # Re: Ecran plus petit
Posté par Jean-Philippe Garcia Ballester . En réponse au journal Resolution independance. Évalué à 3.
[^] # Re: finalement je m'en sors a peu près mais ....
Posté par Jean-Philippe Garcia Ballester . En réponse au journal Le son sous Linux : du pure n'importe quoi. Évalué à 2.
[^] # Re: finalement je m'en sors a peu près mais ....
Posté par Jean-Philippe Garcia Ballester . En réponse au journal Le son sous Linux : du pure n'importe quoi. Évalué à 3.
Non, PulseAudio a une sortie Jack. Je l'utilise chez moi, ça marche bien.
[^] # Re: Et les MP3 légaux ?
Posté par Jean-Philippe Garcia Ballester . En réponse au journal Comment protéger ses serveurs. Évalué à 2.
[^] # Re: Parefeu
Posté par Jean-Philippe Garcia Ballester . En réponse à la dépêche FreetuxTV 0.4.0 disponible. Évalué à 2.
Tu peux utiliser http://github.com/maru-sama/rtsp-linux-v2.6
[^] # Re: Qui se sert encore des clients lourds ?
Posté par Jean-Philippe Garcia Ballester . En réponse à la dépêche Thunderbird 3.0 est sorti. Évalué à 3.
[^] # Re: Qui se sert encore des clients lourds ?
Posté par Jean-Philippe Garcia Ballester . En réponse à la dépêche Thunderbird 3.0 est sorti. Évalué à 3.
Autre exemple, dans certaines entreprises seul le smtp du réseau interne est accessible.
[^] # Re: Paquet
Posté par Jean-Philippe Garcia Ballester . En réponse au journal Chrome disponible sous linux. Évalué à 4.
À mon humble avis qui vaut ce qu'il vaut, il suffit de deux choses pour que le développeur n'est rien à faire pour la distribution d'un programme sous Linux : que le logiciel soit libre, et qu'il soit populaire.
Comme Google Chrome est déjà populaire, les problèmes rencontrés pour la distribution sont uniquement liés à sa non-liberté, d'où mon commentaire.
Oh oh oh, t'es un petit rigolo toi, on me l'avait pas encore fait celle la, pourtant ca fait un moment que je tapes sans les accents. Si un seul mot te fait partir dans des delires pareils, faudrait penser a arreter la coke quand meme.
Roh, pourquoi tu m'agresses, alors que j'essaie (maladroitement) de faire un peu d'humour ? Viens donc me faire un gros câlin !
[^] # Re: Paquet
Posté par Jean-Philippe Garcia Ballester . En réponse au journal Chrome disponible sous linux. Évalué à 2.
1/ Tous les utilisateurs Windows sont contents du packaging, un certain nombre des utilisateurs Linux ne le sont pas
2/ Vu que tu utilises deux méthodes de distributions différentes pour Linux et Windows (dynamique et statique), on ne peut pas vraiment savoir si l'insatisfaction des utilisateurs est inhérente à Linux : est-ce que les utilisateurs qui veulent des paquets pour leur distrib seraient satisfaits d'un binaire statique ? Si oui, il n'y a pas de surcharge de travail sur Linux par rapport à Windows. Si non, cela veut dire que l'utilisateur exige une meilleure qualité que l'utilisateur Windows (gestion automatique des mises-à-jour, partage de code, intégration dans ses outils de gestion des programmes...).
3/ Il n'est pas toujours facile de trouver des packageurs quand on a pas une base d'utilisateurs conséquente, même si parmi les utilisateurs un certain nombre sait compiler sans problèmes, et a donc la connaissance technique pour faire un paquet.
4/ La facilité apparente de Windows implique une surcharge de travail (que tu n'as pas quantifiée) : tu dois suivre toi-même les mises à jour des bibliothèques que tu utilises, et recompiler/sortir une nouvelle version lorsque une maj de sécu de la bibliothèque sort.
[^] # Re: Paquet
Posté par Jean-Philippe Garcia Ballester . En réponse au journal Chrome disponible sous linux. Évalué à 5.
1/ As-tu des plaintes des utilisateurs Windows ? Sur quoi portent-elles ?
2/ As-tu déja répondu à un utilisateur de contacter les développeur de sa distrib, et si oui, quelle à été la réaction de l'utilisateur et de la distrib ?
3/ Quelle est ta méthode de distribution des bibliothèques que tu utilises ? Si c'est un binaire statique, est-ce que surveiller les nouvelles versions des libs, gérer les problèmes de sécurité n'est pas une lourde charge ? Si tu utilises du linkage dynamique, n'est-ce pas compliqué de gérer les installations des libs, les différentes versions, etc ?
4/ Si tu distribues un binaire statique pour Windows, distribues-tu aussi un binaire statique pour Linux ? Si oui, quel est l'avis des utilisateurs sur ce binaire ?
5/ Quel est à peu près le profil de tes utilisateurs ? Power-user, débutant, les deux ?
[^] # Re: Paquet
Posté par Jean-Philippe Garcia Ballester . En réponse au journal Chrome disponible sous linux. Évalué à 2.
1/ Qu'est-ce que tu appelles critique ? Je veux dire, quel était le ton de l'utilisateur ?
2/ MediaInfo n'est pas dans l'ubuntu officiel ?
3/ Tu as demandé sur les ml/forums si un développeur ubuntu ne pouvait pas maintenir un paquet pour MediaInfo ?