150

Zerosquare (./147) :
Kevin Kofler (./146) :
Si ça compile, ça passe dans updates-testing et c'est aux utilisateurs de tester la mise à jour.
... (no comment)

Ca peut paraitre étrange, mais update-testing est fait spécialement pour être utilisé par des geeks qui vont tester les fixs et remonter les problèmes, c'est pas comme si son travail était directement releasé dans Debian stable par exemple. grin
avatar
<<< Kernel Extremist©®™ >>>
Feel the power of (int16) !

151

Non mais j'ai bien compris que testing c'est du testing (cheeky), mais normalement un développeur est censé faire ses propres tests de son côté avant de releaser. Les tests des utilisateurs c'est pour couvrir un spectre plus large que ce que peut tester un développeur, pas pour s'y substituer. Par exemple s'il y a un bug majeur, releaser sans tester ça fait perdre du temps à tous les testeurs (sans parler des multiples rapports de bugs redondants), temps qui aurait pu être économisé par des tests en amont.
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

152

Je suis d'accord, dans mon optique de qualité > quantité, de toute façon c'est la seule méthode propre pour patcher et commiter. D'un autre côté, je ne patche pas à la vitesse de Kevin grin
avatar
<<< Kernel Extremist©®™ >>>
Feel the power of (int16) !

153

en même temps si le bug est vraiment trivial, il à raison de ne pas passer des heures à mettre tout en place pour compiler non plus ^^
et la le mec il le pécho par le bras et il lui dit '

154

Si le bug est trivial, la compilation est supposée être triviale aussi, à moins qu'il faille tout recompiler à la moindre modification (auquel cas il faut revoir le système de build parce qu'il est probablement bien pourri). S'il faut plus de temps pour lancer un test que pour modifier du code, y'a des questions à se poser d'un tout autre ordre que le seul design de l'appli.

Enfin après si chaque fichier fait 5000 lignes, c'est sûr que la compilation séparée perd un peu de son intérêt grin
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

155

La compilation des RPMs recompile tout, au maximum tu as ccache, au pire tout est recompilé de zéro.

La compilation incrémentelle ne permet pas d'avoir des paquetages reproduisibles.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

156

Ah c'est vachement au point comme système, quand un RPM met 10 minutes à compiler on a le choix entre poireauter 10 minutes à chaque essai ou pousser n'importe quoi en laissant les utilisateurs jouer les démineurs ? Ça explique bien des choses sur la qualité de certains logiciels libres grin
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

157

Zeph (./154) :
Si le bug est trivial, la compilation est supposée être triviale aussi, à moins qu'il faille tout recompiler à la moindre modification

bah, ne serait-ce que monter un environnement de développement, installer les dépendances, ...
(dans le cas d'un projet PHP (je suis mieux placé pour parler), ça veut dire récupérer les sources, monter un vhost apache, créer une DB MySQL et la configurer, jouer les scripts d'install, ... )

Tout ça pour corriger une typo dans un message d'erreur sur une appli que tu utilises ?

C'est tellement plus simple de juste éditer le fichier via l'interface de github, et de faire une pull-request dans la foulée ; et pas besoin de lancer de compilation / test sur ton poste, typiquement, pour un message de ce genre (les tests automatisés sur la plate-forme d'intégration continue seront joués, quoi qu'il en soit)
Zeph (./156) :
quand un RPM met 10 minutes à compiler on a le choix entre poireauter 10 minutes à chaque essai ou pousser n'importe quoi en laissant les utilisateurs jouer les démineurs ?

compiling.png
avatar
Tutorial C (TI-89/92+/v200) - Articles Développement Web (PHP, Javascript, ...)
« What is the sound of Perl? Is it not the sound of a wall that people have stopped banging their heads against? » - Larry Wall

158

Kevin Kofler (./145) :
Si ça compile, ça passe dans updates-testing et c'est aux utilisateurs de tester la mise à jour.


6a0120a85dcdae970b0128776ff992970c-pi

KK Seal of approval.
avatar
Ceci est ton premier et dernier message sur ce forum © Bovido - FAIL
Project Euler friend key : 24892220308696_743c9da418b3f926c5f3ce9f183fb753

159

sauf que, si j'ai bien suivi, il teste pas si ça passe sur sa machine tongue
avatar
Tutorial C (TI-89/92+/v200) - Articles Développement Web (PHP, Javascript, ...)
« What is the sound of Perl? Is it not the sound of a wall that people have stopped banging their heads against? » - Larry Wall

160

Folco (./150) :
Ca peut paraitre étrange, mais update-testing est fait spécialement pour être utilisé par des geeks qui vont tester les fixs et remonter les problèmes, c'est pas comme si son travail était directement releasé dans Debian stable par exemple.
avatar
<<< Kernel Extremist©®™ >>>
Feel the power of (int16) !

161

oué, je dis pas le contraire, qu'il y a testing qui est là pour que des gens testent.

mais ça me "choque" quand même, le principe de faire un fix / une modification de code (autre que corriger une typo dans un message d'erreur ou approchant, quoi) et de le pas le/la tester un minimum de son côté avant de publier.
avatar
Tutorial C (TI-89/92+/v200) - Articles Développement Web (PHP, Javascript, ...)
« What is the sound of Perl? Is it not the sound of a wall that people have stopped banging their heads against? » - Larry Wall

162

Y'a un bug avec un testcase, tu fais une correction, la logique voudrait que tu appliques toi même le testcase pour t'assurer au moins que le bug n'est plus là...
avatar
Webmaster du site Ti-FRv3 (et aussi de DevLynx)
Si moins de monde enculait le système, alors celui ci aurait plus de mal à nous sortir de si grosses merdes !
"L'erreur humaine est humaine"©Nil (2006) // topics/6238-moved-jamais-jaurais-pense-faire-ca

163

vince (./162) :
la logique voudrait que tu appliques toi même le testcase pour t'assurer au moins que le bug n'est plus là...

En étant un peu plus extrémiste que ça, plutôt que "la logique" et/ou "toi-même", je serais tenté de dire "le hook de pre-commit" ^^

Mais j'admets qu'il est plus facile d'avoir un hook de pre-commit qui lance des tests unitaires sur des langages de scripts (pas de phase de compilation, notamment) -- et il faut aussi avoir des tests unitaires ; et que le bug coresponde à quelque chose de testable unitairement (lancer des tests fonctionnels ou d'intégration en hook de pre-commit, ça peut être un peu plus compliqué / lourd)
avatar
Tutorial C (TI-89/92+/v200) - Articles Développement Web (PHP, Javascript, ...)
« What is the sound of Perl? Is it not the sound of a wall that people have stopped banging their heads against? » - Larry Wall

164

magauss (./158) :
6a0120a85dcdae970b0128776ff992970c-pi
KK Seal of approval.

Non, c'est "If it compiles, ship it!" (Linus Torvalds). tongue
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

165

Zeph (./112) :
Ah bah pour le coup, même en C# où il n'est pas obligatoire d'avoir une classe par fichier (c'est juste l'une des recommandations de Microsoft) je me force à le faire. D'une part ça découpe la logique d'une façon assez simple à comprendre (puisqu'une classe = une et une seule responsabilité), et puis c'est un très bon moyen de se rendre compte quand on fait n'importe quoi et qu'il y a 150 petites classes qui se baladent partout, c'est plus facile à dissimuler qu'un immonde fichier de 800 lignes grin

Je ne comprends pas l'argument "redondance" d'ailleurs, si chaque fichier contient une classe, logiquement chaque classe remplit un rôle qu'elle est seule à accomplir, où est la redondance ? (à part dans la ligne "namespace Bidule" en haut, à la limite, mais bon ça reste raisonnable comme prix à payer ^^)

Je ne vois vraiment pas le rapport. Ce n'est pas parce que tu mets plusieurs classes que chaque classe va avoir plusieurs responsabilités hum

Pour la redondance, on perd un niveau de hiérarchie (dossier > fichier > classe > méthode) gratuitement. Et quand j'ai plusieurs classes toutes petites (parfois ça arrive, même en codant proprement grin), c'est quand même pratique de pouvoir toutes les regrouper en un seul fichier.


Folco (./150) :
Zerosquare (./147) :
Kevin Kofler (./146) :
Si ça compile, ça passe dans updates-testing et c'est aux utilisateurs de tester la mise à jour.
... (no comment)

Ca peut paraitre étrange, mais update-testing est fait spécialement pour être utilisé par des geeks qui vont tester les fixs et remonter les problèmes, c'est pas comme si son travail était directement releasé dans Debian stable par exemple. grin

Ce n'est pas une raison pour coder n'importe comment embarrassed
C'est quand même le meilleur moyen d'introduire des bugs sur des fonctions rarement utilisées qui ne seront trouvés que deux ans après quand ça ne sera plus le même mainteneur aux commandes et qu'il n'aura aucune idée de ce qui a pu arriver...
robinHood (./153) :
en même temps si le bug est vraiment trivial, il à raison de ne pas passer des heures à mettre tout en place pour compiler non plus ^^

couic
Ce n'est pas parce qu'un bug est trivial à corriger qu'il sera détecté rapidement (ou détecté tout court) et facile à identifier. Et inversement, d'ailleurs...

Kevin Kofler (./139) :
robinHood (./136) :
l'expérience permet de se passer de conception préalable, du moins en apparence, pour des choses simple on peu coder direct mais le papier + crayon est bien généralement incontournable, la réflexion avant l'implémentation est reine

S'il y a une chose que je n'utilise pas quand je code, c'est du papier!

Il n'y a pas que ça que tu n'utilises pas, manifestement…
avatar
<<< Kernel Extremis©®™ >>> et Inventeur de la différence administratif/judiciaire ! (©Yoshi Noir)

<Vertyos> un poil plus mais elle suce bien quand même la mienne ^^
<Sabrina`> tinkiete flan c juste qu'ils sont jaloux que je te trouve aussi appétissant

166

flanker (./165) :
Et quand j'ai plusieurs classes toutes petites (parfois ça arrive, même en codant proprement ), c'est quand même pratique de pouvoir toutes les regrouper en un seul fichier.

J'avais posé la question de l'organisation des fichiers en commençant le C++, Nil m'avait dit qu'il regroupait les classes par métier, et c'est plutôt pas mal.

Par exemple, j'avais une classe "Icone", classe générique à dériver -> 1 source
1 classe EcranTrucmuche avec deux Icones, bon ben ça faisait aussi un source, parce que c'était cohérent d'avoir ça ensemble, c'était fait pour marcher ensemble.
avatar
<<< Kernel Extremist©®™ >>>
Feel the power of (int16) !

167

squale92 (./157) :
bah, ne serait-ce que monter un environnement de développement

Mais t'es déjà supposé en avoir un, sinon je vois même pas pourquoi tu développes ^^
C'est tellement plus simple de juste éditer le fichier via l'interface de github, et de faire une pull-request dans la foulée

Si c'est pour corriger un message d'erreur ou un fichier de config, à la limite (et encore...), mais pour le reste ta technique c'est *LA* solution de flemmard grin (et ça n'est certainement pas une bonne pratique)
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

168

flanker (./165) :
Je ne vois vraiment pas le rapport. Ce n'est pas parce que tu mets plusieurs classes que chaque classe va avoir plusieurs responsabilités hum

Moi non plus, j'ai écrit ça où ?
Et quand j'ai plusieurs classes toutes petites (parfois ça arrive, même en codant proprement grin)

Ça arrive *surtout* en codant proprement. Après ça dépend de la définition de "propre" bien sûr, visiblement KK et robinhood n'ont pas la même que les autres grin
c'est quand même pratique de pouvoir toutes les regrouper en un seul fichier.

sick non
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

169

(tâchons de mettre tout le monde d'accord pour cette nouvelle année tripo)

En fait, il manque le concept de sous-fichiers dans les FS modernes, ça pourrait servir pour ces petites classes. embarrassed
avatar
<<< Kernel Extremist©®™ >>>
Feel the power of (int16) !

170

D'accord avec le fait que même en C# on ne devrait pas le faire, mais je suis assez nouveau dans le domaine et je m'en suis servi pour des interfaces typiquement. Dans un fichier contenant l'interface qui représente un client HTTP générique, j'ai mis aussi l'interface représentant la réponse, qui n'est pas utilisée ailleurs mais qui ne peut pas être une classe interne puisqu'on parle d'interface. J'en ai fait de même avec les événements (*EventArgs) : ils pourraient être des classes internes mais ça ne se fait pas, ils ne sont pas utilisés ailleurs alors je ne voulais pas leur donner un fichier dédié et préférais les laisser près du code qui les utilise : c'est là où on pourrait s'attendre (subjectivement) à les trouver.
Mais c'est une position ouverte pour le moment, je ne sais pas bien.

Sinon pour ma part, chose assez peu commune j'ai été énormément inspiré par l'Objective-C parmi les langages que j'ai eu la chance d'utiliser. Déjà le langage lui même et le fait qu'il bouffe les nil est intéressant, ça enlève pas mal de if justement. Tiens je vais envoyer un message de notification à un objet ; plutôt que réfléchir sur le cas de nullité, on peut simplement se dire que si l'utilisateur nous a passé nil pour cet objet, c'est qu'il n'est pas intéressé par ces notifications, donc rien ne se passera. Une liste est nil ? Ca veut dire qu'elle a zéro élément : facile à prouver que tout ira bien. Pour l'autre part l'API Cocoa m'a fait quitter l'esprit java où on use et abuse de l'héritage, désormais je préfère la délégation et l'implémentation de protocoles (interfaces) pour répondre au besoin d'un autre objet ou d'une méthode, du moins si l'objet en question est censé persister (sinon les blocks/delegates à la C# font bien l'affaire également). Ca fait assez peu de temps que j'ai adopté ça, mais les derniers projets que j'ai dû commencer et sur lesquels j'ai appliqué ça ont été un vrai bonheur à maintenir. Plus ça va et plus je pense sincèrement qu'on ne devrait pas s'obstiner à apprendre le java à l'école, ou pas au niveau où la plupart le font. En fin de compte les classes anonymes sur lesquelles presque tout repose ça reste quand même un design très particulier, et les modèles comme Swing sont loin d'en être.
avatar
Highway Runners, mon jeu de racing à la Outrun qu'il est sorti le 14 décembre 2016 ! N'hésitez pas à me soutenir :)

https://itunes.apple.com/us/app/highway-runners/id964932741

171

De manière générale je suis plutôt de l'avis de Zeph que de l'avis opposé en ce qui concerne le fait de mettre plusieurs classes en un fichier.
Mais pouvoir mettre plusieurs classes (ou assimilés) dans un même fichier c'est quand même pratique dans certains cas :
- Des fois on peut décider de faire un groupement logique et régulier des classes par fichier. Il faut que ce soit un modèle spécifique/logique, défini à l'avance, et constant dans la partie du projet où il est utilisé (pas dans un seul et unique fichier, quoi embarrassed). Par exemple je définis un "modèle" où j'ai plusieurs tuples de classes (par exemple des paires delegate + EventArgs associé), et je décide de faire un fichier par tuple plutôt qu'un fichier par classe.
- Aussi, en C# on peut faire de manière valide une classe A et une classe A<T>. Logiquement, les fonctionnalités de A<T> devraient être assez proche de celles de A, et A<T> dérivera probablement directement de A (ou l'inverse), donc tu les mets dans le même fichier… smile (De même pour A<T, U>, A<T, U, V>, …)
- Et puis, typiquement, quand on génère du code (par exemple des DataTable de merde) avec un template (.tt), heureusement qu'on peut fourrer tout le code au même endroit dans le même fichier ! wink
avatar
Le scénario de notre univers a été rédigée par un bataillon de singes savants. Tout s'explique enfin.
T'as un problème ? Tu veux un bonbon ?
[CrystalMPQ] C# MPQ Library/Tools - [CrystalBoy] C# GB Emulator - [Monoxide] C# OSX library - M68k Opcodes

172

Zeph (./167) :
squale92 (./157) :
bah, ne serait-ce que monter un environnement de développement
Mais t'es déjà supposé en avoir un, sinon je vois même pas pourquoi tu développes ^^

Bah, je peux vouloir corriger un truc mineur dans un soft / une appli web que j'utilise ; sans que ce soit pour autant un des logiciels sur lesquels je développe (dans la pratique, ça m'arrive de temps en temps de voir une typo ou une faute de grammaire et qu'elle me raye suffisamment les yeux pour que j'ai envie de la corriger, et que je sois prêt à y passer quelques minutes -- mais sans pour autant avoir le temps de monter un environnement de dev pour).
Après, quand tu fais une PR (ou soumet un patch, au pire) sur un projet que tu connais assez mal, le gars qui reçoit la PR est censé un peu réfléchir aussi avant de la merger ^^
Zeph (./167) :
C'est tellement plus simple de juste éditer le fichier via l'interface de github, et de faire une pull-request dans la foulée
Si c'est pour corriger un message d'erreur ou un fichier de config, à la limite (et encore...), mais pour le reste ta technique c'est *LA* solution de flemmard (et ça n'est certainement pas une bonne pratique)

Ah oui, on est d'accord : je ne fais *jamais* ça pour un fix autre qu'une correction de faute dans un libellé (ou autre truc équivalent / approchant).
En particulier, je ne soumet jamais une PR / un patch sur du *code* sans l'avoir testé ^^
avatar
Tutorial C (TI-89/92+/v200) - Articles Développement Web (PHP, Javascript, ...)
« What is the sound of Perl? Is it not the sound of a wall that people have stopped banging their heads against? » - Larry Wall

173

GoldenCrystal (./171) :
Mais pouvoir mettre plusieurs classes (ou assimilés) dans un même fichier c'est quand même pratique dans certains cas

flanker (./165) :
Pour la redondance, on perd un niveau de hiérarchie (dossier > fichier > classe > méthode) gratuitement. Et quand j'ai plusieurs classes toutes petites (parfois ça arrive, même en codant proprement ), c'est quand même pratique de pouvoir toutes les regrouper en un seul fichier.


C'est l'une des raisons d'être des inner classes java.
squale92 (./161) :
mais ça me "choque" quand même, le principe de faire un fix / une modification de code (autre que corriger une typo dans un message d'erreur ou approchant, quoi) et de le pas le/la tester un minimum de son côté avant de publier.


pencil un fix doit entrainer des tests unitaires pour prévenir toute régression.


avatar
Ceci est ton premier et dernier message sur ce forum © Bovido - FAIL
Project Euler friend key : 24892220308696_743c9da418b3f926c5f3ce9f183fb753

174

Pen^2 (./9) :
Enfin de toutes façons, on peut très bien se débrouiller avec if+goto aussi, je ne vois pas ce que le while a de si spécifique confus


PS : sans le break on peut faire ça je suppose (enfin bon, ça revient à un break cheeky)
bool continue= true ;
while ( continue && cond ) {
   A
   continue= false
}
test= true ;
while ( continue && !cond ) {
   B
   continue= false
}



boah, tu peux faire un while() sans goto juste avec un if...
en utilisant de la recursion.. trioui trilove
onur (./24) :
ok merci pour tes remarques.

comment tu ferais void accident(Vehicule v) de l'exemple 1, sans if, en appelant accidentVelo et accidentGrave dans son corps?


typedef void (*FnAccident)(Vehicule);

void accident(Vehicule v)
{
    void *cbVelo = (void*)&accidentVelo;
    void *cbGrav = (void*)&accidentGrave;

    int32_t pneusSelector = 2 - (int32_t)v.nbPneus;
    ssize_t selectMask = (ssize_t)(pneusSelector >> 31);

    FnAccident cb = (FnAccident)((void*)((ssize_t)cbVelo + selectMask & ((ssize_t)cbGrav - (ssize_t)cbVelo)))

    cb(v);
}


#Awesome# ok, c'est pas tres portable cheeky

bon, ou a la limite
typedef void (*FnAccident)(Vehicule);

enum { kMaxPneus = 6 };
FnAccident _accidentJumpTable[] =
{
    &accidentComique,
    &accidentVelo,
    &accidentTricycle,
    &accidentGrave,
    &accidentWtf1,
    &accidentWtfBBQ,
};
static_assert(ARRAY_COUNT(_jumpTable) == kMaxPneus);

void accident(Vehicule v)
{
    int32_t pneusId = 1 - v.nbPneus;
    int32_t slector= (kMaxPneus - v.nbPneus) >> 31;
    int32_t clampedId = pneusId & (pneusId >> 31);
    uint32_t lookup = clampedId + slector & (kMaxPneus - 1 - clampedId);

    assert(lookup < kMaxPneus);
    _accidentJumpTable[lookup](v);
}


...

#Awesome# ?


#bav#

EDIT: hum merde j'ai loupe 5 pages en fait #trihum#
avatar
HURRRR !

175

Edited_3659

176

de se rapprocher du fonctionnel? #trihum#
avatar
HURRRR !

177

se prendre la tête pendant 6 pages


smile
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

178

grin
avatar
<<< Kernel Extremis©®™ >>> et Inventeur de la différence administratif/judiciaire ! (©Yoshi Noir)

<Vertyos> un poil plus mais elle suce bien quand même la mienne ^^
<Sabrina`> tinkiete flan c juste qu'ils sont jaloux que je te trouve aussi appétissant

179

Godzil (./177) :
se prendre la tête pendant 6 pages


smile


GT lol
avatar
< SCPCD > j'aurais du dire "les doigts dans le cul vu que le java c'est de la merde"
Je suis Goto !

180

C'est une question que je me pose c'est tout smile
Un langage où une variable ne peut affectée qu'une fois dans une fonction permet d'avoir une VM qui peut faire des choses intéressantes : cf erlang.
Je me demandais ce qu'un langage qui impose de ne pas écrire de test conditionel pourrait donner.

Sinon, concernant le java, un peu en retard:
not-sure-if.png
Tout ce qui passe pas par le port 80, c'est de la triche.