# Hardware & Software > Software >  Le topic de la programmation: codée exit(1) avec ChatGPT

## vectra

La suite du topic.

Comme ducon ne voulait pas être le papa du thread, J'en ai hérité.
Tremblez, pauvres fous qui programmez en langages interprétés ou faiblement typés  ::o: 


Sinon, le lien vers le premier topic de la programmation (nevar forget):
http://forum.canardpc.com/threads/56...r-et-compagnie


Quelques stickies intéressants sur Git:
 Flight rules for git, un manuel au cas par cas pour vous dépatouiller.


Quelques liens thématiques par questions (ouvert à suggestions / compléments).

*Trouver un bouquin de chevet en C++:* ici
Pour aller plus loin: ici*Discussion sur des libsGUI modernes en C++:* ici*Parser des arguments de programme en C:*
C: getopt_longC++: boost program_options *Les noirauds qui whinent sur la vectorisation:* ici*... et qui partent sur de la programmation FPGA en langage fonctionnel:* là* où l'on découvre les joies du Pair Programming:* là* où l'on comprend que l'AVX512, c'est pas tant la fête sur skylake:* là* où l'on parle de synchros de threads* là


_old titles: 
Le topic de la programmation V2, string, chaînes, cuir et compagnieLe topic de la programmation en assembleur ou en shader (sinon c'est trop facile)Le topic de la programmation vraiment très générale (monde de merde)Le topic de la programmation et des programmateurs de machines à laverLe topic de la programmation: de l'Arduino au FPGA, jusqu'où s'arrêteront-ils?Le topic de la programmation: le Java c'est moins bien que l'assembleur x86 (dixit un prog java)Le topic de la programmation: et si on commençait plutôt par OCaml, Prolog et Lisp?Le topic de la programmation: et si on brûlait Charmide pour délit de lèse-x86?Le topic de la programmation: Guido, si tu nous lis: MerdeLe topic de la programmation: Voici et Gala se mèlent de la programmationLe topic de la programmation: spectre et meltdown, et si on revenait au 68000?Le topic de la programmation et des IDE: Emacs, VI, et les casual-friendlyLe topic de la programmation: canards contre Coq, certains plus égaux que d'autresLe topic de la programmation: stop le dev, la recherche ça paie mieuxLe topic de la programmation: BSOD sur GitHub après erreur de Windows UpdateLe topic de la programmation: la guerre des IDE comme marronier estivalLe topic de la programmation: Oui-Oui au pays des IDEsLe topic de la programmation: Windev, ze french diseaseLe topic de la programmation: LISP, c'est le bien (et OCaml est un brave type aussi)Le topic de la programmation: ou comment troller avec des tableauxLe topic de la programmation: Commodore Amiga. Même qu'y avait emacs de fourni.Le topic de la programmation: et des Gits à risqueLe topic de la programmation: libBrain.so.0.0 not foundLe topic de la programmation: templatez for dummiezLe topic de la programmation: not safe for javascript kiddiesLe topic de la programmation MMA Arena: Atlassian VS GitlabLe topic de la programmation: leave Windows alone!Le topic de la programmation: AMOS, Blitz & GFA Basic >> PythonLe topic de la programmation: retour au Journal du HardLe topic de la programmation: tchoupi découvre VisualLe topic de la programmation: enlarge your micro-service


candidates: Le topic de la programmation V2: safe space pour langages interprêtés_


*
Autres topics d'intérêt:*
Le topic de l'IA:ici
Plus de détails sur les récentes failles hardware:ici

----------


## Patate

Bah le thread est là, c'est le principal non ? C'est quoi l'intérêt d'être l'OP ?

----------


## rOut

> Bah le thread est là, c'est le principal non ? C'est quoi l'intérêt d'être l'OP ?


Ben t'as plus de pouvoir.

----------


## Patate

Pour changer le titre  :^_^:

----------


## ducon

Et faire venir les gens avec un beau premier message.

----------


## vectra

Je prends!  ::o:

----------


## Patate

> Je prends!


Tu sens la pression là...

----------


## Nattefrost

Flag.  ::ninja::

----------


## vectra

Bon, j'inaugure...

J'ai encore un vieux Core i5 2500K que je n'arrive pas à OC proprement (je n'aime pas ça à la base), avec de la DDR3 1600. Je voudrais le mettre à jour pour un CPU plus récent en gardant en tête les performances pour de la programmation 'type HPC' telle que j'ai pu vous rabattre les oreilles avec à longueur de topic. Soit, OpenMP, bande-passante mémoire, streaming SSE, et programmation scientifique en général.

D'après vous, je peux attendre de belles évolutions de performances avec le Skylake/Kaby Lake? Y aurait-il des modèles abordables sur le marché pour ne pas sacrifier le PEL tout en étant ébloui par l'upgrade?

----------


## Møgluglu

Réponse courte : non.

Intel a bien segmenté ses gammes.
Soit tu es riche, et tu attends la sortie de Skylake-X pour prendre une config à base de Core i9 voire de Xeon metal et tu auras AVX-512 et 4 canaux mémoire.
Soit tu es un prolo, et tu prends le max de cœurs et de GHz que tu peux avoir pour ton budget, et actuellement c'est plutôt chez AMD que ça se passe.

----------


## vectra

Mais l'intérêt d'utiliser plein de coeurs si on est limité en BP mémoire?
Ils ont 4 canaux chez AMD?

----------


## FB74

Si ça peut intéresser du monde, *Humble Book Bundle, Data Science*:
https://www.humblebundle.com/books/data-science-books

 ::):

----------


## Patate

Petite question de cpp. Dans mon projet, je voudrais présenter la déclaration de mes items comme ça pour plus de simplicité dans un fichier constants :



```
static const std::string ITEM_WEAPON[][7] = { 
    {"1", "Dague", "Une dague !", "t", "red", "5", "10"},
    {"2", "Epée", "Une épée !", "t", "red", "7", "15"}  
};
```

Ca peut fonctionner comme ça, mais est-ce qu'il est possible de faire la même chose mais avec différent type quitte à passer pas une struc :



```
static const std::string ITEM_WEAPON[][7] = { 
    {1, "Dague", "Une dague !", "t", TCODColor::red, 5, 10},
    {2, "Epée", "Une épée !", "t", TCODColor::red, 7, 15}  
};
```

En gros, est-ce qu'on peut initialiser un objet de la sorte ?

----------


## rOut

Oui https://godbolt.org/g/ptLjBf

----------


## vectra

J'allais faire la même  ::o: 
Par contre, un petit size_t pour l'uid (possiblement beaucoup, strictement positif) peut-être?

----------


## Patate

Tout simplement ! Merci  ::P: 

- - - Mise à jour - - -




> J'allais faire la même 
> Par contre, un petit size_t pour l'uid (possiblement beaucoup, strictement positif) peut-être?


Oui possible c'est vrai. Mais est ce que ce genre d'optimisation est valable à ce niveau (petit jeu)

----------


## vectra

Le typage, c'est pas de l'optimisation. C'est a minima de la sémantique, et a maxima ça permet de ne pas se taper l'overflow, même si je me doute qu'il n'arrivera pas avec un projet étudiant.
En tous cas, côté examinateur, je dirais que ce sont des points vite perdus sur la partie la plus scolaire.

----------


## Patate

Ok ! Toujours pas testé mais un string au lieu du char* c'est plus cpp non ?

----------


## rOut

Ben si tu ne comptes pas modifier la chaine de caractères, ce qui semble être le cas, c'est inutile de mettre ça dans une std::string. Le char const* va t'économiser une allocation dynamique.

Bon, après tu as peut être envie d'avoir .size() et compagnie...

----------


## Patate

Ah yes ! Disons que j'ai pas du tout cette vision de l'optimisation quand je programme. Du moins mes projets n'en demandent pas spécialement. Mais j'essai tout de même de viser un cpp plus moderne.

----------


## rOut

A mon avis c'est pas encore de l'optimisation, mais plutôt de faire les choses les plus simplement possible. De plus comme disait vectra, ça peut avoir une valeur sémantique :

- std::string, pour les chaines variables
- char const* const, pour les chaines constantes, qui ne changeront jamais de valeur

----------


## Patate

Je note ! Merci  :;): 

J'ai commandé le bouquin de Meyers je sens que je vais être largué !
Si vous voulez jeter un œil ou le perdre sur mon projet en cours...

https://github.com/kz-dev/rmush/tree/master/src

----------


## Patate

D'ailleurs au sujet de size_t c'est au moment de la compilation qu'il definit la taille du type?

----------


## Cwningen

Oui, comme tous les types, la taille doit être connu au moment de la compilation. Je ne suis pas sûr de bien comprendre la question.

----------


## Raplonu

C'est pas exactement ça. size_t est (grossièrement) défini par les sources qu’utilise ton compilo.
Ce que tu dois retenir est dans la doc :



> typedef /*implementation-defined*/ size_t;
> size_t can store the maximum size of a theoretically possible object of any type (including array).


Du coup, on en déduit qu'il s'adapte aux OS (32/64 bit).

----------


## Patate

> Oui, comme tous les types, la taille doit être connu au moment de la compilation. Je ne suis pas sûr de bien comprendre la question.





> C'est pas exactement ça. size_t est (grossièrement) défini par les sources qu’utilise ton compilo.
> Ce que tu dois retenir est dans la doc :
> 
> 
> Du coup, on en déduit qu'il s'adapte aux OS (32/64 bit).


Ok merci pour les précisions !

----------


## vectra

Y'a une formation OpenMP/MPI au CERFACS en Novembre. Je me tâte  ::unsure:: 

Sinon, si des gens s'y connaissent en AWS pour des applications distribuées en C++, je prends toute info...

----------


## Lazyjoe

Viens on est bien.  :Cigare: 
Par contre c'est vraiment parallélisme 101, le public habituel c'est les thésards en CFD qui veulent un peu comprendre comment marche le parallélisme des codes qu'ils vont utiliser.

----------


## TarteAuxFleurs

Je suis tout triste, à l'université tous les projets que l'on doit rendre doivent compiler sur g++4.4  ::(: 
Adieux smart pointers ...

----------


## Taro

Ah, les smart pointers  ::rolleyes:: 

Les vrais n'utilisent pas ce mécanisme de faible  :Cigare: 

Sinon je me suis commandé deux bouquins qui ont l'air vraiment bien. Un sur le développement C/Asm pour ARM (récent et introuvable en France, du coup go UK), un autre sur le reverse engineering et entres autres la couche kernel de Windows.  :Bave:

----------


## Charmide

La valeur de []+{} est consistante entre les plateformes.

----------


## Orhin

Le sel est pur.  :Indeed:

----------


## William Vaurien

> http://lmgtfy.com/?q=framework+.net+4.7
> Et tu peux lier l'installateur .Net à ton projet :
> 
> Suffit de faire un package complet.


Oui, sauf que quand le framework ne veut pas s'installer, ça te fait une belle jambe... On retombe dans la même merde qu'un prog java sans sa JVM... 

et mon PC refuse 4.7, mais accepte 4.6.2. Et seulement avec l'installeur complet, pas le web installer qui se fait bloquer sur mon poste. Tu parles d'un bordel !

J'avais juste besoin d'évacuer ma frustration et de cracher un peu sur .NET...


Et je me disais aussi que ça manquait de blague sur ce bon vieux javascript, le cousin idiot qui est devenu la star du moment... 
A force de faire évoluer le langage, il va bien finnir par ressembler à Java, et à force de faire des 'transpiler' (ce mot  ::rolleyes:: ), javascript 'nature' va bien finir par redevenir le truc un peu inutile qu'il était avant...

----------


## Charmide

Ouais, plus personne (dans les bons) ne fait du javascript en vrai, la question c'est devenu quel framework tu utilises voire quel truc tu compiles. 
Donc au final, que le langage soit caca a peu d'importance. 

Mais bon j'ai fait genre 12 pages pour défendre "l'écosystème" sur ce topic ou celui du web il y a quelques mois, du coup j'ai arrêté et je me content de blagues  ::ninja:: 

- - - Mise à jour - - -

J'ai commencé un side-project en Elm au boulot (#yolo), pour l'instant personne n'a remarqué j'attends de voir les réactions  ::trollface::

----------


## William Vaurien

Tiens je viens de voir ça: doppio une JVM en typescript => execution de code java dans le browser (sans plugin)  ::): 



> This demo comes packed with a number of JVM languages (Scala, Groovy, Scheme),  
> some basic programs and utilities (javac, accounting software), and standard    
> shell commands that interact with our in-browser filesystem!
> ...
> Hop into Clojure's repl with the `clojure` command. Or try `nashorn`, 
> repl for JavaScript running on the JVM!


 :Perfect:

----------


## Orhin

> Ouais, plus personne (dans les bons) ne fait du javascript en vrai, la question c'est devenu quel framework tu utilises voire quel truc tu compiles. 
> Donc au final, que le langage soit caca a peu d'importance.


Ceci.

Et c'est d'ailleurs vrai pour tous les langages en fait.
Framework + environnement >>> qualités intrinsèques du langage

A moins de vouloir réinventer la roue et tout recoder soit même à chaque fois bien sur (ou d'avoir des très gros besoins de perf).

----------


## William Vaurien

En même temps avec des aberrations ( ::ninja:: ) come node.js, il y a des dev qui se font avec du js. Et du coup les compétences 'brutes' en js sont demandées...

----------


## Charmide

> Ceci.
> 
> Et c'est d'ailleurs vrai pour tous les langages en fait.
> Framework + environnement >>> qualités intrinsèques du langage
> 
> A moins de vouloir réinventer la roue et tout recoder soit même à chaque fois bien sur (ou d'avoir des très gros besoins de perf).


Tu as raison, c'est loin d'être JS spécifique. On y surestime l'importance de la qualité du langage parce qu'il est particulièrement caca mais je pense que c'est une erreur commune. 

Au-delà de l'aspect framework+environnement, ça me rappelle certains fanatiques de la programmation fonctionnelle qui font croisade pour que tout le monde utilise Haskell alors qu'ils devraient plutôt passer leur temps à insister sur des design patterns ou des bonnes pratiques qui découlent de l'approche fonctionnelle et que tu peux appliquer dans n'importe quel langage et contexte.

- - - Mise à jour - - -




> Tiens je viens de voir ça: doppio une JVM en typescript => execution de code java dans le browser (sans plugin)


Tiens je crois pas que j'avais vu ça passer, c'est bô  ::o: 

C'est vraiment attaqué de partout ce problème entre les trucs type ScalaJS, cette approche là, le webassembly...

----------


## Dross

> Donc non, le framework .net n'est pas fourni


Il est fourni, mais pas les versions postérieures à la dernière mise à jour (ton windows n'est donc pas à jour). 
Comme tu pourra le voir avec l'historique des versions.




> Ba oui, parce que contrairement à Java qui n'est pas lié plus que ça à l'OS (une version windows 32 et une 64, pareil pour Linux...), il y a douze milles variantes du framework .net en fonction de l'os, des patchs , des la version en cours et de l'âge du capitaine.


Pas douze milles : 13 depuis la première version (cf lien plus haut).
On compare avec le bordel Java ?  ::P: 




> Alors que bon, un programme Java (ou Kotlin, ou Groovy ou Scala) se package très bien avec sa propre JVM et peut s'installer et se lancer sans avoir besoin de droit admin...


C'est ce que fait le nouveau Framework .NET Core, c'est pour ça que ça tourne sur toutes les archi d'ailleurs.




> Et pour savoir la version courante ??? java -version. Merci.


Ça c'est quand l'installeur d'Oracle rajoute le chemin vers l'exécutable java dans la variable d'environnement. Pour l'avoir fait il y a 3 semaines, je peut te dire que ce n'est pas le cas.


Engueule le mec qui t'a fourni du code sur la dernière version de .NET sans l'installeur pour te l'installer, car c'est pas très pro... Sans parler du fait qu'il est à peut prêt sûr qu'il n'utilise rien du 4.7, et aurait pus te l'envoyer en 4.6.

----------


## Charmide

> En même temps avec des aberrations () come node.js, il y a des dev qui se font avec du js. Et du coup les compétences 'brutes' en js sont demandées...


Moi ça me tuerait de m'entendre demander ça. Si t'es RH pourquoi pas, tu fonctionnes par mots-clés, on te dit JS tu cherches JS. 
Mais si c'est un techos/opérationnel, au secours. Ils veulent quoi, de la compréhension de la programmation par prototypes?  ::o:

----------


## Frypolar

> La valeur de []+{} est consistante entre les plateformes.


Tout à fait. Ça permet d’ailleurs de faire ce genre de chose : http://jsfiddle.net/ds1yqhhz/

- - - Updated - - -




> Tu as raison, c'est loin d'être JS spécifique. On y surestime l'importance de la qualité du langage parce qu'il est particulièrement caca mais je pense que c'est une erreur commune.


Euh ouais enfin en js il peut t’arriver des saloperies sur un paquet de frameworks juste à cause du langage de base qui est daubé. C’est tout l’intérêt de TypeScript et compagnie, on pose un bon gros coussin sur le js et on l’étouffe. Ensuite on est à peu près tranquille.

----------


## Teocali

> Il ose insulter l'assembleur avec le mot en trois lettres interdit !
> Brûlons-le !





> Tiens je viens de voir ça: doppio une JVM en typescript => execution de code java dans le browser (sans plugin)


Ok, pause. On parle d'une JVM (execution de bytecode) ou d'un interpreteur ? S'pas la même chose.

Et sinon, si j'ai bien pigé, le mec a &écrit un programme dans un langage transpilé en javascript pour convertir du code écrit dans un troisième langage vers JS toujours... le bordel.

Et "Nashorn", ça fait quand même JS->Java->JS... Rassurez-moi, s'tun _troll project_ ?

----------


## Møgluglu

Non, l'intérêt est que tu peux faire tourner ça dans un browser écrit en Java qui tourne dans une JVM sous jslinux.

Sinon, en parlant de Java, IBM a libéré sa JVM. Pour ceux que ça intéresse de voir comment c'est fait un JIT :
https://github.com/eclipse/openj9
https://www.slideshare.net/DanHeidin...pen-source-jvm

----------


## Sangoon

> En même temps avec des aberrations () come node.js, il y a des dev qui se font avec du js. Et du coup les compétences 'brutes' en js sont demandées...


Désolé, si je vous "choque" ou si ma question vous parait naïve, mais concrètement, en quoi Node.js est-il une aberration ?

De mon point de vue, y a pas grand chose de plus efficace à l'heure actuelle pour faire un backend http rapidement, et performant.

----------


## Dross

> Non, l'intérêt est que tu peux faire tourner ça dans un browser écrit en Java qui tourne dans une JVM sous jslinux.


Quelle est cette sorcellerie ?  :tired:

----------


## Charmide

> Euh ouais enfin en js il peut t’arriver des saloperies sur un paquet de frameworks juste à cause du langage de base qui est daubé. C’est tout l’intérêt de TypeScript et compagnie, on pose un bon gros coussin sur le js et on l’étouffe. Ensuite on est à peu près tranquille.


Je sais bien pour TypeScript. C'était assez explicitement inclus dans mon "plus personne (dans les bons) ne fait du javascript en vrai, la question c'est devenu quel framework tu utilises voire quel truc tu compiles."

Par contre je veux bien des exemples _concrets_ sur les "saloperies" qui t'arrivent à cause du langage de base. J'ai bossé sur du angular 1.X pendant un bon moment sans "coussin par dessus" et j'en suis pas mort. 
A te lire (encore que t'es pas le pire) on a l'impression que tous les jours tu passais 2h à débugger un truc au comportement cosmique à cause du fait que {}+[] ait un résultat chelou, ou bien à essayer de te battre contre le langage qui ne te permet pas d'implémenter une fonctionnalité critique dans ton app parce que quand t'évalues 2 == [[2]] c'est vrai. 

Perso la seule conséquence concrète du fait que le langage soit tout pourri, c'est qu'on se marre bien et qu'on peut faire des blague dessus. Et les mecs qui font pas de web peuvent se palucher sur leur supériorité intellectuelle. 

A part ça, en vrai, on a fait des tonnes de trucs pour se simplifier la vie et on a pas à toucher aux entrailles. 
Ce sur quoi t'as l'air d'être d'accord avec moi, mais c'était vrai avant ton TypeScript, ou Elm, ou Babel+JS6, ou de mettre une JVM dans ton navigateur, ou même des trucs plus light genre Flow. 

La souffrance en terme de tooling remonte probablement pré-SPA, disons circa 2005, mais même à l'époque je doute que coder en JS plutôt qu'en <n'importe quel language de script qui à l'inverse de JS est foutu de façon logique> aient hanté leurs nuits quand ils avaient à mettre de l'~AJAX~ sur leur oueb page 2.0

... Et merde je me suis fait avoir je recommence avec ces pavés.

- - - Mise à jour - - -




> Désolé, si je vous "choque" ou si ma question vous parait naïve, mais concrètement, en quoi Node.js est-il une aberration ?
> 
> De mon point de vue, y a pas grand chose de plus efficace à l'heure actuelle pour faire un backend http rapidement, et performant.


Si les gens disent ça, c'est qu'il y a juste pas d'intérêt, à part ouvrir un champ d'applications (le backend) à des mecs qui ont la connaissance de JS uniquement et pas envie d'apprendre un nouveau langage. Tu pourrais argumenter que c'est un mérite mais bof. 

Ensuite, il y a ce qui relève des qualités intrinsèques de Javascript par rapport aux autres langages qui sont disponibles en backend, là où l'argument n'e(tait)st pas applicable dans le navigateur. 

Pour te répondre sur le backend HTTP rapide, tu pouvais le faire en Flask, Sinatra, ou 12 autres trucs différents en bien plus rapidement (on peut faire la course entre npm et pip  ::ninja:: ) avant que Node.JS débarque.

Après, moi je ne n'appelerais pas ça une abbération. Hakuna matata, qu'on réinvente la roue et qu'on essaie 12 000 trucs différents, c'est comme ça qu'on avance. Y'en aura 11 999 overhypé qui servent à rien et 1 qui fera avancer le schmilblick. 
Les mecs malins choisiront des techs adaptées, ou à défaut seront efficace de toute façon.
Et ça sera toujours plus intéressant que de faire du FORTRAN  ::ninja::

----------


## Sangoon

> ...
> Pour te répondre sur le backend HTTP rapide, tu pouvais le faire en Flask, Sinatra, ou 12 autres trucs différents en bien plus rapidement (on peut faire la course entre npm et pip ) avant que Node.JS débarque.
> ...


Ok question faisabilité on peut tout faire depuis un bail, mais question démocratisation du reactive programming, node.js à quand même mis un bon coup de pied dans la fourmilière non ?

----------


## Charmide

Possible. J'ai fait très peu de node donc je n'ai pas d'avis sur le type d'architecture ou de design patterns qui y sont utilisés. Le "reactive programming" m'intéresse davantage même si c'est un de ces mots à 12 définitions. 
Du coup c'est un peu comme je disais plus haut: dans ce cas, ce genre de trucs c'est plus important que le langage et en est largement indépendant. 

Ca me fait penser que node a aussi a une réputation de générer des sacs de noeud indebuggables via stacks de callbacks de 3 mètres de haut, c'est ce qu'avance certains pour dire que c'est affreux.

----------


## Møgluglu

> Au-delà de l'aspect framework+environnement, ça me rappelle certains fanatiques de la programmation fonctionnelle qui font croisade pour que tout le monde utilise Haskell alors qu'ils devraient plutôt passer leur temps à insister sur des design patterns ou des bonnes pratiques qui découlent de l'approche fonctionnelle et que tu peux appliquer dans n'importe quel langage et contexte.


Je suis le premier à me moquer des Haskelleux (enfin surtout des Camlistes), mais là, faut pas déconner.  :tired: 

Les design patterns sont les organigrammes du 21e siècle. On utilise les designs patterns comme le programmeur des années 50 dessinait des organigrammes au gabarit sur papier quadrillé :

Comme les organigrammes ont disparu dans les années 70 avec les langages structurés, les design patterns disparaîtront quand les langages évolueront. Quand on en arrive à devoir s'imposer des disciplines de programmation, c'est un bon indice que les langages qu'on utilise sont inadaptés.
(Oui, j'ai déjà dit ça d'UML dans le précédent topic, mais je fourre les design patterns dans le même sac.)

Ta remarque s'applique parfaitement aux fanatiques de la programmation structurée, ceux qui faisaient croisade pour que tout le monde utilise Pascal avec des if-then-else et des boucles dans les années 70. Alors qu'ils auraient du plutôt passer leur temps à insister sur comment dessiner des organigrammes ou des bonnes pratiques qui découlent de la programmation structurée et que tu peux appliquer dans n'importe quel langage avec des goto.  :;): 




> Perso la seule conséquence concrète du fait que le langage soit tout pourri, c'est qu'on se marre bien et qu'on peut faire des blague dessus. Et les mecs qui font pas de web peuvent se palucher sur leur supériorité intellectuelle.


Le code n'est pas lu que par des programmeurs et des interpréteurs. Un bon langage, c'est un langage facilement analysable par les compilateurs et les outils de vérification. Comme conséquence concrètes, on peut commencer par toutes les failles de sécurité qui auraient pu être évitées ou détectées automatiquement avec un langage plus facilement analysable.

----------


## Sangoon

> Possible. J'ai fait très peu de node donc je n'ai pas d'avis sur le type d'architecture ou de design patterns qui y sont utilisés. Le "reactive programming" m'intéresse davantage même si c'est un de ces mots à 12 définitions. 
> Du coup c'est un peu comme je disais plus haut: dans ce cas, ce genre de trucs c'est plus important que le langage et en est largement indépendant. 
> 
> Ca me fait penser que node a aussi a une réputation de générer des sacs de noeud indebuggables via stacks de callbacks de 3 mètres de haut, c'est ce qu'avance certains pour dire que c'est affreux.


Le "callback hell" que tu décris en fin de ton message est effectivement un problème avec Node.js mais peut être reglé par l'utilisation de promesses, en tout cas dans tous les cas d'usages que j'ai rencontré ça fait bien le job en plus de rendre le code bien plus lisible.

----------


## Orhin

> Ca me fait penser que node a aussi a une réputation de générer des sacs de noeud indebuggables via stacks de callbacks de 3 mètres de haut, c'est ce qu'avance certains pour dire que c'est affreux.


C'était vrai à ses début.
Maintenant si t'utilises des Promise ou des Observable, t'as absolument plus ce soucis.

----------


## Charmide

> Je suis le premier à me moquer des Haskelleux (enfin surtout des Camlistes), mais là, faut pas déconner. 
> 
> Les design patterns sont les organigrammes du 21e siècle. On utilise les designs patterns comme le programmeur des années 50 dessinait des organigrammes au gabarit sur papier quadrillé :
> http://www.fh-jena.de/~kleine/histor...dsize-huge.jpg
> Comme les organigrammes ont disparu dans les années 70 avec les langages structurés, les design patterns disparaîtront quand les langages évolueront. Quand on en arrive à devoir s'imposer des disciplines de programmation, c'est un bon indice que les langages qu'on utilise sont inadaptés.
> (Oui, j'ai déjà dit ça d'UML dans le précédent topic, mais je fourre les design patterns dans le même sac.)
> 
> Ta remarque s'applique parfaitement aux fanatiques de la programmation structurée, ceux qui faisaient croisade pour que tout le monde utilise Pascal avec des if-then-else et des boucles dans les années 70. Alors qu'ils auraient du plutôt passer leur temps à insister sur comment dessiner des organigrammes ou des bonnes pratiques qui découlent de la programmation structurée et que tu peux appliquer dans n'importe quel langage avec des goto.


Je comprends pas bien l'opposition avec ce que je raconte en fait, je crois que t'as mal interprété ce que je voulais dire. 
Et derrière tu me balances un cours avec une certaine condescendance, ça fait très prof  ::trollface:: 

Ce que je ne dis pas, c'est que le langage est inutile et qu'il n'y a pas de raison d'évoluer parce que tu peux faire du code propre et arbitrairement complexe même en partant d'une base moche ou simpliste. AKA tout le monde devrait bosser sur du COBOL parce que c'est turing complet donc OSEF. 
Ma déclaration d'amour pour Scala plus haut, qui est sorti d'une équipe de chercheurs pensant justement qu'on peut aller vers le mieux et le plus productif en créant un nouveau langage, est représentatif de ça. 
Ce que je dis par contre qu'il y a une tendance à surestimer l'importance du langage parce que tout le monde aime bien une bonne vieille bataille de clochers, ou alors a ses habitudes, alors que ça n'est qu'une partie du problème. Un classique plus général dans le dev où ça se perd vite en considération sur les outils plutôt que la finalité. 
En passant, je dis bien "*certains* fanatiques". Je pensais que c'était suffisamment évident vu le contexte mais ces certains là sont bien ceux (comme encore plus camelinos par rapport aux haskelliens en effet) qui se concentrent sur le langage au détriment de ce que je considère être plus substantiel et planqué derrière. 

Sur le reste, j'ai jamais considéré les design patterns comme une contrainte imposée ou une histoire de discipline. C'est sûrement le cas pour les devs Java avec leurs Factory de Factory de Factory d'AbstractFactory de Proxy d'Observers, ou de certaines personnes qui bossent à la BNP avec des architectes nazillons, mais c'est pas mon domaine et ça me semble être une définition bien étroite. 
J'ai en tête la définition plus générale qui s'étend à plein de domaines même hors IT, au pif celle sur wikipédia: "a general reusable solution to a commonly occurring problem". 
Quelque chose me dit que ça, ça ne s'éteindra jamais peu importe les évolutions techniques. 
Ou alors il faut qu'il nous reste que des problèmes communs sans solutions réutilisables et on est pas dans la merde  ::o: 

Donc pour clarifier le passage que tu cites avec ces deux éléments: je pense qu'il y a davantage d'intérêt, pour prendre un exemple simple, à faire comprendre aux gens pourquoi l'utilisation d'un maximum de fonctions pures (un design pattern au sens que je lui donne) rend le code davantage testable, lisible et debuggable; plutôt que d'essayer de faire migrer toute l'industrie sur un langage tounaze et mathématiquement pur qui va aller tuer toute ta famille si tu tentes de déclarer une variable mutable (ce que font "certains" fanatiques). 
J'espère qu'on est au moins d'accord là-dessus !

- - - Mise à jour - - -




> Le "callback hell" que tu décris en fin de ton message est effectivement un problème avec Node.js mais peut être reglé par l'utilisation de promesses, en tout cas dans tous les cas d'usages que j'ai rencontré ça fait bien le job en plus de rendre le code bien plus lisible.





> C'était vrai à ses début.
> Maintenant si t'utilises des Promise ou des Observable, t'as absolument plus ce soucis.


J'ai 0 doute là-dessus, mais j'essayais de reconstituer l'argumentaire typique du haterz de node.

----------


## Sahnvour

"Suite" du talk de Herb Sutter à l'ACCU de cette année pour les gens qui se paluchent en ne faisant pas de web ::trollface::  qui montre des trucs sacrément cools et une bonne réflexion (sans mauvais jeu de mot) derrière.

----------


## vectra

Ca fait plaisir de revoir ce topic aussi vivant.
Dommage que je ne puisse plus participer en journée, mais ça ne saurait durer....

- - - Mise à jour - - -




> Pour ceux qui ont un niveau master dans une autre discipline, il y a aussi les masters CCI: compétence complémentaire en informatique. Ça permet d'avoir une remise à niveau et un diplôme d'informatique.


Ca intéresserait pas mal ma soeur, qui est plutôt biostat en R et qui aimerait bien être embauchable...

----------


## William Vaurien

:Popcorn:  c'est bien un peu d'animation  ::): 

Il faut bien que JVDaedelus se rende compte d'en quoi il allait se fourrer en voulant devenir dev  ::P: 


Il y a trop de matière pour répondre à tout, mais je voulais défendre Java: je dirais juste:
InternalFrameInternalFrameTitlePaneInternalFrameTi  tlePaneMaximizeButtonWindowNotFocusedStat (jdk6)

ou encore, avec un peu d'auto-dérision chez Spring:
HasThisTypePatternTriedToSneakInSomeGenericOrParam  eterizedTypePatternMatchingStuffAnywhereVisitor

Pour .NET et mon Windows pas à jour, il faut voir ça avec mon service IT. En fait j'ai déjà de la chance d'avoir un windows 10, et pas un 98 ou un XP... En comparaison un jdk/jre java peu s'installer très facilement avec un simple copié/collé et une variable d'environnement. Un utilisateur non admin peut se débrouiller pour s'installer un environnement, alors que du coup avec .NET tu dépends beaucoup plus de ton OS et de ta DSI...
Et c'était pas pour faire le troll: en fait j'aime beaucoup C#, mais il fallait remettre un peu de relativité dans le message disant: .NET c'est de la balle, le framework est pré-installé partout...

Pour Doppio, ça à l'air très sérieux: c'est à la base un projet universitaire: "et si on implémentait une JVM en javascript ?" et, en partant sur du typescript pour ne pas se mutiler le cerveau, ils ont réussi à en implémenter une.
Du coup le browser peut interpréter du bytecode, par extension charger des jar et même compiler avec sa version de javac. Et comme la JVM est capable de faire tourner autre chose que du Java, leur JVM aussi. J'imagine que certaines partie du jdk sont ignorées, mais j'aime beaucoup l'idée. Beaucoup plus que de faire du transpilage. 

Après les perfs ont l'air minable (entre 20x et 40x moins bien d'après un article), et le webassembly semble être la solution élégante pour la sortie en douceur du JS.

Et mon avis sur node.js, c'est que je ne comprends absolument pas quel besoin a été comblé par le fait de ramener JS vers le backend... J'ai déjà du mal avec les langages dynamiques pour les projets assez conséquents, alors en plus aller chercher un des langages le plus bancal pour le faire... Je comprend à la limite (et encore) pour faire du prototypage, ou un micro service ultra basique, mais j'ai beaucoup de mal avec l'argument 'avec un seul langage c'est plus simple, c'est full-stack' alors que de l'autre côté on s'escrime à s'en débarrasser à coup de frameworks et de 'transpiler'... 





> Ma déclaration d'amour pour Scala plus haut, qui est sorti d'une équipe de chercheurs pensant justement qu'on peut aller vers le mieux et le plus productif en créant un nouveau langage, est représentatif de ça.


C'est exactement pour ça que Kotlin est né et que je suis content qu'il y ait une certaine adoption: c'est pas uniquement des 'chercheurs' qui ont développé ce langage et s'il est plus limité, plus 'terre à terre', il reste plus simple à prendre en main. Comme un Java moderne. Pas mal de témoignage parle justement de devs Java qui sont efficaces en Kotlin après quelques jours, avec du code maintenable, alors qu'en Scala c'est vite un foutoir sans nom dans les sources.

Voilà voilà. Je crois que j'ai fais le tour, je vous laisse.

----------


## Charmide

> Il faut bien que JVDaedelus se rende compte d'en quoi il allait se fourrer en voulant devenir dev


BAAAASTON

C'est un peu ça quand même, vouloir faire du dev à plus d'une personne c'est avant tout s'exposer à des débats philosophiques intense et à essayer de communiquer des concepts pas toujours évident tant bien que mal. 
 ::o: 




> C'est exactement pour ça que Kotlin est né et que je suis content qu'il y ait une certaine adoption: c'est pas uniquement des 'chercheurs' qui ont développé ce langage et s'il est plus limité, plus 'terre à terre', il reste plus simple à prendre en main. Comme un Java moderne. Pas mal de témoignage parle justement de devs Java qui sont efficaces en Kotlin après quelques jours, avec du code maintenable, alors qu'en Scala c'est vite un foutoir sans nom dans les sources.


Oui, et c'est drôle de voir l'évolution parce que Scala c'était aussi ça à l'origine: appuyons nous sur la JVM qui est un truc industriel et présent partout (contrairement à la VM d'erlang  ::trollface:: ), plus une hybridation avec de la POO que tout le monde connait, pour faire passer des concepts fonctionnels qui jusque là étaient dans des langages trop "purs" et complexe pour devenir mainstream. 
Martin Odersky qui a crée le langage c'est aussi pas un chercheur en tour d'ivoire justement, il a pas mal bossé pour l'adoption de Scala dans le privé et a même lancé une boîte de consulting/services pour se faire du pognon dessus. 

Et maintenant c'est au tour de Scala d'être taxé d'élitisme/complexité et de se faire dépasser en pragmatisme !

J'en profite pour balancer cette métaphore qui faute d'être super fidèle probablement m'avait bien fait marrer:



> Scala is like an Apache attack helicopter, it is really good when you need to thoroughly destroy an enemy tank, it is not so good when you need to go to a department store in your neighbourhood.
> 
> Kotlin is just another family car, maybe with some extra gadgets and better polished than the old rust bucket you were driving (Java), but all in all, it’s just a pragmatic choice for something you intend to use for typical tasks.
> 
> Kotlin provides 90% of the benefits that are claimed by Scala for 10% the learning effort, as long as you’re not doing something equivalent to destroying enemy tanks.

----------


## deathdigger

@Vaurien, tu veux qu'on parle des fuites mémoires de java qui font que lorsqu'on développe un service avec, il faut penser à le redémarrer régulièrement ?  ::trollface:: 
Pour en revenir au choix du langage pour un débutant, je ne conseille pas python, parce qu'au niveau taf, il n'apportera pas grand chose. Faire du Java ou du C#, ça rend tout de suite un CV bankable. Et niveau apprentissage, les deux son relativement faciles. En plus, on passe de l'un à l'autre sans problèmes  ::): 
Faire du bas niveau, c'est bien pour la compréhension, mais ce n'est pas vital. Un mécanicien n'a pas besoin d'avoir le savoir d'un motoriste pour travailler (et y'a plus de boulots pour les mécaniciens que pour les motoristes).

----------


## Møgluglu

> Je comprends pas bien l'opposition avec ce que je raconte en fait, je crois que t'as mal interprété ce que je voulais dire. 
> Et derrière tu me balances un cours avec une certaine condescendance, ça fait très prof


Eh mais attends j'ai même pas été lourd, d'habitude je remonte à la notation mécanique de Babbage ou au moins au Plankalkül de Zuse, avec encore plus de condescendence et d'analogies anachroniques foireuses.  ::o: 
(D'ailleurs ça m'a donné une idée, dans mon cours je vais parler des GPU de Jacquard et des canuts qui programmaient leurs shaders sur cartes perforées. Et je suis pas prof.)




> J'ai en tête la définition plus générale qui s'étend à plein de domaines même hors IT, au pif celle sur wikipédia: "a general reusable solution to a commonly occurring problem". 
> Quelque chose me dit que ça, ça ne s'éteindra jamais peu importe les évolutions techniques. 
> Ou alors il faut qu'il nous reste que des problèmes communs sans solutions réutilisables et on est pas dans la merde


Oui, c'est justement ce qui me gène dans les design patterns. Ils donnent (ou sont utilisés comme) des recettes de cuisine, des solutions toutes faites, plutôt que des concepts qui permettent de raisonner à un niveau d'abstraction plus haut. Si c'est simplement un raisonnement "j'identifie un problème de type x -> j'applique le design pattern y", alors c'est fondamentalement automatisable. La valeur ajoutée des programmeurs humains, c'est d'inventer des solutions originales. Si c'est juste pour reconnaître des situations connues et y appliquer des solutions connues, autant les remplacer par des réseaux de neurones.

----------


## Teocali

> @Vaurien, tu veux qu'on parle des fuites mémoires de java qui font que lorsqu'on développe un service avec, il faut penser à le redémarrer régulièrement ?


99% des fuites mémoires en java, c'est parce que le mec qui a developpé son programme en Java (ou le mec qui a developpé le framework utilisé) à fait de la merde. 

Dans java, c'est pas parce que tu as un garbage collector que tu es as l'abri des "fuites mémoires" (le guillemet est là parce que c'est pas l'equivalent exact de C/C++). Juste qu'elles sont plus facile à éviter, voire à repérer et corriger.

J'ai des micro-programme (service REST en plus) en java qui ont un uptime de 500 jours, et toujours une consommation réduite. De toute façon, si ils consomment plus que ce qui est prévu, ils plantent  ::ninja::

----------


## Cwningen

Ça ressemble à quoi un programme Java qui a des fuites ?

----------


## deathdigger

Ça te bouffe toute ta mémoire, et ça commence à avoir des comportements non prévus.

----------


## Charmide

> Oui, c'est justement ce qui me gène dans les design patterns. Ils donnent (ou sont utilisés comme) des recettes de cuisine, des solutions toutes faites, plutôt que des concepts qui permettent de raisonner à un niveau d'abstraction plus haut. Si c'est simplement un raisonnement "j'identifie un problème de type x -> j'applique le design pattern y", alors c'est fondamentalement automatisable. La valeur ajoutée des programmeurs humains, c'est d'inventer des solutions originales. Si c'est juste pour reconnaître des situations connues et y appliquer des solutions connues, autant les remplacer par des réseaux de neurones.


Je comprends un peu mieux dit comme ça, ça se défend. 

J'ai toujours l'impression que dans les faits (très personellement), je m'en sers plus justement comme saut d'abstraction, généralement pour expliquer le fonctionnement d'un truc que j'ai fait a posteriori à quelqu'un d'autre, voire pour construire un vocabulaire commun qui n'a rien à voir avec des "observers" ou "factories", plus que "oh tiens j'ai le problème 89 je vais utiliser le design pattern 55" ou comme une question de discipline. Donc j'aurais difficilement cet avis. Mais ceux qui parlent le plus de design pattern en développement doivent pas avoir le même point de vue que moi là-dessus. 

Sur ton fondamentalement automatisable, j'étais plus d'accord quand tu disais que leur existence dénotait des faiblesses du(es) langages. 
Imaginons qu'un jour on ait un langage qui soit que des briques de design patterns abstraits que tu connectes entre elles (genre la programmation graphique, lul) le boulot du dev ça sera toujours de bosser au niveau d'abstraction N+1 alors que le langage est au niveau N non? Voire N-5. Ou dit autrement, de casser des problèmes complexes à N+1 (comment gérer ces 73 use cases?) en sous-sous-sous-problèmes connus qu'il a reconnu pour y appliquer des solutions connues, genre des appels à des librairies y compris standard et des opérations mathématiques pour l'instant, des design patterns si tu veux demain. Et au final, cette "meta-solution" est comme tu le dis originale, et la valeur ajoutée de l'humain ne change pas beaucoup peu importe la valeur de N. 
Le N+1 c'est aussi ton papier quadrillé pour dépasser ce dont est capable le langage (pour l'instant). 

C'est aussi compatible avec les réseaux de neurones qui un jour écriront leur code pendant que des gens s'embêteront à choisir les meilleurs, les orchestrer entre eux, leur donner je sais pas quelles instructions qui seront à N+12. 
Pendant ce temps-là ce topic parlera d'assembleur.  ::ninja::

----------


## Cwningen

> Ça te bouffe toute ta mémoire, et ça commence à avoir des comportements non prévus.


Je voulais plutôt savoir à quoi ressemble _le code_ qui génère de tels problèmes. Un exemple minimal d'un truc à ne pas faire.

----------


## Cwningen

Pour me répondre à moi-même et vérifier si j'ai bien compris. Ce qu'on appelle "fuite de mémoire" en Java, ce n'est pas avoir de la mémoire allouée à laquelle on n'a plus accès, mais avoir un programme idiot qui garde des références vers des tonnes d'objets inutiles. J'ai vu aussi des cas de fuites de connexions/fichiers ouverts si on compte sur le ramasse-miette pour les fermer, alors que celui-ci peut s'exécuter très tardivement (voire jamais). C'est ça ?

----------


## GrandFather

« And now for something completely different », parlons un peu de python. J'ai entamé un projet un peu conséquent en Python/Qt (il faut bien gagner sa croûte, pas de jugement de valeur, merci) et je dois dire que je suis assez circonspect. Passons sur le modèle objet du langage un brin foutraque - et qui exige beaucoup de self-control de la part du développeur -, je viens de tomber récemment sur une autre excentricité. Ingénument, j'ai écrit un truc de ce genre :


```
if (a = my_function()) == "truc":
    # Fait quelque chose avec a
```

...et le compilateur s'est alors mis à insulter ma mère. J'ai cherché des explications, et l'horrible vérité s'est révélée : Python n'autorise pas les assignations dans les expressions. La justification en est donnée par Guido Van Rossum lui-même qui dit, en substance : « nan mais c'est parce que des fois les développeurs y oublient un égal et alors ça marche plus et c'est super grave ». Guido, si tu nous lis : Merde. J'ai 48 balais et presque 25 ans de métier, je n'ai pas besoin des petites roues à l'arrière pour développer. Si j'ai envie d'avoir des effets de bord dans mes conditions, je suis assez grand - et les IDE assez malins pour m'avertir du danger - pour en décider moi-même.

'Tain, si les bindings Qt pour Ruby supportaient Qt5, comment qu'il aurait déjà dégagé le reptile !  ::|:

----------


## Raplonu

Wiki : Fuite de mémoire [...] est l'absence de désallocation (de libération) de l'espace utilisé lorsque ces objets ne sont plus référencés.

Je fais plus de java mais en python, c'est super simple a faire : A référence B et B référence A, tu déréférences les deux = fuite mémoire. Tu peux le faire super facilement.

----------


## Cwningen

Les dépendances cycliques sont censées être détectée par le GC. En python, je crois que c'est optionnel et on peut se contenter du comptage de référence (qui ne voit pas les cycles). Mais en Java, il est toujours là.

----------


## ducon

> ```
> if (a = my_function()) == "truc":
>     # Fait quelque chose avec a
> ```
> 
> ...et le compilateur s'est alors mis à insulter ma mère. J'ai cherché des explications, et l'horrible vérité s'est révélée : Python n'autorise pas les assignations dans les expressions. La justification en est donnée par Guido Van Rossum lui-même qui dit, en substance : « nan mais c'est parce que des fois les développeurs y oublient un égal et alors ça marche plus et c'est super grave ». Guido, si tu nous lis : Merde. J'ai 48 balais et presque 25 ans de métier, je n'ai pas besoin des petites roues à l'arrière pour développer. Si j'ai envie d'avoir des effets de bord dans mes conditions, je suis assez grand - et les IDE assez malins pour m'avertir du danger - pour en décider moi-même.


Je ne vois pas où est le problème, ça ne m’a jamais gêné.
Utilise plutôt un try/except.


```
try:
  a==my_function()
except "truc":
  pass
```

----------


## William Vaurien

> @Vaurien, tu veux qu'on parle des fuites mémoires de java qui font que lorsqu'on développe un service avec, il faut penser à le redémarrer régulièrement ?


Si tu veux troller Java, tu pourrais plutôt sortir des trucs de ce genre:

----------


## deathdigger

::P: 
Sinon des explications sur certaines fuites : https://www.dynatrace.com/resources/.../memory-leaks/

----------


## Teocali

> Ça te bouffe toute ta mémoire, et ça commence à avoir des comportements non prévus.


Le comportement est toujours le même (excepté bug dans le code de la JVM): ralentissement, puis OutOfMemoryError quand tu as atteint la limite fixée au lancement de la JVM




> Pour me répondre à moi-même et vérifier si j'ai bien compris. Ce qu'on appelle "fuite de mémoire" en Java, ce n'est pas avoir de la mémoire allouée à laquelle on n'a plus accès, mais avoir un programme idiot qui garde des références vers des tonnes d'objets inutiles. J'ai vu aussi des cas de fuites de connexions/fichiers ouverts si on compte sur le ramasse-miette pour les fermer, alors que celui-ci peut s'exécuter très tardivement (voire jamais). C'est ça ?


Exactement. Un exemple (qui date de mes vertes années) : j'avais créé un programme qui executer des operations (la nature même de ces operations n'est pas importantes) et je stockais pour affichage le log de ces operations dans un StringBuffer. Ca marchait bien quand tu lançais une 10aine d'operations avant de fermer le programme. Mais les utilisateurs ont commencé à lancer 60,90,240 operations d'affilée. Et je me retrouvais donc avec un objet (le StringBuffer) gros de plusieurs 100aine de Mo... Poum, OutOfMemoryError



> Les dépendances cycliques sont censées être détectée par le GC. En python, je crois que c'est optionnel et on peut se contenter du comptage de référence (qui ne voit pas les cycles). Mais en Java, il est toujours là.


Par contre, je crois qu'il y'a une limite, non ? genre A <-> B pas de soucis, mais A -> B -> .... -> Z -> A ça commence à poser problèmes ?

----------


## Møgluglu

> C'est aussi compatible avec les réseaux de neurones qui un jour écriront leur code pendant que des gens s'embêteront à choisir les meilleurs, les orchestrer entre eux, leur donner je sais pas quelles instructions qui seront à N+12. 
> Pendant ce temps-là ce topic parlera d'assembleur.


Exactement.  ::lol::  En informatique, on monte continuellement en abstraction, ce qui permet de gagner en productivité et de résoudre des problèmes de plus en plus difficiles. Par exemple, on n'aurait jamais pu marcher sur la Lune si… euh non rien.  ::siffle:: 




> Par contre, je crois qu'il y'a une limite, non ? genre A <-> B pas de soucis, mais A -> B -> .... -> Z -> A ça commence à poser problèmes ?


Non, si tu n'as de référence en vie sur aucun de ces objets, le GC ne va même pas regarder les relations qu'ils ont entre eux.

Les cas de fuites mémoire en pratique sont à l'interface entre la JVM et le reste du monde : avec les objets système comme les fichiers et processus, avec les wrappers sur des bibliothèques écrites dans d'autres langages, etc. En particulier, il peut y avoir des contraintes sur l'ordre dans lequel ces trucs doivent être désalloués, et ça le GC n'en a rien à battre, et fait de la merde (mais seulement en prod et jamais en debug, because Murphy).
À l'époque de .Net, Microsoft expliquait que le comportement non-déterministe du GC de Java allait provoquer incessamment l'apocalypse sur terre. Contrairement aux finaliseurs de .Net qui eux allaient amener la paix dans le monde.

Mais ça c'était il y a 15 ans et je suppose que c'est de l'histoire ancienne aujourd'hui. Si de telles failles dans les langages n'étaient pas corrigées rapidement, ça se saurait.  ::trollface::

----------


## William Vaurien

Je dois écrire un peu de code Java après avoir batifolé avec Kotlin.
 :Gerbe: 
Et pourtant j'aimais bien Java avant  ::sad::  et c'est du Java8...

Toute cette belle fluidité de Kotlin qui était rentrée naturellement dans le bout de mes doigts en quelques heures  ::cry:: 

Et ces saloperie de NullPointerException qui disparaissent élègament avec Kotlin... re  ::'(:

----------


## vectra

> Pendant ce temps-là ce topic parlera d'assembleur.


Les gens d'Intel en parlent continuellement. Pour promouvoir leurs procs et solutions de développement sans doute, mais peut-être pas que. Et c'est pas forcément les pires programmeurs sur le marché.
Tout le monde ne peut pas se permettre de considérer les parties basses comme des abstractions ou des choses vaguement casse-pied, et ces gens n'ont aucune idée de ce qu'ils ratent de toute manière.

En tous cas, quand j'ai commencé à m'intéresser aux intrinsics assembleur, j'en ai retrouvé littéralement partout, et notamment dans des programmes et applis que vous utilisez tous les jours  ::siffle::

----------


## Lazyjoe

En parlant d'Intel tiens.... Leur compilateur fortran n'est pas foutu de générer des instructions AVX 512 pour le Skylake, aors qu'il y arrive sans problème pour le KNL.  :Vibre:

----------


## Rao

> Je dois écrire un peu de code Java après avoir batifolé avec Kotlin.
> 
> Et pourtant j'aimais bien Java avant  et c'est du Java8...
> 
> Toute cette belle fluidité de Kotlin qui était rentrée naturellement dans le bout de mes doigts en quelques heures 
> 
> Et ces saloperie de NullPointerException qui disparaissent élègament avec Kotlin... re


ça valler, là , là  :Cafe2:

----------


## Teocali

> Je dois écrire un peu de code Java après avoir batifolé avec Kotlin.
> 
> Et pourtant j'aimais bien Java avant  et c'est du Java8...
> 
> Toute cette belle fluidité de Kotlin qui était rentrée naturellement dans le bout de mes doigts en quelques heures 
> 
> Et ces saloperie de NullPointerException qui disparaissent élègament avec Kotlin... re


Un convaincu de plus.  ::trollface::  J'ai présenté Kotlin à un collègue aujourd'hui. Il a perdu son après-midi a faire les Koans et il est tombé amoureux  :Fourbe: 

Ils embauchent des evangelistes Kotlin chez Jetbrains ? :D

----------


## Møgluglu

> En parlant d'Intel tiens.... Leur compilateur fortran n'est pas foutu de générer des instructions AVX 512 pour le Skylake, aors qu'il y arrive sans problème pour le KNL.


Même en ciblant Skylake-X-avec-2-FMA explicitement ?

Peut-être qu'il choisit de rester en AVX2 exprès parce qu'il sait déjà que le code AVX-512 irait moins vite.  ::trollface:: 

Oui, parce quand tu vois la claque que prennent les fréquences à la première instruction AVX-512 utilisée, tu comprends vite que comme toutes les bonnes choses, il faut pas trop en abuser.  :;): 


C'était quand la dernière fois qu'on avait vu un CPU à 8700$ qui tourne à 1,3 GHz déjà ?

----------


## William Vaurien

> ça valler, là , là


non.

En plus je dois intégrer du XML avec un schéma de merde plein de namespace pourrie... Et je pleure pour mettre le binding en place.

----------


## Teocali

Putain, combo de merde. Bon courage.

----------


## Charmide

> Les gens d'Intel en parlent continuellement. Pour promouvoir leurs procs et solutions de développement sans doute, mais peut-être pas que. Et c'est pas forcément les pires programmeurs sur le marché.
> Tout le monde ne peut pas se permettre de considérer les parties basses comme des abstractions ou des choses vaguement casse-pied, et ces gens n'ont aucune idée de ce qu'ils ratent de toute manière.
> 
> En tous cas, quand j'ai commencé à m'intéresser aux intrinsics assembleur, j'en ai retrouvé littéralement partout, et notamment dans des programmes et applis que vous utilisez tous les jours


J'ai jamais contesté l'utilité de la chose.

----------


## vectra

Hého ça va, c'est moi l'OP, je trolle qui je veux  :Cell:

----------


## Charmide



----------


## deathdigger

> non.
> 
> En plus je dois intégrer du XML avec un schéma de merde plein de namespace pourrie... Et je pleure pour mettre le binding en place.


En .Net y'a un outil qui te permet de générer une classe serialisable à partir d'un XSD, il doit exister la même chose en Java, j'imagine  ::):

----------


## Teocali

Yep, depuis des années. Juste que la classe générées est généralement bien merdique... Et quand as des namespaces pourris à foisons, ça arrange pas les choses...

----------


## William Vaurien

Voilà, en gros il y a plusieurs XSD qui sont entremêlés avec des namespaces pour chacun. En plus le xml cible redéfini les namespaces au milieu du document...


```

<?xml version="1.0" encoding="UTF-8"?><MaBalise xmlns:xy="http://blabla" xmlns="http://toto">  <xy:UneAutre />  <xy:PourLeFun  xmlns="http://blabla">    <TaVuPlusDeNameSpace />    <UneAutre />  <xy:PourLeFun></MaBalise>

```

Et du coup il faut configurer JAXB (le truc qui bind XML et le objets), parce que naturellement il ne sait pas gérer les namespaces (enfin si il les gère, mais pas les alias) 
ni d'autres subtilités.

Et là c'est le drame, la doc est quasi inexistante, il faut utiliser des extensions mal documentées et maintenu par un gars sur github, éplucher des douzaines de blogs, de questions StackOverflow, de forum pour trouver des réponses.
En plus les configurations changent suivant la version du bordel et du coup pas mal de réponse ne sont plus valides : tiens ce blog propose un solution facile à mettre en oeuvre, zut il date de 2011, c'est plus valide pour la version  2  ::sad:: 

Par exemple j'ai trouvé une réponse qui me donnaient pas mal de clefs de compréhension dans un vieux forum Google code qui hébergeait un des plugins nécessaires avant sa migration github...

Bref on franchi les portes de l'enfer à ce moment là...

Et le XML va et vient vers un service externe, donc je DOIS lire et écrire du XML comme convenu, pas arrangé à ma sauce...

(je suis coincé avec JAXB pour le moment car c'est le standard et c'est ce qu'utilise mes collègues, qui eux ont la chance d'avoir des XSD sans namespace  :;):  Je verrais bien si je bloque pour passer sur un autre framework !)

----------


## deathdigger

Ça ne serait pas de l'EDIFACT que tu traites ?

----------


## Ifit

Salut les canards,
Je voudrais me lancer dans un "side project" side project pour faire une site web qui stream une video et qui mine de la crypto-monnaie( coinhive).
Le but c'est d'avoir un site entre potes et essayer de financer le serveur avec la crypto-monnaie, je suis pas sur du tout que c'est viable vu qu'il y aura très peu d'utilisateurs mais bon c'est aussi pour le fun. 

Je viens vers vous car je suis dev C/C# mais j'y connais pas grand chose sur le dev Web et comme tout est constante évolution je ne sais pas vers quelle techno me tourner.
Le but de l'itération 1 :  une page web blanche avec une video streamée et la crypto en minée.

Tout les conseils sont la bienvenue  ::trollface::

----------


## Dross

Utiliser coinhive c'est une bête balise html à intégrer à ton site (t'apprendra rien en fait). 
Si t'est dev C#, je te conseille de regarder du coté de ASP.NET MVC ou ASP.NET Core (mieux ce dernier : c'est nouveau et ça tourne autant sur linux que windows) vu que le backend sera en C# .NET. 
Pour le streaming, ça dépend ce que tu veux faire.

----------


## Ifit

ASP.NET je connais un peu car je bosse dans une boite qui fait un logiciel de gestion qui est un site web mais je ne travail pas de se coté je m’occupe plutôt de la gestion des périphériques lecteurs etc... et des machins embarqués.
Pour le streaming je sais pas du tout quoi utiliser pour l'instant comme technos/framework etc... le but c'est de faire un truc un peu comme youtube pour la lecture de video.

Edit: Je préfère prendre les meilleures technos pour le projet même si je ne les connais pas et les apprendre.

----------


## Dross

"Faire comme Youtube" ne veux pas dire grand chose : vu qu'ils ont des clusters de serveurs où ils viennent placer des caches des vidéos en fonction de l'endroit où elles sont consommées et autres usines à gaz lié au fait qu'ils sont le leader du secteur. 

Si tu veux lire une vidéo depuis ton site web, y'a une balise HTML 5 qui fait ça, si tu veux un truc plus efficace/optimisé ou autre, soit tu trouve un truc tout fait sur le web (à toi rechercher sur google, comparer les solutions, etc), soit tu développe ton propre système de streaming (mais là tu va perdre ton temps si tu n'a pas le bagage nécessaire).

----------


## Ifit

Je ne veux pas devenir le nouveau Youtube, c'etait juste pour dire que je voulais qu'on puisse regarder des videos sur le site ( elle même hebergées sur le serveur du site).



> (à toi rechercher sur google, comparer les solutions, etc), soit tu développe ton propre système de streaming (mais là tu va perdre ton temps si tu n'a pas le bagage nécessaire).


Justement c'est pour gagner un peu de temps si les canards ont des pistes pour me conseiller certaines techno etc... et j'ai pas l'intention de réinventer le système de streaming.

----------


## Rao

le mec qui a pondu JAXB devait avoir des troubles cérébraux, c'est pas possible autrement  :ouaiouai:

----------


## Teocali

> le mec qui a pondu JAXB devait avoir des troubles cérébraux, c'est pas possible autrement


Z'était plusieurs...

----------


## Rao

Dans sa tête ?

----------


## William Vaurien

D'un côté c'est un peu complexe à mettre en place, mais une fois fait, c'est plutôt cool d'avoir plusieurs centaines de classes toutes faites. Un peu comme avec un ORM...
 C'est pas de l'EDItruc mais là description des salaires perçus par des employés d'une entreprise. Salaire brut. Donc avec toutes les taxes et allocations et autres frais divers... (Suisse)

----------


## gros_bidule

Ne peux-tu pas nettoyer ou retravailler ces XML pour mieux les parser ensuite ?
Avec du XSLT par exemple.

----------


## William Vaurien

c'est sensé être un standard, externe qui plus est, et j'ai pas envie de le trifouiller avec du XSLT (je déteste le XSLT  ::): ) dans les 2 sens ! C'est plutôt arriver à configurer JAXB pour qu'il fasse le travail comme attendu. 
Les 80% sont très facile a atteindre, ensuite j'ai passé une grosse demi journée pour avoir du 95%, et maintenant je me bat un peu pour les 5% restant: gérer le changement de namespace au milieu du document.

----------


## Teocali

This. Après y'a mieux que JAXB, mais c'est pas considéré comme standards par certains attardés...

----------


## William Vaurien

Tu recommandes quoi en non standard ?

----------


## Teocali

Faudrait que je recherche.  un truc comme streamxml, je crois. Le souci, c'était que c'était plus performant que JAXB mais bcp moins extensible dans mon souvenir. En gros, tu atteignait moins vite les limites mais ça faisait plus mal.

----------


## William Vaurien

Pas trouvé de lib avec ce non, le plus proche étant un truc pour node.js.

De nom je connais jibx qui semble être un bon concurrent sur le 'papier',  et XStream qui est excellent pour générer un version XML d'un objet mais pas du tout fait pour mapper un schéma XSD.

----------


## fougny

> Pas trouvé de lib avec ce non, le plus proche étant un truc pour node.js.
> 
> De nom je connais jibx qui semble être un bon concurrent sur le 'papier',  et XStream qui est excellent pour générer un version XML d'un objet mais pas du tout fait pour mapper un schéma XSD.


Hello,

Je ne sais pas si ça résoudra tes problemes, mais tu peux aussi essayer moxy (d'eclipse)
il ne remplace pas jaxb mais l'enrichi.
https://docs.oracle.com/middleware/1...e.htm#TLJAX130

----------


## gros_bidule

Si tu trouves le saint graal en JS, tu peux le faire tourner dans Nashorn, puis mapper le résultat du parsing JS vers ta classe Java ? Ca marche bien Nashorn.

----------


## war-p

> Si tu trouves le saint graal en JS, tu peux le faire tourner dans Nashorn, puis mapper le résultat du parsing JS vers ta classe Java ? Ca marche bien Nashorn.


 :Gerbe:

----------


## William Vaurien

Oui, je crois que je vais laisser nashorn de côté. J'aime bien le fait d'avoir la possibilité d'embarquer des interpréteurs dans la JVM, mais j'ai des doutes sur un binder XSD en js complet.
D'ailleurs en fouillant un peu le truc le plus avancé que j'ai trouvé en cherchant 5 mn(jsonix), fait un petit appel en fourbe à java pour générer son model:



> java -jar node_modules/jsonix/lib/jsonix-schema-compiler-full.jar  -d mappings -p PO purchaseorder.xsd


Le côté un peu crado de JAXB vient surtout du manque de doc pour les configurations 'avancées' combiné avec l'usine à gaz qu'est le XSD. 
Je regarderais moxy si je bloque toujours avec ma config actuelle. Merci à vous.

----------


## TarteAuxFleurs

> Tomaka made a web server? Of course he did. Only thing in this list at version 1.0. I’m a little scared ’cause tomaka’s code, while high quality, tends to be a bit hard to wrap one’s head around. But the docs and examples look good, I’ll give it a try.


Tiré de ici.
 :^_^:

----------


## Møgluglu

> Tiré de ici.


5/5 en SNR, quand-même.  :;): 

Sinon tout à l'heure, TP d'étudiants en informatique en dernière année d'école d'ingé. Coup d'œil à la console d'un binôme par dessus leurs épaules.


```
> ./toto.c
Erreur: fichier non exécutable toto.c

> chmod 700 toto.c

> ./toto.c
Erreur ligne 5: int: commande introuvable
```

_Msieu, ça marche pas !_

Au moins, ils maîtrisent les commandes Unix.  ::):

----------


## rOut

Alors qu'avec un simple 


```
//usr/bin/make -s "${0%.c}" && ./"${0%.c}" "$@"; s=$?; rm ./"${0%.c}"; exit $s
```

en première ligne de fichier c'était bon.

----------


## William Vaurien

non mais il faut les comprendre, ils ont fait du python pendant les années précédentes et peut-être même des projets en node.js
Le C c'est pour les vieux nostalgiques et les programmeurs de grille-pain...  ::ninja::

----------


## Nattefrost

Dernière année ils savent pas que le C se compile? Dernière année c'est 5 ans, non ? ::O:

----------


## Møgluglu

> Alors qu'avec un simple 
> 
> 
> ```
> //usr/bin/make -s "${0%.c}" && ./"${0%.c}" "$@"; s=$?; rm ./"${0%.c}"; exit $s
> ```
> 
> en première ligne de fichier c'était bon.


Pas con !
Mais le mieux serait quand-même un code obfusqué qui affiche une vanne quelconque à la gueule de celui qui le lance (je leur donne un code à trous à compléter). Points bonus si ça ressemble à un commentaire legit dans le code. Jackpot si c'est du C valide.




> Dernière année ils savent pas que le C se compile? Dernière année c'est 5 ans, non ?


Pas exactement, le C ne se compile pas tout seul. C'est l'informaticienne qui compile le C.  ::ninja::

----------


## Nattefrost

Comme j'aurai aimé faire des défis de codegolf d'obfuscation en cours  :Bave:

----------


## vectra

> non mais il faut les comprendre, ils ont fait du python pendant les années précédentes et peut-être même des projets en node.js
> Le C c'est pour les vieux nostalgiques et les programmeurs de grille-pain...


... et les scientifiques  :Cigare:

----------


## rOut

> Comme j'aurai aimé faire des défis de codegolf d'obfuscation en cours


https://www.codingame.com/multiplayer/codegolf

----------


## Nattefrost

> https://www.codingame.com/multiplayer/codegolf


Non mais oui, mais en cours y aurait eu une dimension particulière, une émulation  ::P: .

----------


## Møgluglu

> ... et les scientifiques


En fait les scientifiques programment en Fortran et les grille-pains sont en Java. Ne restent que les vieux cons.  ::):

----------


## vectra

Tu oublies aussi Labview

----------


## Lazyjoe

Tiens en parlant de fortran, ma découverte du jour...
Depuis le fortran 90, on a une amazing killer feature : les argument optionnels à un appel de fonction/routine. Donc on peut faire appel à une fonction en ne passant que certains arguments, ce dont j'ai besoin pour faire du debug. Bien.

Sauf que.

Si depuis l'endroit où on appelle la fonction à arguments optionnels, on n'a pas eu de définition explicite du prototype de la fonction ("interface explicite"), ben le compilo n'est pas foutu de le deviner, il va simplement mettre les arguments utilisés dans la pile. Donc dans la fonction appelée, au lieu de récupérer une sorte de pointeur nul pour les argument optionnels non définis, on va récupérer ce qui traîne dans la stack à ce moment-là.  :Vibre:

----------


## Taro

> Sinon tout à l'heure, TP d'étudiants en informatique en dernière année d'école d'ingé. Coup d'œil à la console d'un binôme par dessus leurs épaules.
> 
> 
> ```
> > ./toto.c
> Erreur: fichier non exécutable toto.c
> 
> > chmod 700 toto.c
> 
> ...


 :Facepalm:

----------


## Came Yon

> Tiens en parlant de fortran, ma découverte du jour...
> Depuis le fortran 90, on a une amazing killer feature : les argument optionnels à un appel de fonction/routine. Donc on peut faire appel à une fonction en ne passant que certains arguments, ce dont j'ai besoin pour faire du debug. Bien.
> 
> Sauf que.
> 
> Si depuis l'endroit où on appelle la fonction à arguments optionnels, on n'a pas eu de définition explicite du prototype de la fonction ("interface explicite"), ben le compilo n'est pas foutu de le deviner, il va simplement mettre les arguments utilisés dans la pile. Donc dans la fonction appelée, au lieu de récupérer une sorte de pointeur nul pour les argument optionnels non définis, on va récupérer ce qui traîne dans la stack à ce moment-là.


Bienvenue dans le joyeux monde du fortran  ::trollface:: 

Bon hin, maintenant on a le parallélisme "natif"  :Pipe:  alors on a rien a envier aux langages case sensitive...

----------


## William Vaurien

> En fait les scientifiques programment en Fortran et les grille-pains sont en Java. Ne restent que les vieux cons.


tout les scientifiques sérieux que j'ai vu récemment utilisaient du python...
et pour les grilles pains, il faut faire du C maintenant qu'ils sont basés sur des cartes Arduino  ::ninja::

----------


## Lazyjoe

> Bienvenue dans le joyeux monde du fortran 
> 
> Bon hin, maintenant on a le parallélisme "natif"  alors on a rien a envier aux langages case sensitive...


Houlà ça va faire des AVC dans le coin si j'e nparle dans mon labo. C'est quoi ce parallélisme "natif" ?  ::P: 

- - - Mise à jour - - -




> tout les scientifiques sérieux que j'ai vu récemment utilisaient du python...


Pas quand tu brasses des heures de calcul par millions.  ::siffle::

----------


## Orhin

> tout les scientifiques sérieux que j'ai vu récemment utilisaient du python...
> et pour les grilles pains, il faut faire du C maintenant qu'ils sont basés sur des cartes Arduino


Tu peux faire du javascript sur Arduino.  ::trollface:: 
http://johnny-five.io/

----------


## Møgluglu

> Pas quand tu brasses des heures de calcul par millions.


Ça me fait penser que mes étudiants pourraient bosser au CERN : https://root.cern.ch/cling

----------


## William Vaurien

Au CERN justement c'est C++ et python pour la partie scientifique. 
FORTRAN est legacy  ::siffle::

----------


## Lazyjoe

> Au CERN justement c'est C++ et python pour la partie scientifique. 
> FORTRAN est legacy


Ah bah C++ c'est l'idéal  ::ninja:: 
Mais python pour le calcul intensif il peut encore repasser. Ici il est pas mal utilisé pour le post-processing des résultats des simus, mais rien de très lourd.

----------


## Mayalabielle

> 5/5 en SNR, quand-même. 
> 
> Sinon tout à l'heure, TP d'étudiants en informatique en dernière année d'école d'ingé. Coup d'œil à la console d'un binôme par dessus leurs épaules.
> 
> 
> ```
> > ./toto.c
> Erreur: fichier non exécutable toto.c
> 
> ...


Heu... Je sors d'ingé (il y a une petite année). C'est vu en première année ça. T'as du tombé sur une belle bande de branque.

----------


## TarteAuxFleurs

> Heu... Je sors d'ingé (il y a une petite année). C'est vu en première année ça. T'as du tombé sur une belle bande de branque.


Même chose que mayalabielle.
C'est quoi l'école qu'on la mette la blacklist ?  ::ninja::

----------


## Max_well

> Sinon tout à l'heure, TP d'étudiants en informatique en dernière année d'école d'ingé. Coup d'œil à la console d'un binôme par dessus leurs épaules.
> 
> 
> ```
> > ./toto.c
> Erreur: fichier non exécutable toto.c
> 
> > chmod 700 toto.c
> 
> ...


Sinon, tu peux avoir un shell executable qui compile en C ?

----------


## TiNitro

Ah ben, en FORTRAN 7 pas de prototype de fonction, à toi de faire gaffe à la liste et aux types d'argument. Tu tep lantes --> exploration de la pile.
ALORS TE PLAINT PAS  :Boom:

----------


## Taro

:Gerbe:

----------


## Came Yon

> Houlà ça va faire des AVC dans le coin si j'e nparle dans mon labo. C'est quoi ce parallélisme "natif" ?


Natif dans le sens où les commandes et syntaxes spécifiques à la parallélisation font partie du langage. Pas besoin d'utiliser OpenMP avec les commentaires à ajouter dans le code...
Mais c'est pas forcément plus simple ou plus efficace hein  ::ninja::  

C'est dans le standard fortran depuis Fortran 2008. Les compilateurs commencent à l'implémenter. La librairie inclue dans gfortran permet de compiler les programmes parallèles, mais ne peut faire tourner qu'une seule image  ::(: 
Je connais seulement la librairie OpenCoArrays pour gfortran qui implémente certains trucs du draft fortran 2015, comme la gestion des signaux entre les différentes images.

----------


## vectra

> tout les scientifiques sérieux que j'ai vu récemment utilisaient du python...


Non, ça ce sont les data _scientistes_, il manque juste un doctorat  ::trollface:: 

- - - Mise à jour - - -




> Même chose que mayalabielle.
> C'est quoi l'école qu'on la mette la blacklist ?


Dans toutes les ENSI, t'as des étudiants en filière généraliste qui passent à travers les grilles alors qu'ils ont rien panné en info.
De toute manière, si tu ne peux pas mettre moins de 12 à une copie blanche sans prendre une soufflante de la scolarité, tu te doutes bien que ça encourage la fainéantise.

----------


## Lazyjoe

> De toute manière, si tu ne peux pas mettre moins de 12 à une copie blanche sans prendre une soufflante de la scolarité, tu te doutes bien que ça encourage la fainéantise.


Mouarf mais c'était où ça ?
Une des compensations quand on te refile un groupe de 1ère année parceque tu es moniteur c'est des bien les allumer avec des notes entre 0 et 5/20 au premier partiel. Si on a même plus droit à ça, où est le plaisir ?  ::ninja::

----------


## Charmide

> Non, ça ce sont les data _scientistes_, il manque juste un doctorat


C'est le truc où t'échanges 3 ans de ta vie contre moins de possibilités de trouver du boulot après c'est ça?  ::trollface::

----------


## Orhin

> C'est le truc où t'échanges 3 ans de ta vie contre moins de possibilités de trouver du boulot après c'est ça?


Tout en étant payé entre 30 et 50% moins cher.
Et en devant donner des cours inutiles et chiant à des débiles inattentifs*.



*dont on a tous fait partis.  ::ninja::

----------


## Laya

> Au CERN justement c'est ROOT


 :B):

----------


## William Vaurien

lolno c'était en effet des 'scientists' du CERN. Là bas même les cuisiniers et les femmes de ménage ont un doctorat.
Donc du C++ et une grosse couche en python pour rendre le tout digeste. 

Un petit commentaire tiré de là



> Mario Alemi, former Physicist at CERN (1994-2000)
> 
> I worked at CERN (as a physicist) from 1995 to 2000.
> Back then, I didn’t like to be “forced” to use FORTRAN, which at the time I perceived as old. I wanted to do C++.
> So I started using ROOT. I was eager to learn C++. I took courses, read Bjarne Stroustrup’s book. 
> And then asked myself –was the LSD so strong, ROOT people wanted us to use C++ as scripting language??



Mais en fait je m'en fous un peu, je fais du Java, forcé de faire du C, et aspirant à faire du Kotlin  ::):

----------


## Laya

Pour les curieux voici la classe pour faire un pauvre histogramme:

https://root.cern.ch/root/html520/TH1.html

----------


## William Vaurien

d'où le python avec PyROOT (heureusement que c'était pas du Visual Basic, ça aurait fait Visual B-ROOT ...)
Et pour les jeux de mot foireux il y a son compagnon, pypyroot.

----------


## vectra

> Mouarf mais c'était où ça ?
> Une des compensations quand on te refile un groupe de 1ère année parceque tu es moniteur c'est des bien les allumer avec des notes entre 0 et 5/20 au premier partiel. Si on a même plus droit à ça, où est le plaisir ?


Je vais pas balancer, mais c'est le cas dans au moins deux ENSI de province.

----------


## vectra

> C'est le truc où t'échanges 3 ans de ta vie contre moins de possibilités de trouver du boulot après c'est ça?


Ben écoute, ça se passe pas trop mal pour le moment.

----------


## Taro

> d'où le python avec PyROOT (heureusement que c'était pas du Visual Basic, ça aurait fait Visual B-ROOT ...)
> Et pour les jeux de mot foireux il y a son compagnon, pypyroot.


Il faut bien gagner sa C-ROOT...  ::trollface:: 

Je suis déjà dehors  ::ninja::

----------


## Charmide

> Ben écoute, ça se passe pas trop mal pour le moment.


Tant mieux !

----------


## vectra

Merki mais c'est pas simple non plus.

Sinon, ROOT, j'ai déjà donné et c'est bien de la merde  ::o:

----------


## Charmide

http://www.monkeyuser.com/2017/desig...s-bureaucracy/

----------


## Dross

haha c'est génial.  ::):

----------


## Gillete

Je vais poser une question beaucoup plus terre à terre.

Je suis un peu à la rue sur les choses à faire (ou ne surtout pas faire) pour chiffrer une chaîne de caractères. Je lis un peu tout et n'importe quoi sur le sujet et autant je peux écarter les solutions qui sentent bon l'amateurisme (ie. "_tu transformes en base64 puis tu fais un chiffrement de César_"), autant je ne sais pas pondérer une solution qui à l'air viable par rapport à une autre. 
Par exemple, la solution mise en avant sur ce post me semble pas mal. Vous confirmez mes impressions ?

Le contexte consiste à chiffrer en C# des logs applicative qui peuvent parfois contenir des données sensibles et qui sont sauvegardées sur Azure (cette contrainte n'est pas modifiable). Ce n'est pas une application critique, mais si on peut avoir une bonne base pour une utilisation plus poussé, cela sera intéressant. On a déjà pensé à éviter de loguer ces fameuses données sensible, mais le type de données pourra être amené à évoluer régulièrement, cela va rapidement devenir inmaintenable.

----------


## Taro

Tu as plusieurs méthodes pour chiffrer des données, si on reste sur du symétrique tu as entre autres :
Code de César, ou chiffrement par décalage : tu augmentes/diminues d'une certaine valeur le code de chaque caractère. Même si tu peux aller au-delà de 26, après tout tu n'es pas limité à l'alphabet, c'est un peu moisiChiffrement par substitution : le principe est d'associer à chaque lettre une autre lettre, les possibilités sont déjà grandes, cependant si une personne mal intentionnée a mis la main sur un message chiffré et a une idée précise de la langue d'origine il lui sera aisé de faire des suppositions basées sur la fréquence d'apparition des lettres, ce qui fait que c'est loin d'être impossible à chiffrerChiffre de Vigenère : c'est le même principe que le Code de César, mais au lieu de décaler tous les caractères en utilisant une unique valeur, tu décales en fonction du caractère courant dans un mot ou une phrase. On peut déjà 
aller assez loin en termes de possibilités, et il est plus difficile de reconnaître la langue d'origine du message

L'avantage des chiffrements symétriques étant que c'est rapide en termes d'exécution.
J'ai mis au point un petit outil de chiffrement symétrique qui tape dans les 100 mo/s, en étant limité par le disque dur et sans trop tirer sur le CPU. Si j'étais sur Ramdisk, je pense que je pourrais monter bien plus haut.
L'inconvénient, évidemment, c'est qu'il faut la même clé pour chiffrer et déchiffrer un message.

Après, tu as l'asymétrique, qui offre l'avantage de proposer une clé différente pour le chiffrement et le déchiffrement, mais le traitement est un peu plus lourd.
Il parait aussi qu'avec les ordinateurs quantiques, le RSA se fera démolir la face, mais pour l'instant les fameux ordinateurs quantiques ne vont pas assez loin en calcul pour représenter un réel danger.

----------


## Dross

> Le contexte consiste à chiffrer en C# des logs applicative qui peuvent parfois contenir des données sensibles et qui sont sauvegardées sur Azure (cette contrainte n'est pas modifiable). Ce n'est pas une application critique, mais si on peut avoir une bonne base pour une utilisation plus poussé, cela sera intéressant. On a déjà pensé à éviter de loguer ces fameuses données sensible, mais le type de données pourra être amené à évoluer régulièrement, cela va rapidement devenir inmaintenable.


Tu peux aussi utiliser du chiffrement symétrique et asymétrique : tu génère aléatoirement (dans un SecureString pour éviter les dump mémoire) une string que tu encryptera avec de l'asymétrique et placera dans la première ligne de ton fichier. Cette string aléatoire deviens ta clé d'encryption symétrique et tu l'utilise pour chiffrer tes logs dans la suite du fichier. 

L'intérêt c'est qu'il n'y a pas ta clé maitresse dans le binaire (C# = .NET = opensource ou pas loin (les obfuscateurs sont tous pété sauf un ou deux)) et que tu garde de bonnes performances pour la décryptions. 

J'ai du code C# qui fait ça, si ça t'intéresse je pourrai te filer 2-3 samples.

ps: si tu chiffre appel par appel et pas un fichier complet que tu envois sur Azure en cas de soucis il faudra adapter.

----------


## Møgluglu

> Par exemple, la solution mise en avant sur ce post me semble pas mal. Vous confirmez mes impressions ?


Oui, si tu ne réinventes pas la roue, que tu fais du block chaining avec un peu de sel comme dans l'exemple, et que tu génères une clé symétrique différente pour chaque log avec un générateur aléatoire sûr (en chiffrant la clé avec un algo asymétrique comme propose Dross, et/ou en la gardant à un endroit inaccessible du serveur Azure et du reste du monde), ça devrait aller.

----------


## deathdigger

C'est cool, j'avais besoin d'un truc comme ça (pour stocker des mots de passe d'accès bdd et autres dans des fichiers de config), et je ne savais pas trop comment rendre le truc propre  ::):

----------


## Taro

J'ai une question également, plutôt concernant un tuto/livre.  ::): 

Si c'est un tuto gratos c'est aussi bien, mais ça ne me dérange pas de me payer un livre s'il est bien conçu, j'ai l'habitude d'en acheter si nécessaire. Par contre payer pour un tuto online, je passe mon tour.  ::): 
Ca c'est concernant le support.
Concernant la langue, j'veux ça en français (cas exceptionnel, je m'explique ci-après).

Je vois bien que je n'avance pas sur mon bouquin sur le reverse engineering. La raison c'est avant tout que je suis trop dépassé en assembleur (j'en ai fait, mais manifestement bien trop peu et il y a trop longtemps), et ensuite que c'est plus difficile de passer outre cette limitation en me disant que j'apprendrai sur le tas quand tout le contenu est en anglais. Attention, je n'ai pas de problème avec l'anglais, anglais technique y compris, mais c'est vrai que des fois quand tu dois te frotter à un algo un peu goulu lire une explication dans la langue maternelle ça aide, n'étant pas non plus 100% bilingue en ce qui me concerne.
Du coup, est-ce que vous avez un bon tuto ou bouquin qui :
propose de se mettre à l'assembleur (x86 je dirais, au pif, je suppose que je peux partir là dessus et ensuite découvrir les spécificités si dans un moment je pars sur du x64, de l'ARM...)Parte au ras des pâquerettes (il me reste quelques notions, mais je préfère partir sur un support qui considère que je n'en ai jamais fait, pour être sûr de repartir sur les bases)Qui soit, donc, en français
?

Merci par avance pour vos conseils les canetons  :;):

----------


## Møgluglu

Si jamais tu tombes sur une édition du Hennessy-Patterson traduit par Daniel Etiemble d'occasion à un prix raisonnable, fonce.  :;):  Malheureusement, il semble introuvable de nos jours.

Tu as aussi le Goossens, mais il n'a pas l'air tellement plus facile à trouver.

À défaut, tu peux jeter un œil aux supports de cours des mêmes :
https://www.lri.fr/~de/ArchiL3-1314.htm
http://perso.univ-perp.fr/bernard.go...A/archiav.html
Ou encore https://www.lri.fr/~cecile/ENSEIGNEM...HI/partie1.pdf et https://www.lri.fr/~cecile/ENSEIGNEM...artie2scal.pdf

Mais globalement les ressources sur l'architecture des ordinateurs en français ça ne court pas les rues. Je me rappelle d'une introduction en français à l'archi d'Etiemble aussi dans une revue en français qui avait été citée sur le forum, mais pas moyen de remettre la main dessus.  ::(:

----------


## Taro

Merci Mogluglu pour tes idées, je vais regarder si je peux trouver ça... Je vais ptet même d'abord voir leurs cours pour déduire lequel semble le plus coller à ce que je recherche.  ::): 

Si d'autres canards ont des idées à rajouter, n'hésitez pas !  :;):

----------


## Sahnvour

Mon prof d'IUT a écrit https://www.eyrolles.com/Informatiqu...-9782212116359 , mais vu qu'on avait une version un peu light en cours (touffu mais 1ère année donc ...) je sais pas dans quelle mesure ça rentre dans les détails des archis récentes en particulier. Ça commence à dater aussi, mais de mémoire c'était pas mal et puis c'est en français, la version pdf est pas dure à trouver.  ::ninja::

----------


## Taro

En fait c'est pas tant l'archi qui m'intéresse sur ce coup là, c'est plus de me remettre à l'assembleur en douceur. Revoir à quoi sert chaque instruction, l'ordre et le rôle des paramètres, éventuellement écrit en plusieurs conventions...
Me remettre dans le bain avec les bases quoi, le rôle des différents registres, tout ça. Histoire que je ne mette pas 30 minutes à comprendre, en lisant mon autre bouquin sur le reverse engineering, à quoi correspond ce bout de code ASM de trois lignes.

----------


## Cwningen

Il n'y a rien de standard dans les notations assembleur, même en restant sur l'x86, les notations GAS et Intel font tout le contraire.

----------


## Møgluglu

Oui, c'est comme si tu voulais apprendre la programmation en général mais sans faire d'algorithmique.
Le jeu d'instructions, il est décrit dans la doc de ton processeur (quand il en a une, je ne regarde pas du tout vers Nvidia). Mais pour comprendre la doc et pourquoi le jeu d'instructions est comme ça, c'est l'archi qu'il faut connaître. Ou simplement pour la culture générale de programmeur.

Sinon c'est normal d'avoir besoin de la doc ouverte à côté pour lire un code assembleur, si tu n'es pas un gourou qui lit du code machine binaire dans le texte depuis tout petit. Je fais toujours comme ça, y compris (voire surtout) quand c'est du x86.  :;):

----------


## Max_well

[semi-troll]
http://store.steampowered.com/app/370360/TIS100/
http://store.steampowered.com/app/504210/SHENZHEN_IO/
[/semi-troll]

----------


## Patate

> [semi-troll]
> http://store.steampowered.com/app/370360/TIS100/
> http://store.steampowered.com/app/504210/SHENZHEN_IO/
> [/semi-troll]


Ca reste accessible si on a jamais fait d'assembleur ce genre de jeu ?

----------


## GrandFather

Totalement.

----------


## Møgluglu

Grave. Sinon le marché serait réduit aux 3 barbus qui ont programmé sur grilles de Transputer.  :;): 
Les connaissances acquises n'aident pas, c'est entièrement à base d'astuces spécifiques à trouver au cas par cas (ce qui est d'ailleurs tout ce qui me frustre dans ces jeux, chaque fois que tu penses avoir trouvé une méthode générale elle ne marche plus à l'énigme d'après  ::): )

Du moins pour TIS-100. Shenzhen I/O ou les autres Zachtronics j'ai pas joué, mais ça semble du même tonneau.

----------


## Patate

Ok merci, ils me font de l’œil depuis quelques mois, mais à regarder les vidéos c'est un peu  ::wacko::

----------


## Taro

> Il n'y a rien de standard dans les notations assembleur, même en restant sur l'x86, les notations GAS et Intel font tout le contraire.





> Oui, c'est comme si tu voulais apprendre la programmation en général mais sans faire d'algorithmique.
> Le jeu d'instructions, il est décrit dans la doc de ton processeur (quand il en a une, je ne regarde pas du tout vers Nvidia). Mais pour comprendre la doc et pourquoi le jeu d'instructions est comme ça, c'est l'archi qu'il faut connaître. Ou simplement pour la culture générale de programmeur.
> 
> Sinon c'est normal d'avoir besoin de la doc ouverte à côté pour lire un code assembleur, si tu n'es pas un gourou qui lit du code machine binaire dans le texte depuis tout petit. Je fais toujours comme ça, y compris (voire surtout) quand c'est du x86.


Je comprends, merci pour les précisions  ::): 

Mais les instructions "classiques" ça doit bien exister ? Genre le MOV doit bien se retrouver un peu partout avec généralement deux paramètres, non ?

----------


## Cwningen

L'idée du move oui, mais ça change quand même. Déjà l'ordre des opérandes change (destination, source ou source, destination). La mnémotechnique peut changer (mov, move, mov+type ou n'importe quoi). La syntaxe utilisée pour les opérandes peut être importante aussi (valeur immédiate, registre, indirection, déplacement, ...).

Rien que pour l'x86 comme je le disais, tu peux avoir "mov dword ptr [esp+4], 0" (intel) ou "movl $0, 4(%esp)" (GAS/AT&T) pour la même chose (exactitude de la syntaxe non garantie).

Pour certains processeurs, un move générique à deux adresses peut être trop compliqué, donc tu utilises des load/store à la place (par exemple le micro-controlleur de mon clavier qui ne peut transférer des données que vers ou depuis l'accumulateur).

----------


## Taro

Super, merci pour tes précisions.  ::): 

Bon, du coup je vais insister sur la lecture du bouquin (reverse engineering), et au pire si je galère vraiment sur un code je viendrai quémander des explications ici  ::):

----------


## Møgluglu

Il n'y a qu'une seule instruction classique qu'on retrouve dans tous les jeux d'instructions. C'est 

Spoiler Alert! 


le nop

.  :;):  Le mov est facilement une des instructions les plus compliquées et qui a le plus de variantes et de modes d'adressages à la con.

Pour une vue plus globale, voir les cours/bouquins ci-dessus qui, dans la grande tradition Hennessy-Patterson, en font des tonnes sur la distinction RISC vs. CISC.

----------


## Kesitem

Je me permets de remonter à plus haut niveau  ::P: 

Je me suis remis au C++, il y a quelques mois (j'avais arrêté avant la publication des normes 2011 et 2014, autant dire que je suis bien rouillé).

J'ai un peu regardé les IDE et j'utilise CodeBlocks. Est-ce un bon choix?
Sachant que j'ai besoin d'un version "portable" et que je travaille avec MinGW, y a t-il des alternatives intéressantes?

----------


## Patate

J'aime beaucoup codelite.

----------


## Kesitem

Ah je vois qu'il peut gérer les projets CMake, c'est intéressant.
Je vais l'essayer.

----------


## vectra

Putain de Foley, Van Dam et al.
Il m'a foutu un bug de signes dans le calcul d'angles entre deux vecteurs  :Vibre: 
Bien les hotfixs après minuit, heure à laquelle les programmeurs sont censés dormir  :tired:

----------


## rOut

> Ok merci, ils me font de l’œil depuis quelques mois, mais à regarder les vidéos c'est un peu


Perso j'ai bien aimé, mais bon TIS-100 et Shenzhen I/O c'est quand même vraiment pour les autistes. Si tu aimes construire des cathédrales avec des allumettes ça peut te plaire. SInon les autres Zachtronics sont bien et plus accessibles, notamment Opus Magnum le dernier, et SpaceChem dans le même style mais plus rustre (Infinifactory j'ai pas aimé, trop dur à appréhender en 3D).

Opus Magnum ça se torche en ~15h, et je n'ai pas ressenti le besoin de trop peaufiner les solutions. TIS-100 j'ai passé genre 30h en repassant plusieurs fois sur chaque puzzle pour l'optimiser, et Shenzhen I/O 40h pareil (sans compter la campagne additionnelle ou je galère).

De toute manière les énigmes sont assez bien foutues et c'est assez progressif quand même (et Shenzhen I/O c'est juste TIS-100 en mieux).

- - - Mise à jour - - -




> Merci Mogluglu pour tes idées, je vais regarder si je peux trouver ça... Je vais ptet même d'abord voir leurs cours pour déduire lequel semble le plus coller à ce que je recherche. 
> 
> Si d'autres canards ont des idées à rajouter, n'hésitez pas !


C'est pas à toi que j'avais linké https://gcc.godbolt.org ? Chaque instruction est associée avec sa doc quand tu passes la souris dessus, donc ça peut être pas mal pour comprendre ce que ça fait.

Après, perso j'avais pas du tout accroché aux cours d'assembleur en école d'ingé, donc j'avais pas mal séché, et je suis probablement un peu à la ramasse, mais en reversant des programmes, instructions par instruction j'ai fini par me familiariser un peu... Bon, probablement pas de quoi être capable d'écrire 3 lignes qui tiennent la route en assembleur ou pour le lire couramment, mais suffisamment pour ne plus en avoir peur.

----------


## Max_well

Oui, Opus Magnum est une excellente introduction à SpaceChem. C'est globalement le même principe, sauf que SpaceChem est limité au niveau de la grille, ce qui implique des noeuds au cerveau.




> Shenzhen I/O 40h pareil (sans compter la campagne additionnelle ou je galère).


La deuxième partie une fois parti de Schenzen (auquel cas merci beaucoup, je me sens moins seul), ou y'a encore une autre campagne derrière ?

----------


## rOut

> Oui, Opus Magnum est une excellente introduction à SpaceChem. C'est globalement le même principe, sauf que SpaceChem est limité au niveau de la grille, ce qui implique des noeuds au cerveau.
> 
> 
> La deuxième partie une fois parti de Schenzen (auquel cas merci beaucoup, je me sens moins seul), ou y'a encore une autre campagne derrière ?


Ouais Avalon City. J'ai tenté le premier puzzle et j'ai fini par laisser tomber (pour l'instant !).

----------


## William Vaurien

J'écris pas mal de bash, essentiellement de l'adaptation de vieux shell suite à différents changement  - OS, intégration continue, depuis quelques temps. 
A force d'écrire des trucs et d'apprendre à utiliser ce langage je commence presque à prendre plaisir.

J'ai même écris des tests unitaires, avec 2 méthodes 'assertEqual' et 'assertEmpty'  pour un source contenant toutes les fonctions que j'ai créer pour refactoriser tous les doublons de code dans l'existant  ::P:

----------


## Nattefrost

@William Vaurien Je sais pas ce que ça vaut, n'ayant jamais fait de unit test en bash (dieu m'en garde !) mais j'avais trouvé ça à une époque https://github.com/sstephenson/bats
C'est plus maintenu depuis un moment visiblement mais ptetre que ça fait le boulot.

----------


## William Vaurien

c'est juste un petit jeu de tests pour m'assurer que mes fonctions marchent aussi bien sous bash que sous ksh car j'ai des appels venant des 2 types de scripts et que ce sont des shells très cousins.
Pas besoin d'un truc en plus, c'est finalement assez simple et je ne compare que des strings...

----------


## Møgluglu

Spoiler pour les programmeurs CUDA : les cooperative groups de CUDA 9, c'est super cool sur le papier, mais c'est pas encore tout à fait sec. Il va falloir attendre CUDA 10 pour en profiter.  ::):

----------


## William Vaurien

Alors je vous avais déjà raconté mon projet un peu déprimant en C, et certains de mes collègues en fin de carrière. Je vais vous parler de l'un d'eux  ::): 
Donc tous les autres le chambraient pas mal, et c'est vrai que nous l'avons retrouvé plusieurs fois assoupi sur sa chaise. 
Mon boss m'avait également parlé d'un sous projet au sein de notre gros logiciel avec lequel ce fameux collègue se bat depuis 2 ans parce qu'il n'arrive pas à boucler les 20% restant des fameux 80/20. 
Je trouvais que mon chef était un peu rude avec lui, et j'avais un peu pitié. 

Aujourd'hui j'ai eu une révélation: mon chef minimise son incapacité à travailler. 

Pour ce projet on va devoir tout balancer et reprendre de 0 (du coup ça m'arrange au final  ::): ). 
Le sous-projet consiste en 4 ou 5 fichiers sources, dont un principal, avec dedans une - grosse - poignée de méthodes

Comme le collègue en question n'arrive plus à avancer depuis plusieurs jours; il a eu une illumination: il a imprimé ce fichier pour "l'analyser à la maison" (nous avons des portables).

Voici le résultat, je vous laisse imaginer le nombre de lignes de code (c'est recto verso):



Il nous a au moins beaucoup fait rire !

----------


## Patate

Ca représente un fichier le tas là ?!  ::wacko::

----------


## William Vaurien

oui un seul fichier  ::lol::  et la photo ne rend pas justice au tas. Il a l'air beaucoup plus épais en vrai !

----------


## Orhin

Je...  :Splash:

----------


## Patate

Je vois pas trop comment on peut en arriver là enfait... Beaucoup de réécriture de code ?

----------


## William Vaurien

Programmation de logiciel de gestion en C avec les 'best practices' de 1982. Aucun refactoring, aucune factorisation de code, aucun framework. 
Et beaucoup de code pour gérer la mémoire, les erreurs,  les chaines de caractères...

Et dans le fichier il y a tout: appel à la base de données, le businness, le html à coup de printf violent avec du html de 1995 dedans (tags en majuscule, balise non standard depuis HTML 4) !
Du bonheur  ::wub:: 

- - - Mise à jour - - -

Et le reste du projet est quand même un peu du même ordre... même si là le code est devenu un monstre de if imbriqués à 12 niveaux impossible à redresser. C'est la quitescence  ::): 

Le reste du code est quand même composé à 80% de code technique habituellement gérer par des frameworks et les fichiers de 10k sont légions. Et mon chef qui vient gueuler sur Java et les tests unitaires avec pour seul argument que son projet ne consomme quasiment pas de RAM et qu'il n'y pas besoins de tests (en même temps il ne font pas de refactoring, ils ne savent pas ce que c'est ! tout est figé et copié collé...)

----------


## TiNitro

:Facepalm:  si vous saviez... dans ma boite.... si je devais imprimer le plus gros source. *soupir*

----------


## Nattefrost

::o:  La définition de l'enfer sur terre.
J'ai connaissance d'un roguelike composé d'un fichier python de 425 000 lignes. Hélas on peut pas en profiter, c'est closed source. Le "dev" dit qu'il a du passer à vim parce que c'est le seul editeur qui parvient encore a l'ouvrir  ::O: . Le next step c'est quoi ? Ajouter du code avec sed ?  ::P:

----------


## Patate

Et ton taff c'est quoi ? Redresser le projet ? Ça mérite une réécriture ce genre de truc.

----------


## Dross

La seule solution.

----------


## William Vaurien

J'imagine qu'il y a bien pire; mais c'est la tentative ultime du dev qui sait plus trop comment faire qui nous a surtout faire rire (un peu jaune quand même). Genre il va s'installer au coin du feu avec son paquet de feuilles et va avoir l'illumination qui va le guider vers la release  :Facepalm:

----------


## Mayalabielle

> La définition de l'enfer sur terre.
> J'ai connaissance d'un roguelike composé d'un fichier python de 425 000 lignes. Hélas on peut pas en profiter, c'est closed source. Le "dev" dit qu'il a du passer à vim parce que c'est le seul editeur qui parvient encore a l'ouvrir . Le next step c'est quoi ? Ajouter du code avec sed ?




```
echo >>
```

----------


## Teocali

Y'a des projets comme ça. A ce qu'il parait, Dwarf fortress est du genre à te faire perdre 15 points de SAn chaque fois que ouvres le code...

----------


## Nattefrost

> ```
> echo >>
> ```


Bah non si tu dois modifier une fonction existante à la ligne 201657  (sisi c'est possible xD) '>>' c'est pas super utile  ::P: 

- - - Mise à jour - - -




> Bah non si tu dois modifier une fonction existante à la ligne 201657  (sisi c'est possible xD) '>>' c'est pas super utile


@Teocali c'est pas DF je crois que c'est Ultima ratio regum

----------


## Mayalabielle

> Bah non si tu dois modifier une fonction existante à la ligne 201657  (sisi c'est possible xD) '>>' c'est pas super utile


Bah tu utilises head / tail pour couper le fichier et ensuite cat pour l'assembler à nouveau. What else ?

----------


## Nattefrost

> Bah tu utilises head / tail pour couper le fichier et ensuite cat pour l'assembler à nouveau. What else ?


Ouais, remarque c'est vrai que quand on a un fichier de 425k SLOC on n'est plus à ça près  ::XD::

----------


## Lazyjoe

Imprimer du code.... L'épaisseur de la pile... 3km² de foret amazonienne y sont passés.

 :Lime:   :Splash: 

En fait j'ai de la chance finalement, plus jamais je ne viendrai me plaindre du code sur lequel je bosse.

----------


## Lazyjoe

> Après, perso j'avais pas du tout accroché aux cours d'assembleur en école d'ingé, donc j'avais pas mal séché, et je suis probablement un peu à la ramasse, mais en reversant des programmes, instructions par instruction j'ai fini par me familiariser un peu... Bon, probablement pas de quoi être capable d'écrire 3 lignes qui tiennent la route en assembleur ou pour le lire couramment, mais suffisamment pour ne plus en avoir peur.


Je suis un peu dans le même cas, de vagues souvenirs d'assembleur 68000 en licence (c'était bien  ::P:  ) et utilisation de quelques instrinsics mais incapable d'écrire du véritable assembleur.

J'utilise régulièrement l'Intel Advisor. C'est un outil de profiling qui permet entre autres d'afficher le code assembleur correspondant (approximativement, c'est pas parfait) à une ligne de code source donnée. Ca permet de facilement vérifier si le compilo a produit de l'assembleur à côte de la plaque ou pas ("mais où qu'elles sont donc mes instructions avx512 quand je compile pour le skylake ???").

----------


## Dross

> Imprimer du code....


J'avoue l'avoir déjà fait.  ::ninja:: 
Pour ma thèse de master on m'a demandé 100 pages, j'ai demandé si ça comptait les annexes, ils ont répondu oui, j'ai demandé après si on pouvais mettre du code en annexe, ils ont répondu oui aussi. Et bien ils les on eu leurs 100 pages, 40 pages de code GUI en MFC C++.  :^_^:

----------


## Patate

> J'avoue l'avoir déjà fait. 
> Pour ma thèse de master on m'a demandé 100 pages, j'ai demandé si ça comptait les annexes, ils ont répondu oui, j'ai demandé après si on pouvais mettre du code en annexe, ils ont répondu oui aussi. Et bien ils les on eu leurs 100 pages, 40 pages de code GUI en MFC C++.


Taille de la police 24. Fainéant !

----------


## Møgluglu

> Imprimer du code.... L'épaisseur de la pile... 3km² de foret amazonienne y sont passés.


Mais arrêtez de vous foutre de la gueule de ce mec. Si ça se trouve, c'est la première fois qu'il imprime son code sur papier avec une page de code entière par feuille. Il faut l'encourager dans cette voie, c'est déjà un gros progrès par rapport à son armoire pleine de cartes perforées.




> ("mais où qu'elles sont donc mes instructions avx512 quand je compile pour le skylake ???").


Je confirme que c'est une feature :
https://software.intel.com/en-us/art...-2018#zmmusage

----------


## Lazyjoe

> Je confirme que c'est une feature :
> https://software.intel.com/en-us/art...-2018#zmmusage


Whaaaaaaaat !
Je vais tester ça avant que le proto qu'on nous a prêté reparte.  ::O:

----------


## Møgluglu

Je suis curieux de voir si tu arrives à obtenir un speedup en forçant AVX-512 ou si icc avait raison de rester en AVX2.  :;):

----------


## Lazyjoe

Moi c'est ifort je rappelle. Bon déjà l'option semble y être aussi.  ::siffle:: 
Fin bon le plus gros de mon boulot ce deux dernières années a été de réorganiser un gros code pour qu'il soit vector-friendly sur la partie calcul, mais ça se paie sur les accès mémoire. Pour l'instant, on a eu des résultats positifs que sur le knl en avx 512. Si ça ne marche pas aussi sur skylake, on peut jeter mon boulot.  :Vibre:

----------


## Foksadure

> Imprimer du code...


On voit que vous n'avez pas connu la programmation sur mainframe BULL finissant, avec un code hérité, mi-généré, mi-monstre issu d'années d'abus et de pratiques personnelles variées.
Sans parler des limitations du système empêchant d'utiliser des noms de variables explicites ou de mettre des commentaires.
Et des éditeurs plein écran sur émulateur de terminal 80 colonnes, sans fonctions de recherche avancées.
A un moment, le papier et le crayon étaient la seule solution pour s'y retrouver.
On avait même différentes versions des programmes sur listing, au cas où.
Avec les affichage des variables sur la console pour débugguer.
Et les classeurs de specs remplissaient des armoires entières.
Il y a seulement 20 ans.

 :Emo:

----------


## Nilsou

Plop les canards.
Alors j'ai un petit soucis de programmation qui semble simple mais me tourmente depuis quelques jours.

Voila j'ai un thread principal et, dans ce cas précis un second thread qui se "réveille" de temps à autres par le thread principal.
Pour ce faire j'utilise les semaphore façon sem_wait et cie. C'est du C, posix et tout ça je précise. 

Jusqu'ici pas de soucis.

Mon soucis vient quand je doit répondre (proprement) à la question : comment faire en sorte de communiquer à d'autres thread/instances que le thread est dans un état "eveillé" ou non?
Je m'explique. 

Dans le thread principal je vais avoir un truc du genre :



> Boucle ->
> BlablaReveil_le_thread


Et dans le thread un truc du genre : 



> Boucle ->
> Attends_le_reveil
> *blibli*


Si on écrit ce qui se passe dans les sémaphores, en fait le semaphore à quasiment tout le temps la même valeur. Vu que le thread secondaire est très rapide, c'est le thread principal ici la limitation. Donc le sémaphore attends (valeur -1), se fait réveiller par le thread principal (valeur 0) et immédiatement se faire décrémenter par le thread secondaire. Résultat des courses, la valeur n'est à 0 que durant une infime fraction de temps processeur (et si le thread secondaire est sur un processeur distinct qui ne sert qu'a ça, on ne voit jamais le cas en réalité). 
Il m'est donc difficile ici d'utiliser la valeur de sem_t pour savoir si j'ai éveillé le thread (si je suis dans *blibli*).

Une solution consiste alors à mettre un autre flag juste après "Attends_le_reveil" mais la je m'expose à un cas d'erreur, rare, mais possible (et c'est ce qui m'a fait détecter le soucis) puisque rien n'indique qu'un quelconque test sur une valeur dans *blibli*, même si c'est la toute première instruction, ou la toute dernière, n'arrivera pas pile de façon desynchrone (les tests pouvant tourner sur d'autres thread/processeurs) .

Exemple : 



> Boucle ->
> Attends_le_reveil
> Je_suis_reveillé=1
> *blibli*


Si un test a lieu dans un autre thread entre Attends_le_reveil et Je_suis_reveillé, alors il ne peut ni se fier à Je_suis_reveillé, qui est faux (0) ni à la valeur du semaphore de attends_le_reveil, qui perd toute signification à cet instant. 

Bref, je cherche une solution propre ... j'en ai pas trouvé pour le moment de vraiment convenable ... 
SI quelqu'un connaît une astuce ... ce fut la cause d'un bug exotique dans un des gros programme de mon labo ...



-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Autres questions qui n'a rien à voir. Quel est l'état de l'art pour optimiser en C/C++ (ou plus bas niveau) des tableau de strctures ? 
Je m'explique, dans mes programmes j'ai bien souvent besoin de la notion objet vu les programmes que je manipule. Mais je me retrouve tout de même à traiter dans de longue boucle des sous éléments de ces objets/structures.

Typiquement : 
for (i,i++)
{
mon_objet[i].bidule ++;
}

Problème, les structures "mon_objet" peuvent être lourde et donc mon_objet[1].bidule peut être fort loin dans la mémoire de mon_objet[2].bidule, ce qui m'interdit d'avoir aux optimisations, explicites ou implicites des instructions processeurs moderne pour la parallélisation des opérations dans les boucles. Pas sans passer par des recopie dans des tableaux intermediaire.

Ce qu'on me recommande souvent c'est de faire des tableau des sous ensembles, type bidule[i] directement. 

Mais ce n'est pas pratique pour la lisibilité du code (c'est carrément affreux en fait). Est-ce qu'il n'y a pas moyens de faire en sorte, à la limite, idées comme ça, que d'un point de vue code ça reste sous le format objet mais que le compilo traite ça comme des alias et me ponde un joli tableau séparé ? 
Je suis ouvert à toute  autre solution évidemment me permettant d'avoir accès aux deux avantages ...

----------


## Lazyjoe

Hum pas tout à fait clair ton histoire de threads... Les autres threads/instances vont exécuter le même code ?

Ce que je verrais : tout simplement mettre en place un mutex autour des accès à Je_suis_reveillé, et une condition pour attendre la création du thread depuis le principal. 

En gros :

Thread principal :


```
pthread_mutex_lock(&mut_reveil);
Reveille_le_thread();
while (Je_suis_reveille == 0) pthread_cond_wait(&signal_reveil, &mut_reveil);
pthread_mutex_unlock(&mut_reveille);
```

Thread fils : 


```
...
//je suis reveille !
pthread_mutex_lock(&mut_reveil);
Je_suis_reveille = 1;
pthread_cond_signal(&signal_reveil);
pthread_mutex_unlock(&mut_reveil);
```

Et dans un autre thread pour voir si le fils est reveillé :


```
pthread_mutex_lock(&mut_reveil);
if (Je_suis_reveille == 1)  printf("Nafl'ftaghn !");
pthread_mutex_unlock(&mut_reveil);
```

Ainsi, aucun conflit possible. Si le thread est actif ou inactif, on peut tester la variable, si il est en cours de reveil (ou d'endormissement, il faut gérer le passage 1 -> 0 dans le mutex évidemment) le thread demandant son état attendra la libération du mutex pour savoir ce qu'il en est.

----------


## Møgluglu

> Mais ce n'est pas pratique pour la lisibilité du code (c'est carrément affreux en fait). Est-ce qu'il n'y a pas moyens de faire en sorte, à la limite, idées comme ça, que d'un point de vue code ça reste sous le format objet mais que le compilo traite ça comme des alias et me ponde un joli tableau séparé ? 
> Je suis ouvert à toute  autre solution évidemment me permettant d'avoir accès aux deux avantages ...


Ça peut se faire avec un peu de soupe de templates, du genre ça :
http://asc.ziti.uni-heidelberg.de/si...11ASX_CUDA.pdf

Pour ton problème de synchro, si j'ai bien compris tu veux synchroniser dans l'autre sens pour que ton thread principal attende que le thread secondaire ait commencé à traiter l'événement ? Il ne suffit pas d'un autre sémaphore ? (ou mutex dans la solution de Lazyjoe)

Dans tous les cas je ne vois pas l'intérêt de la variable non protégée Je_suis_reveille, à part tester les limites du modèle de consistance mémoire de la machine.

----------


## rOut

> Hum pas tout à fait clair ton histoire de threads... Les autres threads/instances vont exécuter le même code ?
> 
> Ce que je verrais : tout simplement mettre en place un mutex autour des accès à Je_suis_reveillé, et une condition pour attendre la création du thread depuis le principal. 
> 
> En gros :
> 
> Thread principal :
> 
> 
> ...


Le plus safe c'est :



```
pthread_mutex_init(&mutex, NULL);
pthread_mutex_lock(&mutex);

// [...]

pthread_mutex_unlock(&mutex);
pthread_mutex_destroy(&mutex);
```

/privatejoke

----------


## Nilsou

> Ainsi, aucun conflit possible. Si le thread est actif ou inactif, on peut tester la variable, si il est en cours de reveil (ou d'endormissement, il faut gérer le passage 1 -> 0 dans le mutex évidemment) le thread demandant son état attendra la libération du mutex pour savoir ce qu'il en est.


Merci pour la solution, je voulais éviter de rajouter des semaphores/mutex, mais bon, ça marche aussi  ::P: 

- - - Mise à jour - - -




> Ça peut se faire avec un peu de soupe de templates, du genre ça :
> http://asc.ziti.uni-heidelberg.de/si...11ASX_CUDA.pdf


Hoooooooooooooooooo, j'ai pas tout lu mais je croit que ceci peut résoudre mon problème avec succés. Je vais lire ça à tête reposé ce soir.
Merci  ::lol::

----------


## Patate

Et sinon ce dev et son code en mode "tout l'univers" en 5 tomes. Il a trouvé la solution??  :Mellow2:

----------


## Møgluglu

> Merci pour la solution, je voulais éviter de rajouter des semaphores/mutex, mais bon, ça marche aussi


Le code avec des mutex revient en gros à implémenter à la main un sem_getvalue sur un second sémaphore.

Par curiosité, dans quel cas tu as besoin de récupérer la valeur de l'état "réveillé" sans synchroniser ? Et quand est-ce que tu remets à zéro la variable partagée ?

----------


## Nilsou

> Le code avec des mutex revient en gros à implémenter à la main un sem_getvalue sur un second sémaphore.


Ben tu vois, c"est exactement ce que j'ai fait au final  ::P:

----------


## Nilsou

> Par curiosité, dans quel cas tu as besoin de récupérer la valeur de l'état "réveillé" sans synchroniser ? Et quand est-ce que tu remets à zéro la variable partagée ?


Bah en fait c'est dans le cadre d'un gestionnaire de réseaux de neurones (c'est mon taf en labo). Je "réveille" des groupes de neurone, en gros ça se passe ainsi : 

Thread principal : séquenceur. 
*-> vérifie chez tout les groupes ceux qui ont vérifié leur conditions pour se lancer (souvent qu'un groupe précédent ai finit de taffer)*
-> lance ceux qui peuvent se lancer
-> attends qu'au moins un groupe ai fini de bosser
-> rebelotes

Thread des groupes : 
-> Attends d'être éveillée par le séquenceur.
-> s’exécute (fonctionnement, apprentissage, tout ça, dépends des groupes, ça appelle juste un pointeur de fonction)
-> signale sa fin d’exécution

Voila, le soucis c'était que le séquenceur peut se faire relancer par n'importe quel groupe ayant fini (tout les groupes sont en parallèle, et bien souvent sur des cœurs différents). Dans ce cas quand le séquenceur s’exécute la partie en gras devient critique. Il doit faire attention au fait que des groupes peuvent être en train de taffer. Ce qui n'est pas critique, mais il doit en être informé (par exemple si tout le programme à fini de faire un tour complet des groupes il est de bon tons d'attendre que ceux qui trainent ai finit à la fin avant de relancer le programme). Il doit aussi être informé des groupes qu'il a déjà éveillé pour ne pas réveiller une seconde fois. 

Pour le moment la solution potable mais encore faillible c'était de faire ainsi : 

Thread principal : séquenceur. 
*-> LOCK SEMAPHORE3*
-> vérifie chez tout les groupes ceux qui ont vérifié leur conditions pour se lancer (souvent qu'un groupe précédent ai finit de taffer) *en testant groupe.TEST et SEMAPHORE2*
*-> MET groupe.TEST à 0*
-> lance ceux qui peuvent se lancer *via SEMAPHORE1*
-> attends qu'au moins un groupe ai fini de bosser *via SEMAPHORE3*
-> rebelotes

Thread des groupes (un par groupe): 
-> Attends d'être éveillée par le séquenceur *via SEMAPHORE1*
*INCRÉMENTE SEMAPHORE2*
-> s’exécute (fonctionnement, apprentissage, tout ça, dépends des groupes, ça appelle juste un pointeur de fonction)
-> signale sa fin d’exécution* en mettant TEST à 1*
*DÉCRÉMENTE SEMAPHORE2*
*INCRÉMENTE SEMAPHORE3*

En gros ce qui est en bleu n'est pas utile ici dans notre problème. Sur le reste en gras et en rouge c'est un autre soucis ... 
TEST permet de savoir si un groupe est fini d’exécuter ou dans un autre état (qui peut aller d'avant le top départ du séquenceur jusqu'a une instruction avant la fin notée par SEMAPHORE2)
SEMAPHORE2 permet de tester si on est dans un état éveillé (en cours de fonctionnement) du point de vue du groupe éveillé. 

Par exemple si je suis en cours d’exécution sur le thread d'un groupe et que je cherche à tester si ce groupe est en fonctionnement ou a fini son taf, ben normalement ça passe, puisque soit il n'a pas fini, soit il a fini (TEST à 1) mais est toujours en cours d’exécution (à une instruction prêt vu que SEMAPHORE2 n'est pas décrémenté) soit il n'a pas fini et est en cours d’exécution, soit il a fini et n'est plus en cours d’exécution. Pour le test de la fin d'un groupe ça passe.

Pour le test du début par contre c'est une autre histoire. Il y a toujours une faille à ce niveau là. Puisque typiquement on a un enchainement, du point de vue su thread "groupe" : SEMAPHORE1 (signal de départ) --> verification semaphore valide --> SEMAPHORE2.
Il y a donc un intervalle chiant entre les deux qui peut être source d'erreur. Par exemple si le séquenceur est appelé deux fois très très rapidement. on pourrais avoir un thread "réveillé" mais non noté comme "en travail" par la SEMAPHORE2.
Les solutions que j'ai trouve ne sont malheureusement pas très propre. Soit j'utilise "TEST" avec une 3eme valeur (jamais lancé :-1 -> lancé : 0 -> fini : 1) mais par design c'est relou parce que j'ai des conditions sur cette variables dans des milliers de lignes du programmes un peu partout. 
Soit j'implémente votre solution donc un sémaphores par groupe en plus.

En réalité je n'aurais pas vraiment de problème si je pouvais toucher à "Test", changer sa valeur de départ par exemple... alors que la en l’occurrence je compte sur semaphore2 qui n'est pas super fiable.


Faut bien comprendre que jusqu'ici ça marche en réalité parce qu'on bosse sur des neurones, alors si un groupes était appelé une fois de trop régulièrement ce n'était pas trop problématique. C'est le défaut de l'apprentissage, ça compense ce genre de défaut en compensant l'erreur de dynamique récurrente introduite, du coups difficile de le voir sauf à coups de printf et de comptage précis de ce qui a été exécuté.

Ha et PS: ce n'est pas moi qui ai conçu ça comme ça à l'origine  ::ninja::

----------


## William Vaurien

> Et sinon ce dev et son code en mode "tout l'univers" en 5 tomes. Il a trouvé la solution??


Oui, c'était 42.

En fait il a laissé son tas de feuilles en plan. Et il attend la retraite.

----------


## Lazyjoe

> Oui, c'était 42.
> 
> En fait il a laissé son tas de feuilles en plan. Et il attend la retraite.


Ptêtre qu'il n'avait pas fini d'imprimer et attend une livrison de toner.

----------


## Dross

> Et il attend la retraite.


Il a déjà choisi un héritier ?  ::trollface::

----------


## Raplonu

> Spoiler pour les programmeurs CUDA : les cooperative groups de CUDA 9, c'est super cool sur le papier, mais c'est pas encore tout à fait sec. Il va falloir attendre CUDA 10 pour en profiter.


Tu as un retour sur leurs utilisations ? Pour le moment, j'utilise une solution maison pour faire un boulot similaire (synchronisation d'un kernel, synchronisation multi GPU, etc.) compatible kepler.-Ce qui m’intéresse surtout c'est latence de ces mécanismes de synchro.

----------


## Patate

> Oui, c'était 42.
> 
> En fait il a laissé son tas de feuilles en plan. Et il attend la retraite.


 :^_^:

----------


## William Vaurien

> Il a déjà choisi un héritier ?


 :ouaiouai:  je crois que ça va me tomber sur le coin de la gueule: équipe de 3 ( plus moi ) avec mon chef actuel qui est sur ce projet depuis 1992 et qui touche encore pas mal au code, mais qui ne va pas rester encore très longtemps, et l'autre dev qui est ambivalent: il répète à longueur de temps qu'il voudrait bien faire du dev un peu plus moderne (Java c'est moderne dans notre référentiel...) mais il ne se forme pas vraiment non plus et ne supporte aucune critique sur son code et le projet en C, pourtant complètement dépassé en terme de 'bonne pratiques'. 

C'est à priori lui qui deviendra le pilier du projet dans quelques années... Je sais pas très bien dans quoi je me suis engagé  :WTF: 


Petite question : vous utilisez quoi pour faire des diagrammes, genre schéma d'archi général pour faire de la documentation. 

J'utilise le plugin 'officiel' de ma boite pour Confluence : Gliffy, mais je trouve que c'est une énorme bouse: ça rame, c'est par ergonomique, faire un petit schéma prend des heures, il n'y a pas de layout auto.
Et j'aime bien Yed que je trouve plutôt efficace au niveau du layout justement, mais qui est parfois un peu moche (il demande beaucoup de customisation pour avoir un look sympa), et un peu trop complexe pour certaines opérations simples. 
Je voudrais faire des trucs de ce genre:

----------


## rOut

Perso je trouve que PlantUML c'est cool.

----------


## William Vaurien

Ah oui  ::):  j'utilise aussi et j'adore pour faire des diagrammes de séquence. C'est un peu moche mais le fait de passer par tu texte est un gros plus. 
Il y a en plus un très bon plugin pour Intellij qui permet de visualiser en temps réel ce que l'on écrit et de faire un peu de complétion auto.

Là je dois représenter les interactions de différents scripts shell et batch qui collaborent (c'est pas ma faute) et se synchronisent à travers des fichiers (informatique de 92, désolé).
Donc il me faut quelques icônes (fichier / serveurs / db ) et des boites et de quoi représenter des flux et leur synchronisation. Sans compter les événements système et les scheduler externe (cron, inittab et autres outils de monitoring qui lancent ces scripts, qui vont à leur tour appeler des batchs et se synchroniser avec des fichiers...)
Donc un espèce de diagramme bâtard sans normalisation.

Sur le papier c'est 10mn mais généralement quand j'essaie de passer mes petit schémas de ce genre vers une version numérique les ennuis commencent. Surtout avec cette merde de gliffy...
Je vais le tenter sur Yed en essayant de ne pas y passer la journée...

----------


## rOut

Y'a un plugin confluence aussi pour PlantUML, et pour les icones, il y a l'air d'avoir ça aussi : https://github.com/tupadr3/plantuml-icon-font-sprites

----------


## William Vaurien

Seulement confluence c'est pas moi qui l'administre et seuls les plugins 'officiels' de ma boite ont droit de citer  ::(: 
Généralement pour les schémas PlantUML (ou yed) je mets une image et le code dans un fichier joint ou une référence vers un repo git.

Mais là je crois que PlantUML ne pourra pas beaucoup m'aider à dessiner ce que je veux !

----------


## Møgluglu

> Bah en fait c'est dans le cadre d'un gestionnaire de réseaux de neurones (c'est mon taf en labo). Je "réveille" des groupes de neurone, en gros ça se passe ainsi :


OK, c'est un scheduler glouton qui assigne des tâches indépendantes sur un nombre fixe de threads.

Il y a une obligation pour que ce soit le thread maître qui assigne les tâches aux threads ? Parce que le plus simple dans ce cas est une file de commandes avec 1 écrivain à un bout et n lecteurs à l'autre bout. Le maître insère les tâches dans la file (ça bloque quand elle est pleine). Les travailleurs popent une tâche dans la file dès qu'ils ont finit la précédente (ça bloque quand elle est vide). Et tu peux utiliser une FIFO synchronisée de ta bibliothèque préférée sans avoir à l'écrire à la main. Avec une seule entrée dans la file ça revient à peu près au même que ton code, mais avoir plusieurs entrées permet de lisser les à-coups et minimiser les temps d'attente.

----------


## Nilsou

L'obligation pour le thread maitre vient du fait qu'on passe de toute façon par un arrêt final et un relancement de tout le "script", ainsi on est certains que l'ensemble s'est exécuté X fois. Le thread maitre est alors chargé de vérifier la pertinence de "si il faut démarrer un groupe ou non". 
Après oui, en pratique ça pourrait être totalement desynchronisé sans thread maitre avec chaque thread qui appelle la vérification lui même lorsqu'il a fini le taf. Mais je préfère garder en main la fréquence max de passage d'un groupe à un autre qui peut alors être facilement paramétré via la fréquence d'appel au thread maitre, si on veut. Après dans le programme c'est aussi pour des raisons historique.

Le soucis avec le coté FIFO c'est que mes threads vont "manger" mes taches, mais que pour un thread donné je pourrait avoir n'importe quel groupe logique de neurone non ? Alors que dans mon fonctionnement actuel il y a un liens explicite entre un thread et le groupe de neurone qu'il gère. J'avoue que je préfère cette dernière solution. Par ailleurs ici les taches ne sont pas vraiment indépendantes puisque leur ordre d’exécution dépends de l’exécution ou non des taches précédentes (selon les liens neuronaux présents) .

----------


## Møgluglu

> Tu as un retour sur leurs utilisations ? Pour le moment, j'utilise une solution maison pour faire un boulot similaire (synchronisation d'un kernel, synchronisation multi GPU, etc.) compatible kepler.-Ce qui m’intéresse surtout c'est latence de ces mécanismes de synchro.


J'ai regardé surtout les petits groupes à l'intérieur d'un thread-block. Pour les groupes grid et multi-grid, l'implémentation de Nvidia s'appuie sur une API avec des fonctions cudaCG* qui n'est pas documenté pour l'instant (une recherche sur cudaCGGetRank renverra bientôt vers ce topic). 
Donc pour l'instant il faut se contenter de la doc des thread groups et des quelques exemples du SDK.




> Le soucis avec le coté FIFO c'est que mes threads vont "manger" mes taches, mais que pour un thread donné je pourrait avoir n'importe quel groupe logique de neurone non ? Alors que dans mon fonctionnement actuel il y a un liens explicite entre un thread et le groupe de neurone qu'il gère. J'avoue que je préfère cette dernière solution. Par ailleurs ici les taches ne sont pas vraiment indépendantes puisque leur ordre d’exécution dépends de l’exécution ou non des taches précédentes (selon les liens neuronaux présents) .


Ça ressemble à de l'ordancement de synchronous data flow ou de réseau de Kahn du coup, non ? Tu as un graphe de tâches que tu veux placer sur des ressources (threads) en respectant les dépendances et les contraintes sur le type de ressource (groupe de neurone). Avec aussi des barrières de synchro avec le thread maître, que tu peux exprimer comme une tâche qui dépend de toutes celles qui précèdent.

----------


## Thingazazi

On peut poser des questions techniques en programmation python sur ce topic ? J'ai un problème de temps de calcul que je n'arrives pas à résoudre alors que la solution est peut être super simple pour les pros de ce langage.

----------


## Lazyjoe

Facile : change de langage.  ::ninja:: 

Sinon le topic est précisément là pour ce genre de question.  ::P:

----------


## Thingazazi

Mais, cet homme est partout  ::o: 

Voici donc l'exposé de mon soucis :

Je dispose de 38 array M de dimensions m*n répartis en 8 matrices différentes pour des raisons de limitation de l'espace mémoire alloué. Chaque array correspondant à autant de fonctions coût différente d'une méthode de détermination de deux paramètres A et B de dimensions respectives m et n (chaque fonctions étant calculée d'une manière spécifique, je ne peux pas en réduire le nombre). 
Ce qui m'intéresse est de connaître pour chaque fonction les valeurs x et y des paramètres A et B tels que M[x,y] = max(M)

Pour faire ça, j'utilise classiquement un argmax qui me retourne x et y moyennant un petit unravel.index. Rien de bien sorcier jusque là.

L'opération est également réalisée environ 150 000 fois par analyse à travers une boucle for.

Jusqu'à récemment, les dimensions m et n avaient pour valeurs 100 et 75 mais pour des questions de qualité des résultats, nous avons du les augmenter jusque 991 et 778 et c'est là qu'est mon problème...

Auparavant, la résolution de l'ensemble de mon problème prenait 30 min pour une analyse, désormais il faut compter plus de 30h. Sachant qu'il y a des milliers d'analyses à faire et que l'objectif est de pouvoir faire l'analyse en moins d'une heure pour que l'algo puisse être passé en production  ::cry:: 

La chute de perf vient du argmax dont les perfs baissent logiquement fortement avec l'augmentation de la dimension des tableaux : de 10s environ par tableau auparavant pour 150 000 itérations, je suis passé à plus de 15min.

Mon problème est donc de trouver un moyen de rendre le tout beaucoup plus efficace sachant que le traitement se fait obligatoirement en python sur un thread et que le projet devait être terminé vendredi dernier  ::ninja::  et que je ne peux donc pas tout ré-écrire de zéro pour prendre en compte les nouveaux besoins.

Il y a des équivalents plus rapides au argmax ou des moyens simple d’accéléré tout ça en ordonnant différemment les dimensions ? Pour le moment, je n'ai pas trouvé d'alternative.

Je ne sais pas si c'est bien compréhensible, ni si une solution peut être trouvée vu les contraintes techniques du projet  ::rolleyes::

----------


## Møgluglu

Si tu utilises déjà numpy, ça semble difficile de faire beaucoup mieux sans changer de langage ou d'algo. Comment est-ce que les tableaux sont mis à jour ?

----------


## Thingazazi

J'utilise déjà numpy oui. Pour les tableaux, ils sont supprimés à la fin de chacune des itérations pour laisser de l'espace mémoire à d'autres variables utilisées pour d'autres méthodes de philosophie différente.

J'avais pensé découper mes tableaux en sous-éléments, comparer les maximums des sous éléments puis ne faire la recherche que dans celui qui contient le max. Seulement, à ajouter ce genre d'étape, je ne suis pas convaincu que ça fasse gagner du temps puisque chaque tableau étant indépendant, je suis obligé de répéter l'opération à chaque fois.

----------


## Møgluglu

Qu'est-ce qui te fait dire que c'est le calcul du max qui prend du temps, plutôt la création et le remplissage des tableaux à chaque itération ?

Tu aurais un pseudo-code avec les grandes lignes de l'algo ?

----------


## ducon

Oui, je pensais plutôt à la manipulation (suppression de lignes) des tableaux.

----------


## vectra

> Perso je trouve que PlantUML c'est cool.


Et c'est supporté par *org-mode* sous emacs  :Vibre: 

Org-mode  :Vibre: 
Comment j'ai pu vivre sans pendant tout ce temps  :Boom:

----------


## vectra

> J'utilise déjà numpy oui. Pour les tableaux, ils sont supprimés à la fin de chacune des itérations pour laisser de l'espace mémoire à d'autres variables utilisées pour d'autres méthodes de philosophie différente.
> 
> J'avais pensé découper mes tableaux en sous-éléments, comparer les maximums des sous éléments puis ne faire la recherche que dans celui qui contient le max. Seulement, à ajouter ce genre d'étape, je ne suis pas convaincu que ça fasse gagner du temps puisque chaque tableau étant indépendant, je suis obligé de répéter l'opération à chaque fois.



Si t'as pas timé un peu décemment ton code, tu n'as _aucune_ idée d'où vient ton bottleneck. 
En tous cas, si tu persistes à allouer et désallouer itérativement de grands volumes de données par manque de place, faut pas venir te plaindre après du résultat. Je ne sais pas quel est le code C de ta lib Python et comment il fait dedans, mais c'est généralement une très mauvaise idée. 

Tu as aussi des limites physiques lorsque tu parcours des gros volumes mémoire. Compte 20 Go/s de bande passante pour un bon code C++ bien optimisé sur un PC standard. Au doigt mouillé dans les 5-10 Go/s avec un code C++ immédiat, et disons 1 Go/s pour un code Python parce que c'est Python  ::lol::   :haha:  

A 10 Go/s, il te faut déjà 2 dixièmes de secondes pour (disons) incrémenter les valeurs d'un tableau qui fait 1 Go en mémoire...
Là, avec 38*1000*1000*150 000, tu as 5700 Go de parcourus rien que pour faire un incrément des valeurs  à chacune de tes 150k itérations. Ca fait déjà 19 minutes à 10 Go/s, en supposant que tu aies des valeurs sur un octet (4 en flottants 32 bits, par exemple).
Si tu fais en plus des argmin, tu fais bien plus d'opérations mémoire à chaque itération. Ca finit par taper. 

Ca sent quand-même fortement la solution GPU, qui te permet de tabler sur 200Go/s de BP pour commencer. Je suis sûr qu'il y a moyen de faire ça, même dans le langage impie qu'est Python.

----------


## Thingazazi

> Qu'est-ce qui te fait dire que c'est le calcul du max qui prend du temps, plutôt la création et le remplissage des tableaux à chaque itération ?
> 
> Tu aurais un pseudo-code avec les grandes lignes de l'algo ?


Quelques tests fait sur un script simplifié du problème. Mais à vrai dire, je n'ai pas pensé à regarder le remplissage et la suppression des tableaux. Le remplissage se fait par calcul d'une fonction densité de probabilité avec loi normale suivant un ou deux axes, avec réplication du résultat dans le second axe pour le cas du 1d. Mais je n'ai pas ça dans le script simple avec lequel j'ai tester le argmax.

Je vous mettrai le pseudo code demain ouais, ça sera sans doute plus clair.

- - - Mise à jour - - -

@ Vectra
Ah bah c'est un soupçon, mais comme je suis loin d'être un as de la programmation, je peux me planter dans les grandes largeurs  :;): 

Intéressant la problématique de la lecture du volume de données, je ne connaissait pas ces ordre de grandeur. Pour les vidages mémoire, c'est si impactant que ça ? C'est plus rapide de remplir de nouveau un tableau existant que d'en recréer un nouveau ?

----------


## vectra

Tu as un coût minimal dès que tu lis / écris en mémoire. Si tu comptes tous tes accès, rien qu'avec la BP mémoire maximale de ton processeur + mémoire, tu sais déjà le temps incompressible en deça duquel ton aglo n'ira jamais.

Je m'imaginais qu'allouer de la mémoire itérativement lorsqu'il y a de grandes plages libres, ça coûtait rien. En pratique, c'est souvent infernal / horrible mais je ne sais plus dans quelles proportions parce que je n'ose plus. Pour avoir codé en Common Lisp dans ma jeunesse, je me souviens que le consing (l'allocation) était souvent le premier bottleneck.

----------


## Thingazazi

> Ca sent quand-même fortement la solution GPU, qui te permet de tabler sur 200Go/s de BP pour commencer. Je suis sûr qu'il y a moyen de faire ça, même dans le langage impie qu'est Python.


Il faudra que j'apprenne à faire du code parallèle déjà avant d'en arriver là. Et le code final devra pouvoir tourner sur un petit serveur de calcul une fois en production, pas une machine de guerre. En plus, je ne sais même pas si le calcul GPU se fait déjà chez nous.

Déjà, le passage : script de bidouille perso pour traiter de petits volumes de données (qqes Go) pour mes besoin de recherche -> script de production avec 20 étapes de traitements, des tests et vérifications dans tous les sens pour enfin en arriver au coeur du problème, ça nécessite des connaissances techniques que je ne maîtrise pas encore pour rendre le tout efficace.

----------


## vectra

Tu dois avoir du PyCuda. Ca devrait encapsuler la plupart de tes opérations avec des appels de CUDA C++ sans que tu aies besoin de coder du massivement parallèle.
Tu peux faire des appels séquentiels de méthodes qui, elles, seront implémentées de manière massivement parallèle. C'est pas forcément top (streaming?) mais ça aide énormément.

Avant de partir dans les tours, faire un timing précis et sérieux de tout le programme. Je ne sais pas comment on fait sous Python.

----------


## Møgluglu

> Quelques tests fait sur un script simplifié du problème. Mais à vrai dire, je n'ai pas pensé à regarder le remplissage et la suppression des tableaux. Le remplissage se fait par calcul d'une fonction densité de probabilité avec loi normale suivant un ou deux axes, avec réplication du résultat dans le second axe pour le cas du 1d. Mais je n'ai pas ça dans le script simple avec lequel j'ai tester le argmax.


Du coup est-ce que tu as vraiment besoin de tes tableaux ? Tu ne peux pas calculer la fonction à la volée ?

Question subsidiaire, les fonctions de densité de proba sont-elles vraiment non-continues, non-dérivables et irrégulières au point que la seule solution pour trouver leur max soit de les échantillonner régulièrement sur tout l'intervalle ? Ou c'est plus compliqué que ça ?

----------


## Thingazazi

> Du coup est-ce que tu as vraiment besoin de tes tableaux ? Tu ne peux pas calculer la fonction à la volée ?


Il faut que je stock le résultat quelque part, je dois appliquer des masques sur les valeurs infinies ou nan obtenues dans certains endroit des tableaux où l'un des paramètres n'est pas toujours défini.




> Question subsidiaire, les fonctions de densité de proba sont-elles vraiment non-continues, non-dérivables et irrégulières au point que la seule solution pour trouver leur max soit de les échantillonner régulièrement sur tout l'intervalle ? Ou c'est plus compliqué que ça ?


Je dirai non aux trois premières questions, mais sans certitude. Sur l'ensemble des fonctions utilisées, il y en a une qui me pose soucis si je n'ai pas une résolution suffisante, la seule qui dépend des dimensions, toutes les autres n'ayant une dépendance que dans une. 

Mais après réflexion, le problème vient peut-être de là, on fait peut être. A savoir que pour notre mesure V, notre pdf est calculée comme suit lorsqu'on la compare à notre abaque(x,y) avec x et y indépendant l'un de l'autre,:
(1./sqrt(2pi*sigma²))*exp((Abaque(x,y) - V(x,y))²/sigma²) sigma ayant pour valeur 0.1 suivant x et y, et V variant de -50 à 20, comme l'abaque en gros.
C'est du côté de l'abaque que je fais varier la résolution, elle à une forme assez spéciale que je ne pourrais pas décrire facilement.

Je vous montrerai des images, ce sera plus parlant.

Edit, j'ai reformulé un peu suite à des petite erreurs.

----------


## Møgluglu

> Il faut que je stock le résultat quelque part, je dois appliquer des masques sur les valeurs infinies ou nan obtenues dans certains endroit des tableaux où l'un des paramètres n'est pas toujours défini.


Tu n'as intérêt à stocker des données que si tu les réutilises plusieurs fois derrière. Et appliquer un masque, c'est juste ajouter un if, non ?




> Mais après réflexion, le problème vient peut-être de là, on fait peut être. A savoir que pour notre mesure V, notre pdf est calculée comme suit lorsqu'on la compare à notre abaque(x,y) avec x et y indépendant l'un de l'autre,:
> (1./sqrt(2pi*sigma²))*exp((Abaque(x,y) - V(x,y))²/sigma²) sigma ayant pour valeur 0.1 suivant x et y, et V variant de -50 à 20, comme l'abaque en gros.
> C'est du côté de l'abaque que je fais varier la résolution, elle à une forme assez spéciale que je ne pourrais pas décrire facilement.


Si ton problème c'est de trouver le max de ta fonction multivariée sur des intervalles donnés, et que tu sais calculer les gradients de ton abaque (et donc ceux de ta PDF), alors ça se fait en un coup de scipi.optimize.minimize : https://docs.scipy.org/doc/scipy/ref.../optimize.html  :;): 
Et tu as le choix entre plein d'algos très intelligents implémentés de façon efficace.

----------


## Kamikaze

Yo les copains je vais me lancer dans un projet perso d'analyse de séries temporelles et de stats avec dans le tas de la jolie data visualization. (et dans une moindre mersure le tout parsemé de bonnes perfs si possible parce que ça va envoyer de la grosse donnée, donc multithreading & grid computing dans le tas)

Vous avez des recommandations niveau lib sympa ou langage/framework particulier?

Là je pense partir sur une base de python avec éventuellement des modules indépendants si j'ai besoin de perfs ou d'une lib en particulier.
L'idée sera de pas réinventer la roue et de lier tout le bouzin via le python. Genre si jamais y'a un truc mega cool en R je taperai dedans, etc.

Sinon je m'intéresse à Julia en ce moment, z'avez un avis d'expert expéditif? Ça a l'air cool

- - - Mise à jour - - -

Je suis aussi particulièrement intéressé par des libs qui permettent de faire des trucs du genre (le mec utilise une lib perso en l'occurence), animations et transformations 2D/3D

----------


## Lazyjoe

> Quelques tests fait sur un script simplifié du problème. Mais à vrai dire, je n'ai pas pensé à regarder le remplissage et la suppression des tableaux. Le remplissage se fait par calcul d'une fonction densité de probabilité avec loi normale suivant un ou deux axes, avec réplication du résultat dans le second axe pour le cas du 1d. Mais je n'ai pas ça dans le script simple avec lequel j'ai tester le argmax.


Mouais. De manière général, pour ta problématique sur le calcul du max il n'y a pas grand-chose à optimiser en fait. Lire, comparer, sur un grand tableau le processeur va se tourner les pouces et c'est le débit de la mémoire qui va entrer en compte. Pas beaucoup d'intérêt à paralléliser cette opération sur une seule machine (sauf si il faut plusieurs coeurs pour exploiter toute la bande passante mémoire, possible sur "le gros serveur de calcul"  ::P:  ). Sinon, vu que tu as multiplié par dix la dimension en x et par 10 en y c'est pas très étonnant que ça prenne 100 fois plus de temps.  :^_^: 

Mais bon, l'opération la plus efficace reste encore celle qu'on n'a pas besoin de faire. Donc comme le dit mogluglu, au minimum il faudrait calculer le max en même temps que tu calcules les valeurs du tableau (si il est vraiment indispensable de les conserver). Tu t'éviteras une lecture complète du tableau, et vu le calcul un poil lourd à faire sur chaque case y ajouter un calcul de max ne devrait même pas se ressentir sur les performances de cette étape.

Et pour le coup, ces calculs de valeurs m'ont l'air suffisamment intenses arithmétiquemnt que pour bénéficier d'une parallélisation.

Mais bon, l'opération la plus efficace reste encore celle qu'on n'a pas besoin de faire.  ::ninja::  La solution finale de mogluglu à l'air encore mieux si applicable dans ton cas (là ça devient trop mathématique pour moi).

----------


## vectra

C++ 17  :Vibre: 
https://www.oreilly.com/ideas/c++17-...wsltr_20171118

----------


## FB74

Des livres sur Java chez Humble Bundle:
https://www.humblebundle.com/books/java-books

----------


## TarteAuxFleurs

Question pour du C++ : j'ai besoin de récupérer de événements de touches dans un programme qui tourne dans un terminal. Autant sur Windows aucun problème, autant sur Linux, je n'ai aucune idée comment faire.
Les solutions proposées vont de utiliser SDL/SFML, à lire directement depuis /dev/input/event0. 
Le problème, c'est que ça doit compiler avec le moins de librairies externes. Le mieux ce serait 0 librairies.
Vous avez une idée de comment faire ?

----------


## deathdigger

OZ Code à 44$ pour le Black Friday : http://landing.oz-code.com/BF-sale20...2bc1-205752201

Par contre, le système de licence a changé, c'est dorénavant un abonnement. Du coup, je passe mon tour.

----------


## rOut

Ben lis directement /dev/input/event*, y'a une API evdev exposée directement par le noyau. Mais bon tu vas te faire bien chier quand même... (Un peu de doc là : https://www.kernel.org/doc/html/v4.1...vent-interface)

----------


## Cwningen

Les définitions des structures et ioctls sont dans linux/input.h (et linux/input-event-codes.h pour les codes de touches mais tu n'as pas besoin de l'inclure directement). Comme dit dans le lien de rOut, lire les évènements c'est juste lire la structure input_event en boucle depuis le fichier. Il y a aussi des ioctls pour avoir plus d'infos sur le périphériques (boutons et axes présents par exemple).

Sinon, il y a la possibilité d'utiliser libevdev mais ce n'est pas indispensable, surtout si tu veux limiter les dépendances.

----------


## TarteAuxFleurs

Merci  ::):

----------


## Thingazazi

> Mouais. De manière général, pour ta problématique sur le calcul du max il n'y a pas grand-chose à optimiser en fait. Lire, comparer, sur un grand tableau le processeur va se tourner les pouces et c'est le débit de la mémoire qui va entrer en compte. Pas beaucoup d'intérêt à paralléliser cette opération sur une seule machine (sauf si il faut plusieurs coeurs pour exploiter toute la bande passante mémoire, possible sur "le gros serveur de calcul"  ). Sinon, vu que tu as multiplié par dix la dimension en x et par 10 en y c'est pas très étonnant que ça prenne 100 fois plus de temps. 
> 
> Mais bon, l'opération la plus efficace reste encore celle qu'on n'a pas besoin de faire. Donc comme le dit mogluglu, au minimum il faudrait calculer le max en même temps que tu calcules les valeurs du tableau (si il est vraiment indispensable de les conserver). Tu t'éviteras une lecture complète du tableau, et vu le calcul un poil lourd à faire sur chaque case y ajouter un calcul de max ne devrait même pas se ressentir sur les performances de cette étape.
> 
> Et pour le coup, ces calculs de valeurs m'ont l'air suffisamment intenses arithmétiquemnt que pour bénéficier d'une parallélisation.
> 
> Mais bon, l'opération la plus efficace reste encore celle qu'on n'a pas besoin de faire.  La solution finale de mogluglu à l'air encore mieux si applicable dans ton cas (là ça devient trop mathématique pour moi).


Retour sur le projet après quelques jours à avoir du faire autre chose. Merci pour tous vos retour, ça me donne des pistes pour améliorer le programme là où c'est possible.

Concernant la simultanéité du calcul du max et de ma fonction, le max est recherché sur la combinaison de plusieurs fonctions du type décrit et non pas sur une seule. Nous avons en fait 6 fonctions densité de probabilités évaluées pour des paramètres différents qui sont toutes ou partie combinées entres elle, en une fois ou en plusieurs fois (recherche de solution intermédiaires) etc. Il y a donc des cas où on pourrait tout faire d'un coup, mais j'ai besoin des tableaux pour la suite.

@Mogluglu
Merci pour la mention de scipy.optimise.minimise, je ne connaissais pas, je vais aller voir ce qu'il en est.

@Vectra
Comme tu l'avais évoqué, j'ai tracé précisément les différentes étapes de mes calculs. Il se trouve donc en effet que le argmin n'est pas la plus coûteuse en temps, le plus long se trouve être le calcul de chacune de nos pdfs. En revanche, comme on détermine seulement 6 pdfs contre bien plus de argmin, le temps cumumlé de ces derniers devient plus long. Nous sommes donc en train de voir pour changer notre approche et éliminé un maximum d'étapes intérmédiaires qui ne sont plus forcément pertinentes. Un fois que ce sera fait, je me pencherai de nouveau sur l'optimisation de tout ça à partir de toutes les infos que vous m'avez donné.

Merci les canards  :;):

----------


## Møgluglu

Ma suggestion : tu écris une nouvelle version du composant dans laquelle tu repart de zéro en utilisant scipy.optimize. Au pire, si ça ne marche pas tu pourras simplement reprendre ton ancien code. Mais ça n'a pas de raison de ne pas marcher.

Parce que j'ai pas vu ton code mais pour ce que tu décris m'évoque ça :


Spoiler Alert!

----------


## Thingazazi

> Ma suggestion : tu écris une nouvelle version du composant dans laquelle tu repart de zéro en utilisant scipy.optimize. Au pire, si ça ne marche pas tu pourras simplement reprendre ton ancien code. Mais ça n'a pas de raison de ne pas marcher.
> 
> Parce que j'ai pas vu ton code mais pour ce que tu décris m'évoque ça :
> 
> 
> Spoiler Alert! 
> 
> 
> 
> http://leocat.free.fr/shadok/series/images/velo.jpg


C'est un peu l'idée ouais, plein de choses se sont ajoutées petit à petit pour aboutir à un truc mal branlé. En même temps c'est logique, on a voulu partir de l'existant pour changer le coeur de l'algo mais en conservant une démarche proche de ce qui se faisait avant. Sauf que ça n'est pas adapté du tout.
Je démarre un code parallèle pour repartir sur de bonnes bases.

----------


## Møgluglu

OK, on est d'accord.  :;): 
Ce que je veux dire surtout, c'est qu'il faut faire gaffe à pas réinventer la roue carrée. Tu as l'avantage de coder en Python et d'avoir accès à des bibliothèques à la fois très puissantes et simples d'emploi. Dans scipy, même l'algo bruteforce que tu utilises est déjà codé. Voici une autre doc avec plein de dessins pour expliquer les algos : http://www.scipy-lectures.org/advanc...ion/index.html

De ce que tu expliques de ton problème et tes contraintes en résolution, ça n'a pas l'air de nécessiter spécialement de calculs ou de mémoire, pas besoin de code parallèle si tu utilises le bon algo. Quelques centaines de milliers de fonctions en 2 ou 3 dimensions à optimiser avec une précision d'une douzaine de bits, c'est du gâteau. Quand tu seras en dimension 1000, on pourra commencer à discuter de parallélisation.  ::):

----------


## vectra

Y'a des postes en GPU/Télécom dispo en Belgique. 
C'est une SSII qui me démarche, mais y'a p'têt moyen pour des coins du coin de tenter le coup en direct (moi je ne peux pas).

----------


## Cwningen

J'ai un problème de C++, je voudrais avoir un type qui contient un variant dont il est lui-même une alternative. Je peux utiliser un pointeur pour régler le problème de taille, mais j'aimerais avoir un alias pour le type de variant comme je l'utilise à plusieurs endroits mais je ne peux pas le déclarer en avance.



```
struct mon_variant; // problème: struct déclare un type, pas un alias

struct Truc
{
    std::unique_ptr<mon_variant> machin;
};

using mon_variant = std::variant<..., Truc , ...>;
```

Je suis obligé d'utilisé le (long) nom complet du variant ou quelqu'un a une astuce ?

----------


## Møgluglu

Dans la définition de ta classe Truc, ça me semble difficile d'éviter la référence explicite à Truc d'une façon ou d'une autre vu que la définition est récursive. Mais une fois que le type est construit, tu peux utiliser un typedef.

----------


## BentheXIII

Réinventer la programmation?

----------


## William Vaurien

L'article est assez indigeste et finalement n'apporte rien de bien nouveau. Les commentaires sont plus concis et plus intéressants aussi  ::): 
Faire générer du code par la machine avec des diagrammes... comme avec l'UML ? Ou avec les designers d'IHM, genre VB...
Au début des années 2000 un de mes profs ne jurait que par l'UML qui devait selon lui remplacer les développeurs...

Dans certains cas c'est peut être adapté, mais j'ai pu voir de sacrés horreurs avec des systèmes EAI. 
Avec ce truc là plus précisément:



J'ai du reprendre un process de système d'envoi de fax développé avec ce truc par un 'informaticien sur le tas' qui avait tiré des flèches dans tous les sens. 
Le code spaghetti c'est pourri aussi bien en texte qu'en diagramme. Par contre démêler un diagramme c'est finalement bien plus pénible: le 'code' est multi-dimensionnel; ce qui est visuel et ce qui est caché.

Le non informaticien à l'impression que c'est super simple et qu'il comprend le processus, mais en fait derrière c'est plein de merde planquée, sous chaque flèche et sous chaque étape. Bien évidemment toutes ces merdes sont dans un langage propriétaire, impossible à refactoriser et très dur à maintenir. J'ai eu également des expériences similaire avec du BPMN.

Manipuler des graphes plutôt que du texte à parfois du sens (EAI, BPMN, ...), mais le code textuelle à quand pas mal d'avantages. A condition de pas vouloir mettre la logique dans le diagramme...

Ou alors, autre piste de l'article, utiliser des méthodes formelles que seuls les mathématiciens comprennent et peuvent utiliser ? 
C'est pas vraiment viable comme solution pour des entreprises hors NASA et autre AIRBUS...

Il manque clairement quelque chose pour aider à gérer des énormes base de codes, peut être une sorte d'IA, qui pourrait faire ce travail de validation formelle en fond pour s'assurer de la cohérence à plus haut niveau 
et gérer l'implémentation à partir de spécifications. Mais là il faudrait aussi des IA pour reprendre en main ceux qui écrivent ces dites specs, quand c'est le cas  ::):

----------


## rOut

Pareil, on nous raconte aussi que c'est pour que des les gens qui connaissent les problématiques métiers puisse implémenter eux-même les bons algorithmes et vérifier qu'ils sont corrects... On sait très bien en vrai qui va se taper le sale boulot d'implémentation, et qui sera bien plus heureux de pouvoir faire ça en mode texte, qui est finalement une représentation bien plus expressive et même plus formalisée que la version graphique.

C'est un peu comme si on voulait remplacer le langage mathématique par des preuves à base de petits croquis parce que ce serait plus abordable par le commun des mortels, et soit disant que ça éviterait des erreurs sur des théorèmes fondamentaux.

----------


## Møgluglu

C'est vrai que l'article part un peu dans tous les sens. Quitte à s'intéresser aux travaux de Gérard Berry, autant aller directement directement à la source, par exemple : http://www.college-de-france.fr/site...3-04-16h00.htm

C'est un excellent orateur et pédagogue, il n'est pas arrivé au Collège de France par hasard... D'ailleurs ses cours reprennent à partir de janvier prochain, si vous avez l'occasion d'y assister, foncez, c'est vraiment intéressant.  :;):

----------


## William Vaurien

En effet la présentation du cours est intéressante.




> Génie logiciel et vérification formelle partagent deux prérequis essentiels : d’abord, la qualité des spécifications initiales, qui doivent être précises, non-contradictoires, et complètes mais sans excès de précision inutile ; ensuite, la qualité des langages de programmation, dont la sémantique doit être précise tout en restant intuitive. Beaucoup de projets industriels échouent encore à cause de leur non-respect de ces contraintes.


Voilà tout est dit en 2 lignes  :;): 

Bon après perso je me méfie des langages qui tirent trop vers les maths, parce que je ne suis pas matheux. Ils manipulent des concepts qui sont parfois bien obscures pour moi, et je ne sais pas si c'est totalement une bonne chose: les langages plus 'terre à terre' ont l'avantage de rester à peu près lisible... Je ne sais pas ce qu'il entend par la sémantique qui doit être précise tout en restant intuitive...

----------


## Dross

> Pareil, on nous raconte aussi que c'est pour que des les gens qui connaissent les problématiques métiers puisse implémenter eux-même les bons algorithmes et vérifier qu'ils sont corrects... On sait très bien en vrai qui va se taper le sale boulot d'implémentation, et qui sera bien plus heureux de pouvoir faire ça en mode texte, qui est finalement une représentation bien plus expressive et même plus formalisée que la version graphique.


C'est un problème de modélisation surtout, pas d'outil. Et c'est pas comme si les gourou/programmeurs ne s'y penchaient pas. On parle parfois du Domain-Driven Design pour ce besoin très précis : intégrer les experts du domaine DANS la boucle de modélisation, justement pour intégrer les problématiques métier. 

Dans l'Event Sourcing aussi j'ai vu des aspects du genre, par exemple lors de la réhydratation des entités (rejouer les évènements pour retrouver l'état actuel), on a tendance à vouloir utiliser des "règles métier" qui collent au plus proche du domaine. Avec des notions qui proviennent du DDD.

Bref soit j'ai rien compris à l'article, soit ces gens ne suivent pas ce qui se passe aujourd'hui dans les entreprises et se limitent aux cas choquants/erreurs (Toyota qui n'a pas utilisé de langage fonctionnel avec en plus des états partagés, c'est le cas d'école de ce qui ne faut pas faire en embarqué), donc totalement à coté de la plaque.

----------


## Møgluglu

> Bon après perso je me méfie des langages qui tirent trop vers les maths, parce que je ne suis pas matheux. Ils manipulent des concepts qui sont parfois bien obscures pour moi, et je ne sais pas si c'est totalement une bonne chose: les langages plus 'terre à terre' ont l'avantage de rester à peu près lisible... Je ne sais pas ce qu'il entend par la sémantique qui doit être précise tout en restant intuitive...


Le fait qu'un langage soit défini formellement ("tire vers les maths") ne veut pas dire qu'il est forcément haut niveau. On utilise des méthodes formelles pour prouver des propriétés sur du code assembleur, ou encore plus souvent sur des circuits.
Et ça remonte peu à peu vers le software... On commence enfin à avoir des spécifications de jeux d'instructions sont dans un format lisible en machine, par exemple ARMv8 en ASL, ou des modèles de consistance mémoire décrits précisément d'un point de vue mathématique, par exemple chez Nvidia. Pourtant là on manipule des concepts très terre-à-terre comme des bits dans les registres et des octets en mémoire.

Et inversement, tu as plein de langages "modernes" très haut niveau qui sont mal voire pas du tout spécifiés, je ne vais pas donner de noms mais ils se reconnaîtront.

Quand tu as 1h30 de libre tu peux regarder le replay, promis ça ne fait pas mal à la tête.

----------


## ducon

Si si, je veux des noms.

----------


## Sahnvour

Un indice chez vous dans le nom du topic.  ::ninja::

----------


## GrandFather

> Un indice chez vous dans le nom du topic.


Ma première citation dans un titre de topic, j'en suis encore tout ému.  :Emo: 

Bon, j'ai continué mon bout de chemin avec Python, et je dois dire que le langage en lui-même me laisse encore un peu dubitatif. Avec l'absence de switch/case, son opérateur ternaire contre-intuitif et la vilaine pièce rapportée qu'est son implémentation des classes abstraites, il m'a réservé  quelques autres surprises pas toutes agréables. C'est partiellement compensé par quelques sucreries syntaxiques sympathiques, mais dans l'ensemble je reste sur le constat d'un langage un peu bricolé, et Ruby reste à mes yeux infiniment plus élégant.

Il y a par contre un point sur lequel Python est très impressionnant, c'est sur l'écosystème. Le projet sur lequel je bosse ratisse assez large sur le plan technologique, et j'utilise donc, en plus des librairies natives pléthoriques, pas mal de librairies tierces : lxml pour le parsing XML/validation XSD, pymysql pour MySQL, PyQT pour l'IHM, ReportLabs pour la génération de PDF, pycryptodome pour de la signature PKCS#1_v1_5, pywin32 pour l'API Win32, PyInstaller pour le déploiement... Toutes sont riches fonctionnellement, bien supportées et correctement documentées. De ce point de vue, c'est une réussite.

----------


## William Vaurien

Est-ce que les IA vont remplacer les codeurs ???
Par-ce que "coder, c'est chiant à mourir" ? 

Persos je pense que les IA qui codent je crois bien que oui, ça va bien finnir par arriver. Plus rapidement qu'on l'imagine. Peut-être pas tout, mais dans les grandes lignes, oui.

----------


## Robix66

> Pareil pour le haut niveau 
> 
> Ca me rappelle "L'enfer, c'est le code que j'ai écrit il y a trois ans".


Fixed.

----------


## vv221

> Y'a pas de mauvais outil


*_tousse_*electron*_tousse_*  ::ninja::

----------


## Tramb

> *_tousse_*electron*_tousse_*


Ouais y en a MASSE de mauvais outils.

----------


## deathdigger

> Ouais y en a MASSE de mauvais outils.


 (notez le nom de l'url)


 ::ninja::

----------


## vectra

C'est juste Windev, _ze french dizizze_.
Rien n'a changé depuis... heu... le début?

----------


## Nilsou

> Hello les code freaks  Après avoir pythonné une année dans des projets de data science, je suis vraiment heureux d'avoir appris un premier langage de programmation. C'était une envie depuis longtemps et j'ai vite pris le virus et ce topic y a contribué 
> 
> Avant de me former sur Django pour construire mon future site web, j'ai décidé de suivre le cours d'introduction à l'informatique donné par HarvardX sur edX. C'est assez bien fait je trouve, même si c'est très dur parfois, surtout quand on prend les exercices en difficulté hard. Pour moi, c'est idéal parce qu'on apprend quelques bases en C, ce qui a m'a fait réaliser plein de choses que j'ignorais en tapant mes fonction et en construisant mes modèles en python. Pour avoir fait plein de MOOC, je le recommande si le format vous plaît.
> 
> Par contre, j'ai beaucoup moins de plaisir à résoudre des problèmes en langage de bas niveau. J'image que la difficulté doit beaucoup y contribuer, *mais je me demandais :* est-ce que ça se résume qu'à la difficulté, ou bien est-ce qu'il existe des penchants naturels pour la programmation en langage de haut niveau ou de bas niveau selon votre expérience ?
> 
> Autrement, je suis encore un Bulbizare en programmation et, même si j'essaie essentiellement d'avoir les skills pour les projets auxquels je suis confronté, j'ai hâte de voir où j'en serai dans quelques années


Pour moi c'est une question de formation.

Je fais des data science, et mon laboratoire code tout en C, mais parce que c'est un laboratoire d'informatique à l'origine, avec des gens qui ont été formée aux langages bas niveau AVANT d'être formé au python. 

C'est mon cas aussi par exemple, et je préfère de loin manipuler des réseaux de neurone en C++ avec les bibliothèques qui vont bien plutôt qu'en Python, même si on est une minorité dans ce cas. 

Amha, le python est devenu très populaire du fait de son accessibilité pour des non-informaticiens, mais dés lors que tu te met à saisir, comprendre et formuler tes pensés sur un langage de bas niveau tel que le C, c'est alors difficile de ne pas voir les lourdes limites du python. Surtout si tu veut un peu sortir des sentiers battus.

Donc pour moi c'est principalement une question d'habitude.

- - - Mise à jour - - -




> ...


Quelques nuances toutefois : 

- Tu ne gère pas la mémoire en Python, et c'est quand même quelque chose de très différent du C/C++
- Les bibliothèques Python sont souvent écrites en C/C++ donc souvent si tu veut mettre les mains dans le cambouis localement pour ton propre usage c'est plus pratique de parler le même langage qu'une éventuelle biblio open-source que tu retravaille.

----------


## gros_bidule

> Pour ton histoire de recursivité, c'est ta structure graphe qui était trop grosse ? (ps: pas bien de pas mettre de test d'intégrations, bouh ! )


Même pas, le graphe ne faisait que quelques Mo, on ne stockait que le minimum d'infos.
On avait une bête fonction lancée sur un profil Twitter, puis récursivité sur les N amis, etc. C'est bien la stack qui finissait par être pleine.
Le soucis de fond, c'est qu'il s'agit d'une récursivité infinie : il n'y a pas de condition pour l'arrêter étant donné que l'on voulait scrapper un maximum de comptes en un temps donné (genre 1 mois). Passé ce délai, le client voulait stocker les données et faire des stats. Le scrappeur allait tourner tant qu'il pouvait.
En général, quand tu fais de la récursivité, tu as une condition pour l'arrêter, car tout ce que tu veux faire c'est un gros calcul par exemple, donc tu as peu de chances de dépasser la taille de la pile, même s'il faut rester vigilant. 
D'ailleurs, il est possible que la taille de la pile était différente sur nos machines de devs et le serveur du client, précipitant ou reportant le moment fatidique   ::P: 

Mais ouaip, il fallait clairement des tests d'integ. On était juste très jeunes, et les anciens faisaient des sites en full JSP. On ne savait même pas que les tests unitaires ça existait.
C'est dingue quand j'y repense. Depuis la boite a fait un gros bond technique, c'est chouette à voir.

----------


## Kamikaze

Bah le truc pour la mémoire justement, c'est que c'est évident qu'une structure de donnée "A" va pomper de la mémoire et que si "B" est plus grosse ça va pomper plus, si tu la load en mémoire, ça va te pomper de la RAM si tu la persiste sur le disque ça va te pomper ton disque, si tu la copies ça va pomper le double. Si tu parcours la structure ça va faire bosser le processeur, d'autant plus pour "B" (enfin pendant plus longtemps). Y'a rien de bien méchant si t'as les bases, ensuite les détails certes, y'a des trucs à apprendre.

Mais je pense que tu peux tout à faire t'en sortir et aller très loins avec de simple sanity checks. Si tu sais l'opération que tu dois faire, sous forme abstraite, du genre:

On a 1 million d'utilisateurs, chaque utilisateur génère 50 Mo par heure, et on traite le tout à la fin de la journée (genre faire une moyenne/des stats sur l'ensemble des données) et on veut que le traitement soit fait en 30 secondes

Bah c'est assez clair quels seront tes besoins en terme hardware, que ce soit le throughput réseau, la RAM que ça va te prendre, l'espace disque, le CPU etc.

C'est quelque chose que je fais très souvent et que je vois qu'il manque à beaucoup de personne. Genre à chaque fois je débarque sur un projet, je demande combien ils ont de données à traiter, la complexité du traitement, quel hardware ils mettent en face, et 99% du temps le hardware est complètement overkill, mais le software est tellement à la pisse (et surtout mal compris dirons nous) que les mecs compensent en jettant plus de harware dessus.

J'ai vu des énormités que vous n'imaginez même pas, à base de 12 serveurs surpuissants pour gérer 3 spreadsheet excel.

Bref tout ça pour dire que ce genre d'analyses pragmatiques ne nécessitent pas une grande connaissance bas niveau non plus.

Genre les perfs du python s'pas compliqué, on sait que c'est de la merde, n'importe qui peut se faire un bête benchmark et le prouver, ensuite à voir quels sont tes besoins, mais la logique du software restera la même.

https://benchmarksgame-team.pages.de...st/python.html

Les benchmarks sont extrêmements simples, les conséquences aussi. Le reste "bas niveau" n'est pas si important (je résume l'idée en gros), après bien évidemment que ça peut le devenir selon son domaine.

---

D'ailleurs même en Python, ou tout ce que tu veux de lent, la majorité du hardware que je vois est overkill.

Rien que les ordres de grandeur ne sont pas respectés souvent, faut se souvenir qu'on a des gigas de mémoire et qu'on parle de cpu gigahertz multicoeur. La majorité des tâches tourneraient très bien avec une version obsolète de python, sur une machine virtuelle en java sur un Pentium 4, avec 100 Mo de mémoire.

Une bonne partie des boites tourneraient mieux avec un Raspberry PI en tant que serveur si le software était correct

----------


## MrBeaner

> Pour moi c'est une question de formation.
> 
> Je fais des data science, et mon laboratoire code tout en C, mais parce que c'est un laboratoire d'informatique à l'origine, avec des gens qui ont été formée aux langages bas niveau AVANT d'être formé au python. 
> 
> C'est mon cas aussi par exemple, et je préfère de loin manipuler des réseaux de neurone en C++ avec les bibliothèques qui vont bien plutôt qu'en Python, même si on est une minorité dans ce cas. 
> 
> Amha, le python est devenu très populaire du fait de son accessibilité pour des non-informaticiens, mais dés lors que tu te met à saisir, comprendre et formuler tes pensés sur un langage de bas niveau tel que le C, c'est alors difficile de ne pas voir les lourdes limites du python. Surtout si tu veut un peu sortir des sentiers battus.
> 
> Donc pour moi c'est principalement une question d'habitude.


Merci pour ton retour ! C'est trop bien pour moi de trouver un canard dans le domaine  ::happy2::  Je solliciterai volontiers ton expertise CPC pour éclairer mes futures lanternes  :;):

----------


## Dross

> *_tousse_*electron*_tousse_*


Un outil qui permet de faire du multi-OS réellement sans efforts avec le même code base et la rapidité de dev du web ? J'veux dire, c'est grâce à lui qu'on a enfin un semblant d'IDE qui tiens la route sur linux avec VS Code.  ::ninja::

----------


## Orhin

> Un outil qui permet de faire du multi-OS réellement sans efforts avec le même code base et la rapidité de dev du web ? J'veux dire, c'est grâce à lui qu'on a enfin un semblant d'IDE qui tiens la route sur linux avec VS Code.


Les IDE Jetbrains tournent sur Linux.  :tired:

----------


## vectra

Toutafé.
Merci CLion d'ailleurs...

----------


## Tramb

Sinon QtCreator, ça marche pas mal non plus. Et c'est snappy.

----------


## Nilsou

> Genre les perfs du python s'pas compliqué, on sait que c'est de la merde


Merci !  ::P: 

Par contre je n'imaginais pas à quel point, merci pour le benchmark. Sur plein de tache, python vs C c'est du 50 pour 1  :^_^: 

- - - Mise à jour - - -




> Merci pour ton retour ! C'est trop bien pour moi de trouver un canard dans le domaine  Je solliciterai volontiers ton expertise CPC pour éclairer mes futures lanternes


Attention, ma spécialité c'est aujourd'hui l'IA bio-inspirée appliquée au robot, à la vision etc... j'évoluais dans un labo de data-science et je suis formé dans le domaine mais je n'irais pas jusqu’à dire que c'est mon domaine ou même ma spécialisation actuellement  :^_^:  . 

En vrai j'aime pas ça les big data  ::ninja:: 




> Les IDE Jetbrains tournent sur Linux.


Et Eclipse, même si il est lourd.




> Toutafé.
> Merci CLion d'ailleurs...


Excellent, au passage.

----------


## ducon

> Par contre je n'imaginais pas à quel point, merci pour le benchmark. Sur plein de tache, python vs C c'est du 50 pour 1


Et pour le temps de développement, c’est 1 pour 50.  ::trollface::

----------


## Tramb

> Et pour le temps de développement, c’est 1 pour 50.


Oh il y a des langages bien plus expressifs que Python et 40x plus rapides aussi, hein.

----------


## gros_bidule

Yeah mais ont-ils le même écosystème ? Python n'est pas très rapide, mais ça suffit pour énormément de cas d'usage, et tu auras plein de libs pour faire ce que tu veux. Comme en Java et JS (liste absolument non exhaustive), qui ont aussi chacun un super écosystème. Du moins... il est connu par les masses.
Parfois aussi, le choix de la techno est fait parce que la team qui fera la maintenance ne sait faire que du Pyhon  ::P:

----------


## Kamikaze

Perso désormais je fonctionne en mode hyper opportuniste et j'optimise plus tard si besoin. C'est à dire que si y'a une fonctionnalité cool qui fait ce que je veux, où quelle soit, je vais la chopper, s'pas non plus compliqué d'appeler un programme via un autre, voire une machine distante via un programme. Une fois que j'ai regroupé toutes mes fonctionnalités pour faire ce que je voulais, et que je suis pas satisfait des perfs, ou de la facilité de déploiement, de maintenance etc. Là je commence à éclaircir et améliorer le bazar.

C++ est le langage que j'utilise pour gluer le tout ensemble, simplement par habitude et que j'aime bien la communauté autour (cppcon etc.), c'est un environnement que je trouve fun. Et l'air de rien c'est devenu hyper simple de cross compiler pour n'importe quelle plateforme.

Mais généralement si tu choisis un truc un tant soit peu populaire il y aura tout ce que tu veux si tu prends le temps de chercher.

Sinon je suis tout à fait d'accord pour Jetbrains, j'aime beaucoup ce qu'il font, et je suis notamment sur CLion. Je suis un peu déçu qu'ils ne soient pas open source et gratos mais bon, je peux pas trop leur en vouloir vu la qualité du produit et le support etc.

PyCharm a sa version gratos au moins

----------


## Nilsou

Après franchement, Eclipse c'est bien aussi.
C'est un peu lourd mais sur un ordi moderne c'est pas franchement perceptible, et question fonctionnalités c'est très complet.

----------


## acdctabs

Si le mode debug d'eclipse ne merdait pas sur les variables ouais ça irait.
Moi je n'ai pas le choix d'utiliser Eclipse et franchement le mode debug me rend fou.

----------


## deathdigger

D'un point de vue professionnel, j'ai rarement vu de programmes en python. J'en connaissais un seul, mais je ne suis pas sûr qu'il n'ait pas été migré vers un autre langage. La majorité de ce que j'ai vu, c'est du Java ou du .Net, sinon, après c'est du web. Alors oui, le multi-OS tout ça, c'est bien, mais 99% des boites (chiffre sorti de mon cul) n'ont que du Windows. Allez, y'a bien des OS différents, comme l'AS400, avec parfois quelques routines en RPG/COBOL, whatever, mais généralement, c'est la base DB2 qui sert à stocker les infos, et basta.

----------


## Nilsou

> Si le mode debug d'eclipse ne merdait pas sur les variables ouais ça irait.
> Moi je n'ai pas le choix d'utiliser Eclipse et franchement le mode debug me rend fou.


J'ai jamais vu de problème  ::unsure::

----------


## acdctabs

bon là je vais pas coder pendant un petit moment mais j'en reparlerais avec + de détails... (genre dans 6 mois, si j'y pense).

----------


## Orhin

Le problème d'eclipse c'est surtout l'ergonomie qui n'est clairement pas au niveau des produits Jetbrains (même si ça a tendance à s'améliorer sur les dernières versions).

D'ailleurs en parlant de Jetbrains, quelqu'un a pu tester leur outil "Code with me" pour faire du pair-programing à distance ?
C'est en early access pour l'instant mais ça a l'air prometteur : https://blog.jetbrains.com/blog/2020...e-with-me-eap/

----------


## TwinBis

> D'ailleurs en parlant de Jetbrains, quelqu'un a pu tester leur outil "Code with me" pour faire du pair-programing à distance ?
> C'est en early access pour l'instant mais ça a l'air prometteur : https://blog.jetbrains.com/blog/2020...e-with-me-eap/


Pas encore, ce n'est pas compatbile avec mon proxy d'entreprise (la connexion passe par un serveur Jetbrains), mais j'ai hâte de pouvoir mettre la main dessus, ça a l'air très pratique.

----------


## Nilsou

> Le problème d'eclipse c'est surtout l'ergonomie qui n'est clairement pas au niveau des produits Jetbrains (même si ça a tendance à s'améliorer sur les dernières versions).
> 
> D'ailleurs en parlant de Jetbrains, quelqu'un a pu tester leur outil "Code with me" pour faire du pair-programing à distance ?
> C'est en early access pour l'instant mais ça a l'air prometteur : https://blog.jetbrains.com/blog/2020...e-with-me-eap/


J'utilise massivement l'extension codetogether à la place : https://www.codetogether.com/

Ça s'installe sur les produits Jetbrain (https://plugins.jetbrains.com/plugin/14225-codetogether), sur Eclipse et sur VScode et ça permet d'être indépendant de l'interface, tu peut même mettre le lien simplement dans un navigateur web et choisir l'interface qui te sied puis coder directement dans le navigateur. 

Je le préfère aux autres alternatives que j'ai pu tester, c'est gratuit et on l'utilise avec tout nos étudiants actuellement.

- - - Mise à jour - - -




> Le problème d'eclipse c'est surtout l'ergonomie qui n'est clairement pas au niveau des produits Jetbrains (même si ça a tendance à s'améliorer sur les dernières versions).


Franchement je code avec les deux en parallèle (l'un pour l'enseignement, l'autre pour moi même) et je retrouve mes repères dans les deux, c'est quand même très semblable je trouve ...

----------


## vv221

> J'veux dire, c'est grâce à lui qu'on a enfin un semblant d'IDE qui tiens la route sur linux avec VS Code.


Ah ouais, VS Code, un bon outil… Finalement je ne m’étonne plus trop que tu apprécies Electron  ::rolleyes::

----------


## Mr Slurp

> Ah ouais, VS Code, un bon outil… Finalement je ne m’étonne plus trop que tu apprécies Electron


Si on pouvais éviter les guerres d'idéologie sur tel ou tel outil hein.... :tired:

----------


## vectra

Oui, parce que c'est Emacs qui vous roxxe tous, hein  :Vibre: 


Sinon, probable fin de partie pour *Atlassian*, en ce qui me concerne du moins.
https://www.atlassian.com/fr/migration/journey-to-cloud

Ils cessent (bientôt) toute vente de licences serveur au profit de licences cloud. En gros, il ne sera plus possible d'héberger en local les services Atlassian, seul moyen d'assurer la confidentialité des projets, en particulier de secteurs sensibles. Je n'ai pas beaucoup utilisé Gitlab à ce jour, j'en étais tenté, mais voilà que la question ne se pose même plus.

J'imagine que des licences serveur seront toujours dispo pour les grands comptes, mais pas pour le péquin moyen: en cela, c'est à peu près la même situation que pour Github.

----------


## TarteAuxFleurs

D'ailleurs je ne sais pas si vous lisez régulièrement la section hardware advanced, mais j'ai créé un nouveau topic là-bas pour des conseils de lecture :




> Hello les canards !
> 
> Je cherche un ou des bouquins qui traitent de la micro-architecture des processeurs modernes.
> Quels compromis sont fait, exécution dans le désordre, fonctionnement des enclaves sécurisés, prédiction des branches, bref tout ce qui touche à l'ingénierie de l'architecture d'un processeur moderne.
> Vous avez des recommandations ?
> 
> Merci




Le fameux topic.

----------


## Kamasa

> Sinon, probable fin de partie pour *Atlassian*, en ce qui me concerne du moins.
> https://www.atlassian.com/fr/migration/journey-to-cloud


Vers un avenir cloud, ensemble
SÉCURITÉ RENFORCÉE • FIABILITÉ ACCRUE • GESTION SIMPLIFIÉE • INNOVATION ACCÉLÉRÉE

Je vois pas pourquoi tu te plains de l'orientation qu'ils prennent  ::ninja::

----------


## ook4mi

> D'ailleurs je ne sais pas si vous lisez régulièrement la section hardware advanced, mais j'ai créé un nouveau topic là-bas pour des conseils de lecture :
> 
> 
> 
> Le fameux topic.


Je sais pas jusqu'à quel point tu veux descendre, cela me semble plus électronique que informatique non?

----------


## Nilsou

> Vers un avenir cloud, ensemble
> SÉCURITÉ RENFORCÉE • FIABILITÉ ACCRUE • GESTION SIMPLIFIÉE • INNOVATION ACCÉLÉRÉE
> 
> Je vois pas pourquoi tu te plains de l'orientation qu'ils prennent


C'est bien, à la fin il  n'y aura plus que Gitlab, et le monde sera enfin en paix, en harmonie.

----------


## vectra

Toujours pas foutus de supporter le org-mode, tropisme windows un peu trop évident, gestion merdique des licences déjà acquises, SAV dans ton cul: je commence à avoir fait le tour de chez Atlassian.

----------


## war-p

> C'est bien, à la fin il  n'y aura plus que Gitlab, et le monde sera enfin en paix, en harmonie.


La CI de gitlab  :Gerbe:

----------


## gros_bidule

> J'ai jamais vu de problème


Pareil  :^_^: 

En fait pour Eclipse, j'ai l'impression que c'est comme pour n'importe quel gros outil. Il y a une phase d’apprentissage qui peut rebuter, surtout si tu as déjà tes habitudes sur un outil concurrent.
J'ai déjà vu des collègues pro-Eclipse, et purée, ils maîtrisent leur IDE tout comme il faut. Debug, couverture de code, git, etc... tout semble bien fonctionner bien chez eux, efficacité maximale. Ils ont peut être appris à contourner quelques bugs, mais c'est pareil sous n'importe quel IDE.

IJ a peut être plus la cote car il a une esthétique top-moumoute et c'est une boite qui promeut bcp ses outils  ::): 
Mais je me rappelle mon premier essai d'IJ, vers 2012, et purée, c'était lent, lourd, moche, et j'étais complètement perdu. J'ai continué sur NetBeans (mais ça aurait pu être Eclipse) que je maîtrisais, et me suis mis pour de vrai à IJ plus tard, dans un nouveau taff où les collègues, tous pro-IJ, étaient là pour m'épauler et me donner plein de conseils sur comment utiliser IJ. C'est seulement après ça que j'en ai fait mon IDE principal. Sinon je serais peut être encore sous NetBeans, pestant contre cet IJ trop bizarre qui fait les mêmes choses mais pas de la même manière.

----------


## Kamikaze

La majorité des IDE se contentent d'utiliser un debugger existant, genre gdb, et font simplement de l'affichage. 

Perso j'aime pas Eclipse simplement car rien n'est intuitif et la gestion des dépendances à base de click et de location absolue donne la gerbe. Y'a p'têt un moyen de faire ça proprement mais bon, jamais testé.

Je me souviens des cauchemar ou j'arrive et pull un projet eclipse tout ça pour voir que ça se réfère à des path de la machine du mec qui a push, et que pour se rendre compte de ça en premier lieu il faut click droit sur des dossiers (spéciaux de Ecplise! propre à l'IDE) pour voir des chemins, et y'a aucun document, non propriétaire, qui centralise le projet de manière self contained, mis à part ptet un vieux format propriétaire dégueulasse et illisible il me semble. 'Fin bref.

Même un projet tout nu avec simplement les sources et de quoi compiler (make, une commande gcc, ce que tu veux) me paraissait plus propre.

J'aime bien l'approche de CLion avec CMake (même si certes CMake a ses travers)  et les outils standards.

C'est à dire que mon projet CLion, n'importe qui veut s'en servir, peu importe l'IDE, alors que loader un projet Eclipse sans Eclipse, putain quelle angoisse. 

Comme d'habitude y'a sûrement moyen de faire ça bien, mais jusqu'à présent jamais vu ça pour Eclipse.

Et ouais c'est moche. Mais bon ça c'est autre chose. J'ai aussi pas mal de bug graphiques, et y'a pas moyen d'avoir plusieurs fenêtres (diviser son espace de travail) en même temps si mes souvenirs sont bons. Du coup si tu forward ça avec X11 c'est encore plus dégueulasse, bref.

Vraiment pas mon truc.

----------


## Kamikaze

Ah j'ai rien dit pour les plusieurs fenêtres, j'ai un vieux projet Eclipse qui traine et j'avais déjà fait ça. Je pensais p'tet à ces histoires de workspace

----------


## Dross

> Ah ouais, VS Code, un bon outil… Finalement je ne m’étonne plus trop que tu apprécies Electron


Tu serai surpris, j'ai vu les plus bourru des barbus s'attendrir devant VS Code.  :^_^: 

Et en effet, j'apprécie Electron, je sais faire du desktop natif mais pour certaines app c'est carrément plus adapté, pas d'un point de vu technique puriste, mais d'un point de vu "time to market" et effort nécessaire pour faire quelque-chose.

On peux bien faire les fines bouches et dire que c'est mieux de faire du Qt/WPF/etc, mais le truc c'est que pour faire une app moderne avec ça te prendra 4 fois plus de temps. 

D'ailleurs depuis qu'on a Electron Linux deviens de plus en plus viable car les outils sortent en même temps sur toutes les plateformes. 
Ça change du temps de Gimp et autre où il leur faut 4 ans pour rajouter un bouton.  ::XD::

----------


## Tramb

> Yeah mais ont-ils le même écosystème ? Python n'est pas très rapide, mais ça suffit pour énormément de cas d'usage, et tu auras plein de libs pour faire ce que tu veux. Comme en Java et JS (liste absolument non exhaustive), qui ont aussi chacun un super écosystème. Du moins... il est connu par les masses.
> Parfois aussi, le choix de la techno est fait parce que la team qui fera la maintenance ne sait faire que du Pyhon


Certes, certes, Shakira est plus populaire que Mahler :D

Plus sérieusement, on est d'accord, mais Python n'a vraiment que la popularité pour lui par rapport à d'autres langages, à mon sens.

----------


## Mr Slurp

> Certes, certes, Shakira est plus populaire que Mahler :D
> 
> Plus sérieusement, on est d'accord, mais Python n'a vraiment que la popularité pour lui par rapport à d'autres langages, à mon sens.


Bah je dirai que python a pas la popularité pour faire des application UI, mais pour tout les outils de traitement de fichier en masse / automatisation, ou dans le domaine de la recherche en AI, il est franchement sur le devant de la scène. Suffit de voir à quel point les librairies de NN tel que TensorFlow mettent en avant le package python, au détriment du maintient d'un build C++ fonctionnel sur toutes les plateformes.

----------


## Tramb

On est d'accord, Python c'est fait pour remplacer bash, pas pour plus  ::P: 

Et oui, c'est le langage de glu le plus populaire, je dis pas le contraire.

----------


## Helix

En traitement du signal et d'images, il s'installe de plus en plus en remplacement de Matlab.

----------


## rOut

> On est d'accord, Python c'est fait pour remplacer bash, pas pour plus 
> 
> Et oui, c'est le langage de glu le plus populaire, je dis pas le contraire.


Pourtant c'est pas du tout adapté, pour lancer des processus et piper des trucs c'est juste l'enfer en quantité de code par rapport à ce que tu ferais avec bash. C'est surtout fait pour faire des petits scripts de traitement de données, pour remplacer awk ou sed quand ce que tu veux faire deviens légèrement plus compliqué.

----------


## gros_bidule

Je pense que c'est une affaire de goût. Je préfère passer sur du Python quand je vois que je n'arrive plus à relire un script bash.
Parce que bon, en bash on peut faire de sacrés trucs, mais quand tu pipes 4 ou 5 commandes un brin compliquées et qui t'obligent à relire le _man_ (dont awk ou sed, comme tu l'as fait remarquer), pfiouuu, je préfère un script Python certes 3 fois plus gros, mais aussi 3 fois plus explicite.
Et ça passera sous Windowze.

Côté dev, on s'en sert aussi en réseau. En ce moment je bosse sur de la virtualisation de réseau (de gros FAI), via la plateforme ONAP. On a le choix entre Kotlin et Python, on a commencé en Kotlin mais on migre tout sur Python. Les perfs sont largement assez bonnes, et, étant pourtant un dev JVM à la base, j'avoue que passer sur Python s'avère être très sympa, tant pour le dev que pour l'ops. Je maudits quand même les _pip install_ qui veulent parfois compiler des trucs (alors qu'en Java tu DL des jars, c'tout), mais aucune techno n'est parfaite ^^.
Ha, et on a des libs Python pour causer avec des matos réseau, mais bcp moins de libs JVM ^^. Ca a clairement joué.

----------


## ducon

pip ? À part dans la Quête du Graal, j’évite.

----------


## gros_bidule

Tu m'intrigues. Que fais-tu à la place ?
Nan, parce que s'il y a mieux, je regarde volontiers  ::):

----------


## Nattefrost

Ce n'est plus vrai pour pip, à part peut être dans les domaines proches de la data science (scipy & co) qui utilisent beaucoup de bindings C/C++/Fortran - domaine que je ne connais pas pour être franc.
J'ai pas eu à compiler quoi que ce soit en python depuis 2-3 ans et l'introduction du format wheel (.whl). Et mon boulot c'est en partie de maintenir à jour les libs python de la solution de ma boîte (gros projet django).

----------


## Cwningen

awk et sed, ce sont leur propres langages de scripts, c'est plus vraiment du bash. La force de bash c'est la facilité de manipuler des processus et des fichiers, mais le reste est horrible (d'où l'intérêt de souvent le mélanger avec d'autres langages de scripts comme awk ou sed, voire perl ou python). Si il y a des astuces pour manipuler aussi facilement les processus et leurs E/S en python, je veux bien un cours.

La meilleure alternative à pip, c'est le gestionnaire de paquet de ta distribution (je regarde toujours là en premier).

----------


## ducon

> Tu m'intrigues. Que fais-tu à la place ?
> Nan, parce que s'il y a mieux, je regarde volontiers


Je n’ai pas d’usage professionnel de Python, c’est juste pour moi. C’est pour ça que je me limite à installer les bibliothèques dont j’ai besoin via apt.

----------


## Tramb

> pip ? À part dans la Quête du Graal, j’évite.


 ::wub::  Meilleur ldvelh.

- - - Mise à jour - - -




> awk et sed, ce sont leur propres langages de scripts, c'est plus vraiment du bash. La force de bash c'est la facilité de manipuler des processus et des fichiers, mais le reste est horrible (d'où l'intérêt de souvent le mélanger avec d'autres langages de scripts comme awk ou sed, voire perl ou python). Si il y a des astuces pour manipuler aussi facilement les processus et leurs E/S en python, je veux bien un cours.
> 
> La meilleure alternative à pip, c'est le gestionnaire de paquet de ta distribution (je regarde toujours là en premier).


Ouais quand je dis bash, c'est évidemment la fête à cut, sed, awk.

----------


## jilbi

> Je me souviens des cauchemar ou j'arrive et pull un projet eclipse tout ça pour voir que ça se réfère à des path de la machine du mec qui a push, et que pour se rendre compte de ça en premier lieu il faut click droit sur des dossiers (spéciaux de Ecplise! propre à l'IDE) pour voir des chemins, et y'a aucun document, non propriétaire, qui centralise le projet de manière self contained, mis à part ptet un vieux format propriétaire dégueulasse et illisible il me semble. 'Fin bref..


T'es sûr que c'est pas le mec en question qui a push ses fichiers de config persos comme un porc ?  ::huh::  J'ai bossé sur une version d'eclipse pendant 4 ans et les seules problémes de compilations que j'ai eu c'est justement quand les gens faisait de la merde avec le .gitignore et poussait les fichiers specifiques à l'ide.

Sinon l'histoire avec attlassian, c'est chaud,surtout qu'ils revoient les tarifs en fevrier. Aprés, je pense que les pme s'en foutent elles sont déjà en cloud, c'est le bon contexte pour forcer ça (je me souviens que notre sysadmin avait galéré pour nous ouvrir le gitlab en télétravail).

----------


## Captain_Cowkill

Salut les canards !

Je pose mon drapeau ici. En effet, suite à un gros questionnement professionnel j'ai décidé de me lancer dans la programmation. Je ne sais pas encore parfaitement dans quoi je veux me lancer mais depuis une semaine je fouine un peu partout pour apprendre les bases du C++ et je pense aussi jeter un œil côté Python. Le but sur le moyen/long terme est de me lancer dans une formation avec mon compte CPF et de me reconvertir totalement. Depuis que j'ai mis le nez dedans c'est devenu une étrange addiction.

Voilà, c'était une tranche de vie. Je vais jeter un l'œil à l'OP.

----------


## Charmide

La classe, on finira par les convertir tous  :B): 




> Tu serai surpris, j'ai vu les plus bourru des barbus s'attendrir devant VS Code.


Tout à fait, faut vraiment pas être à jour (ou pas vouloir l'être) pour déclarer péremptoirement que c'est de la merde. Je me rappelle avoir essayé Atom (même base electron) y'a quelques années alors que je jonglais entre vim et sublime, et effectivement c'était du caca (perf/réactivité, écosystème, j'en passe). VSC maintenant, t'as le droit de pas aimer, mais c'est plus la même. Un peu comme Microsoft qui n'est plus la boîte qu'elle était y'a 15 ans, mais y'a toujours beaaaaucoup d'inertie dans les têtes.

----------


## deathdigger

> Salut les canards !
> 
> Je pose mon drapeau ici. En effet, suite à un gros questionnement professionnel j'ai décidé de me lancer dans la programmation. Je ne sais pas encore parfaitement dans quoi je veux me lancer mais depuis une semaine je fouine un peu partout pour apprendre les bases du C++ et je pense aussi jeter un œil côté Python. Le but sur le moyen/long terme est de me lancer dans une formation avec mon compte CPF et de me reconvertir totalement. Depuis que j'ai mis le nez dedans c'est devenu une étrange addiction.
> 
> Voilà, c'était une tranche de vie. Je vais jeter un l'œil à l'OP.


En première approche, je te déconseille quand même le C++. Java, C#, Python oui, C++, tu vas plus te dégouter qu'autre chose (et c'est pas là où t'auras le plus de taf).

----------


## FB74

Je suis de l'avis de Deathlamortquicreuse.

Java a au moins le mérite d'avoir certains automatismes (garbage collector) que le C++ n'aura pas.

Je ne fais pas (plus) de programmation, mais je pense qu'il vaut mieux passer par autre chose avant de tâter du C++ (que je n'ai jamais pratiqué d'ailleurs).

----------


## Dross

Académiquement j'ai commencé avec le C, puis le C++ et mon premier job a été avec C#. Je pense au contraire que c'est pas un mal de commencer avec des langages plus bas niveau pour bien comprendre certains concepts qui sont cachés après, et de passer ensuite à des langages modernes pour le coté productif (si adapté, bien entendu).

Je parle des bases en C et C++ hein, pas d'aller développer une application complète avec du UI, multi-threading et tout.

----------


## Tramb

> Salut les canards !
> 
> Je pose mon drapeau ici. En effet, suite à un gros questionnement professionnel j'ai décidé de me lancer dans la programmation. Je ne sais pas encore parfaitement dans quoi je veux me lancer mais depuis une semaine je fouine un peu partout pour apprendre les bases du C++ et je pense aussi jeter un œil côté Python. Le but sur le moyen/long terme est de me lancer dans une formation avec mon compte CPF et de me reconvertir totalement. Depuis que j'ai mis le nez dedans c'est devenu une étrange addiction.
> 
> Voilà, c'était une tranche de vie. Je vais jeter un l'œil à l'OP.


Si tu veux partir sur des bases saines : https://htdp.org/
Après ça tu peux bouger sur Python sans souci. Et apprendre des trucs plus bas niveau.

Autre approche, plus bottom up, commencer par de l'assembleur et du C. 
Les deux marchent  ::):

----------


## deathdigger

> Académiquement j'ai commencé avec le C, puis le C++ et mon premier job a été avec C#. Je pense au contraire que c'est pas un mal de commencer avec des langages plus bas niveau pour bien comprendre certains concepts qui sont cachés après, et de passer ensuite à des langages modernes pour le coté productif (si adapté, bien entendu).
> 
> Je parle des bases en C et C++ hein, pas d'aller développer une application complète avec du UI, multi-threading et tout.


C'est vrai tant que t'es étudiant, et que donc t'as le temps d'étudier  ::P: 
Quand t'es en reconversion, il vaut mieux chercher un langage haut niveau (plus simple) et bankable (plus facile de trouver du boulot), quitte à se former après sur des concepts plus compliqués.

Personnellement, j'ai commencé avec du VB, avant de faire du PHP (spaghetti) puis du Java/.Net,etc
Je n'ai jamais étudié de langage bas niveau, mais je comprends les principes de pointeurs et autres vu que j'y suis confronté.

----------


## FB74

> Académiquement j'ai commencé avec le C, puis le C++ et mon premier job a été avec C#. Je pense au contraire que c'est pas un mal de commencer avec des langages plus bas niveau pour bien comprendre certains concepts qui sont cachés après, et de passer ensuite à des langages modernes pour le coté productif (si adapté, bien entendu).
> 
> Je parle des bases en C et C++ hein, pas d'aller développer une application complète avec du UI, multi-threading et tout.


Je suis d'accord, mais je partage l'avis du creuseur de mort (  ::ninja::  ).

Moi j'ai fait de l'info "à mon niveau" dans les années 80, j'avais même regardé un poil d'assembleur sur Amiga (et même du langage machine sur les calculettes HP48SX).
Donc même si je suis LOIN de connaitre tout, je pense avoir quelques bases dans le "comment ça fonctionne".

Et c'est vrai que lorsque tu fais une formation, on ne s'embarrasse pas de tout ça, on va directement au langage évolué (ce qui fait que les gens ne savent pas ce qui se passe derrière et ne comprennent pas le concept "d'optimisation"...  ::ninja::  ).

Mais pour du boulot avec une formation "courte", t'as pas le temps d'aller trop en détail, surtout avec plein de trucs "utiles" (= utilisés au boulot) à intégrer.

----------


## Nilsou

> Académiquement j'ai commencé avec le C, puis le C++ et mon premier job a été avec C#. Je pense au contraire que c'est pas un mal de commencer avec des langages plus bas niveau pour bien comprendre certains concepts qui sont cachés après, et de passer ensuite à des langages modernes pour le coté productif (si adapté, bien entendu).
> 
> Je parle des bases en C et C++ hein, pas d'aller développer une application complète avec du UI, multi-threading et tout.


Totalement d'accord. D'ailleurs c'est ce qu'on fait dans l'enseignement, pour ces mêmes raisons. Nos expériences en tenant le python en premier ce sont mal terminées ensuite.




> Java a au moins le mérite d'avoir certains automatismes (garbage collector) que le C++ n'aura pas.


HAHAHAHAHA.
Le garbage collector n'est absolument PAS un avantage. De rien du tout. Faut y aller pour écrire ce genre de truc ...

Le garbage collector : 

- Te masque la réalité de ce qu'il se passe et n’emmène ainsi qu'incompréhension quand on doit ensuite comprendre le fonctionnement sous jacent. 
- N'est jamais parfait (c'est prouvé théoriquement d'ailleurs)
- Coute en perfs
- Ne te fait gagner que peu de temps sur 95% des programmes que tu peut être amené à faire. (surtout en programmation orientée objet comme le C++).

Conseiller à quelqu'un le Java face au C++ en enseignement sous prétexte qu'il masque des choses avec le Garbage collector c'est juste n'importe quoi. Si l'un de mes collègues soutenait ce genre de truc en réunion d'enseignement il se prendrait deux tartes  ::P:

----------


## TarteAuxFleurs

> Totalement d'accord. D'ailleurs c'est ce qu'on fait dans l'enseignement, pour ces mêmes raisons. Nos expériences en tenant le python en premier ce sont mal terminées ensuite.
> 
> 
> HAHAHAHAHA.
> Le garbage collector n'est absolument PAS un avantage. De rien du tout. Faut y aller pour écrire ce genre de truc ...
> 
> Le garbage collector : 
> 
> - Te masque la réalité de ce qu'il se passe et n’emmène ainsi qu'incompréhension quand on doit ensuite comprendre le fonctionnement sous jacent. 
> ...


Le garbage collector évite de devoir apprendre la notion d'ownership, quand tu débutes ça fait quand même de la complexité en moins par rapport à C/C++.

----------


## Nilsou

> Salut les canards !
> 
> Je pose mon drapeau ici. En effet, suite à un gros questionnement professionnel j'ai décidé de me lancer dans la programmation. Je ne sais pas encore parfaitement dans quoi je veux me lancer mais depuis une semaine je fouine un peu partout pour apprendre les bases du C++ et je pense aussi jeter un œil côté Python. Le but sur le moyen/long terme est de me lancer dans une formation avec mon compte CPF et de me reconvertir totalement. Depuis que j'ai mis le nez dedans c'est devenu une étrange addiction.
> 
> Voilà, c'était une tranche de vie. Je vais jeter un l'œil à l'OP.


Salut, j'enseigne le C et le C++ ainsi que le Java et le Python : 

Petit historique déjà : Beaucoup de gens ont commencé a l'époque par ce qui était le siteduzero, tout simplement. Aujourd'hui il a changé de nom, le cours de C se passe ici : 
https://openclassrooms.com/fr/course...rogrammer-en-c

D'un point de vue pédagogie je pense ne pas prendre trop de risque en disant que c'est le haut du panier. C'est gratuit mais il faut se créer un compte gratuit au bout de X pages consultées. 

D'un point de vue général, l'ordre qu'on applique aujourd'hui en école d'ingénieur et en faculté est souvent celui-ci : 

C -> C++ -> Java/Python

L'ordre qu'on applique pour les gens qui ne seront PAS amené à faire de la programmation mais qui devront utiliser quelques lignes de code dans leur métier (économie/biologie/etc.) est celui ci : 
Python -> Matlab et cie.

Donc n'écoute pas les bêtises qui circulent un peu partout : commencer par le Python ne peut que t'apporter de la confusion et te donner de mauvaises habitudes si ton objectif c'est de vouloir programmer, pas juste mettre des formules scientifiques bout à bout et appeler une bibliothèque de réseau de neurones sur un jeu de données, c'est absolument pas recommandé d'un point de vue pédagogique. A l'inverse, une personne qui commence en C puis C++ aura de bonnes habitudes et une très bonne connaissance sous jacente des fonctionnements. Le python ne sera ensuite qu'une formalité que tu mettra deux semaines à apprendre. 

Toujours d'un point de vue ordre, je te conseil de commencer par le cours de C standard avant d'attaquer le C++. C'est souvent ce qui est fait un peu partout en enseignement. 

Voila voila.

- - - Mise à jour - - -




> Le garbage collector évite de devoir apprendre la notion d'ownership, quand tu débutes ça fait quand même de la complexité en moins par rapport à C/C++.


La notion d'ownership ... 
De quoi tu parle exactement ?  :tired: 

Tu parle des membres dans les classes ? De la portée d'une variable ? Ce sont des notions extrêmement simpliste qu'on enseigne à des COLLÉGIENS !!!!! (et en plus au départ on parle de maitriser le C de base dans la logique alors bon ... tout ce que tu a a comprendre au départ c'est qu'une variable globale est globale et qu'une variable dans une fonction est détruites à la sortie de la fonction, wouhouuuu la complexité). 

Franchement ....

Tout ton raisonnement vient du fait qu'il faut masquer des concepts pour éduquer petit à petit. C'est genre, tout l'inverse de ce qui est recommandé en enseignement. Et pour de bonnes raisons issu de dizaines (centaines ?) d'années d’expérience du corps enseignants dans les matières scientifiques et techniques. 

On commence par la base et on introduit les choses petit à petit avec le moins de masquage possible, c'est comme ça qu'on apprends le mieux. Ton intuition ici est mauvaise. 

Je te le dis d’expérience, j'ai vu des classes qui avaient appris du Python pendant des mois et qui se débrouillait moins bien que des classes qui n'avait rien appris du tout et sortait tout fraichement du cours. Le masquage de chose introduit des flou et des automatismes basés sur de la mauvaise intuition dans l'esprit, et perdre ces automatismes est ce qu'il y a de plus chiant à faire en enseignement. 

Ce n'est vraiment pas la bonne méthode.

----------


## Orhin

> C -> C++ -> Java/Python


Non.

En tout cas pas dans celle que j'ai faite et c'est pas le cas dans plein d'endroits.

Quant au reste de ton post, il est quand même très péremptoire en plus d'être déconnecté de la réalité vécue par pas mal de gens.

Commencer par du C est en effet intéressant pour apprendre le fonctionnement bas niveau et toutes les contraintes qui y sont liées.
Par contre si tu veux apprendre de l’algorithmie et la mettre en pratique, c'est une très mauvaise approche car les débutants vont passer plus de temps à résoudre des problèmes "techniques" que logiques.




> La notion d'ownership ...
> De quoi tu parle exactement ?


Attend t'es sérieux ?  ::XD:: 

Rien que ça décrédibilise totalement ton discours sur le garbage collector.

----------


## Nilsou

> Non.
> 
> En tout cas pas dans celle que j'ai faite et c'est pas le cas dans plein d'endroits.
> 
> Quant au reste de ton post, il est quand même très péremptoire en plus d'être déconnecté de la réalité vécue par pas mal de gens.
> 
> Commencer par du C est en effet intéressant pour apprendre le fonctionnement bas niveau et toutes les contraintes qui y sont liées.
> Par contre si tu veux apprendre de l’algorithmie et la mettre en pratique, c'est une très mauvaise approche car les débutants vont passer plus de temps à résoudre des problèmes "techniques" que logiques.


J'ai jamais dit qu'après il fallait que tu fasse tout en C. Si tu trouve plus simple de faire un algo en Python fais le en Python, tout les labos d'IA font ça par exemple. 
MAIS : pour s'en rendre compte et faire le bon choix, encore faut il avoir appris le C et le C++ pour choisir son outil adapté et faire la comparaison. Et quitte à apprendre C/C++ + Java + Python il est plus pertinent d'un point de vue pédagogie de faire d'abord du C puis du C++ puis Java et Python. Après tu choisi ce que tu veut pour ton problème posé. 

Je m'autorise a être un peu péremptoire sur le sujet parce que ça fait maintenant 10 ans que j'enseigne dans le domaine et que je me tape semaine après semaine le débat avec d'autres enseignants à la faculté d'abord et en écoles d'ingé info ensuite. Donc je pense avoir fait le tour des arguments et avoir pas mal de retours expériences de chose qu'on a tenté, avec des chiffres et tout sur les succès et compréhension d'un groupe par rapport à un autres, on a fait des expériences  ::P:  On avait même des résultats de questionnaires sur comment les élèves le sentaient selon les groupes etc. Bah voila, tout pointais toujours dans le même sens et à chaque fois on a convergé vers C->C++ -> langage de plus haut niveau (et ça a toujours marché très bien ensuite). Sauf pour les sections lié à l'économie ou la biologie, qui en général n'ont pas besoin de programmer sérieusement dans le futur et veulent juste manipuler des données ou faire des interface vite fait, dans ce cas Python/Java et un peu de C en intro à la fin si on a le temps. 




> Attend t'es sérieux ?


Ownership c'est utilisé pour plusieurs choses, sans contexte je ne sais pas si TarteAuxFleurs me parle de la portée des variables dans de simples fonctions, de la portée dans un contexte objet ou de l'ownership terme qu'on utilise par exemple vis à vis des smartpointer et de tout ce qui a trait à la gestion fine de l'allocation dynamique etc...
Dans un discours entre programmeurs j'aurais voté pour la dernière option, mais là comme on parle d'enseignement à des débutant je ne vois vraiment pas ce que ça vient faire là... donc je me dis qu'il doit parler de la portée en général ?  ::unsure:: 
Si il parle de portée en général ça n'a rien de sorcier, si il parle des pointeurs intelligents et de leurs gestions dans un contexte de gestion de mémoire dynamique, je ne comprends pas bien ce que ça vient faire dans le débat sur l'apprentissage d'un langage par un débutant  ::wacko::

----------


## TarteAuxFleurs

> La notion d'ownership ... 
> De quoi tu parle exactement ? 
> 
> Tu parle des membres dans les classes ? De la portée d'une variable ? Ce sont des notions extrêmement simpliste qu'on enseigne à des COLLÉGIENS !!!!! (et en plus au départ on parle de maitriser le C de base dans la logique alors bon ... tout ce que tu a a comprendre au départ c'est qu'une variable globale est globale et qu'une variable dans une fonction est détruites à la sortie de la fonction, wouhouuuu la complexité). 
> 
> Franchement ....
> 
> Tout ton raisonnement vient du fait qu'il faut masquer des concepts pour éduquer petit à petit. C'est genre, tout l'inverse de ce qui est recommandé en enseignement. Et pour de bonnes raisons issu de dizaines (centaines ?) d'années d’expérience du corps enseignants dans les matières scientifiques et techniques. 
> 
> ...


Tu n'es pas obligé de me sauter à la gorge comme ça tu sais, on est entre personnes bienveillantes après tout  :;):  Et autant de virulence ne favorise pas la bonne ambiance du topic.

Je parlais bien sûr de l'ownership dans le contexte de l'allocation mémoire, sinon j'aurai effectivement utilisé le terme "portée" des variables et la terminologie associée...

Toujours est-il que chez nous on commence par un langage qui permet aux étudiants de se concentre sur l'algorithmie et non des considérations matérielles qui viennent plus tard dans la formation et ça marche plutôt bien. Donc +1 Orhin.

----------


## Tramb

> Le garbage collector évite de devoir apprendre la notion d'ownership, quand tu débutes ça fait quand même de la complexité en moins par rapport à C/C++.


Je suis d'accord, si on mêle ça avec de la programmation fonctionnelle avec un bon niveau de pureté. Sinon faire du Java et du C# sans comprendre ownership et lifetime, je pense que c'est se créer des problèmes futurs.

----------


## Nilsou

> Tu n'es pas obligé de me sauter à la gorge comme ça tu sais, on est entre personnes bienveillantes après tout  Et autant de virulence ne favorise pas la bonne ambiance du topic.


Mes excuses, en me relisant je me rends compte que j'étais un poil à cran ... 



> Je parlais bien sûr de l'ownership dans le contexte de l'allocation mémoire, sinon j'aurai effectivement utilisé le terme "portée" des variables et la terminologie associée...


Ok mais là on parle de personne qui vont apprendre ces langages au départ. Tu n'a absolument pas besoin de toucher à la notion en C, et en C++ elle n'arrive que tardivement dans le cours (en tout cas dans les notre) et fait partie des concepts avancés. Je maintient que dans une discussion ou il s'agit de conseiller un langage a un débutant ça n'a pas sa place. Une personne qui aura déjà fait tout le cours de C et C++ sans abandonner et qui arrive au smartpointer et cie est déjà suffisamment engagée et maitrise suffisamment de chose pour avaler ce concept sans soucis. En aucun cas ça ne constitue donc, de mon point de vue, un critère de choix. 




> Toujours est-il que chez nous on commence par un langage qui permet aux étudiants de se concentre sur l'algorithmie et non des considérations matérielles qui viennent plus tard dans la formation


Bon, bah comme vous voulez  ::P:  

Nous après avoir tester un peu tout les sens, on fait du C, on voit l'algorithmie « de base » en C (Arbre, récurrence, algo de trie), et ça leur fait d'ailleurs les pieds de coder des vrai trucs en C. Puis on fait du C++ et ensuite seulement du python et Java ou là ils iront tâter d'algo plus avancées (gestion de base de données, IA et cie).
On avait commencé dans l'autre sens (Python en premier notamment) et ça faisait perdre énormément de temps car les élèves devaient désapprendre tout ce qu'ils avaient appris pour enclencher avec le C : fastidieux et inefficace.

----------


## TarteAuxFleurs

> Mes excuses, en me relisant je me rends compte que j'étais un poil à cran ... 
> 
> Ok mais là on parle de personne qui vont apprendre ces langages au départ. Tu n'a absolument pas besoin de toucher à la notion en C, et en C++ elle n'arrive que tardivement dans le cours (en tout cas dans les notre) et fait partie des concepts avancés. Je maintient que dans une discussion ou il s'agit de conseiller un langage a un débutant ça n'a pas sa place. Une personne qui aura déjà fait tout le cours de C et C++ sans abandonner et qui arrive au smartpointer et cie est déjà suffisamment engagée et maitrise suffisamment de chose pour avaler ce concept sans soucis. En aucun cas ça ne constitue donc, de mon point de vue, un critère de choix. 
> 
> 
> Bon, bah comme vous voulez  
> 
> Nous après avoir tester un peu tout les sens, on fait du C, on voit l'algorithmie « de base » en C (Arbre, récurrence, algo de trie), et ça leur fait d'ailleurs les pieds de coder des vrai trucs en C. Puis on fait du C++ et ensuite seulement du python et Java ou là ils iront tâter d'algo plus avancées (gestion de base de données, IA et cie).
> On avait commencé dans l'autre sens (Python en premier notamment) et ça faisait perdre énormément de temps car les élèves devaient désapprendre tout ce qu'ils avaient appris pour enclencher avec le C : fastidieux et inefficace.


Pour le coup chez nous c'est de l'Ada et ça marche vraiment pas mal, merci le compilateur defense-compliant  ::P:

----------


## Orhin

> ce qui fait que les gens ne savent pas ce qui se passe derrière et ne comprennent pas le concept "d'optimisation"...


Même si c'est du troll, je me permet de rebondir là dessus.
Y'a optimisation et optimisation.

Savoir choisir les bonnes fonctions, les bonnes structures de données et tuti quanti c'est bien.
Par contre si derrière t’utilises des algo avec une complexité exponentielle alors que t'aurais pu avoir du polynomial (voir du linéaire), ben c'est un peu inutile.

----------


## Tramb

> Pour le coup chez nous c'est de l'Ada et ça marche vraiment pas mal, merci le compilateur defense-compliant


"Ah tu as 647 erreurs, corrige la première et rebuilde".

Ada c'est un super choix, pour plein de raisons. Tout ce que fait le C mais avec des tonnes de verrues en moins. Bien joué !
Vous utilisez quelle version ?

----------


## TarteAuxFleurs

> "Ah tu as 647 erreurs, corrige la première et rebuilde".
> 
> Ada c'est un super choix, pour plein de raisons. Tout ce que fait le C mais avec des tonnes de verrues en moins. Bien joué !
> Vous utilisez quelle version ?


Je crois que c'est la dernière version GNU, mais je suis pas sûr  ::unsure:: 
Je suis bien d'accord avec toi, très bonne expérience en tant qu'étudiant  :;):

----------


## Cwningen

> Tu n'a absolument pas besoin de toucher à la notion en C, et en C++ elle n'arrive que tardivement dans le cours (en tout cas dans les notre) et fait partie des concepts avancés.


En C, tu en as besoin dès que tu fais des allocations dynamiques. Mais si je me souviens bien, quand j'étais à l'école, on a fait un semestre entier de C sans allocation dynamique, donc en effet on peut bien le retarder.

----------


## Nilsou

Disons que quand tu fais des allocations dynamiques en C dans un contexte scolaire tu alloue et tu détruit tout à la main. Ou alors tu reproduit des classes C++, avec une fonction qui alloue les éléments d'une structure en début de programme (ou de procédure) et une autre en fin de programme (ou de procédure). Idem quand tu fait des algo plus complexe, parce que finalement, dans le contexte d'un unique projet étudiant ou algorithme unique tu peut te permettre de tout détruire à la fin manuellement. 

J'ai encore jamais vu de cas dans l'enseignement du C ou tu te retrouve obligé d'implémenter un mécanisme nécessitant des notions plus complexe. Ou alors faut me donner un exemple parce que je vois pas ^^.

Le seul cas que je vois comme ça c'est quand tu va gérer du multithread asynchrone. Mais ça ne fait pas vraiment parti de l'enseignement courant en C.

----------


## MrBeaner

Perso j'ai commencé le Machine Learning avec Octave. J'avais quelques skills en HTML/CSS/Javascript, mais rien de fou.

Ce n'est qu'avec Python que j'ai pris le virus et maintenant ça me donne la motivation de voir de nouveaux trucs  ::):  

Pour justement avoir commencé à jouer avec C ces dernières semaines, je pense que, dans mon cas, je me serais dégouté et aurais abandonné. Peut-être que dans le contexte d'une école j'aurais persévéré, mais c'est dur à dire.

Perso, j'ai vu que OpenClassroom est recommandé ici depuis plusieurs années, mais je trouve les MOOC sur Coursera ou edX (les plus chers) vraiment supérieurs pour mon expérience et mon profil.

Comme dit Nilsou, moi je m'intéresse à ça premièrement pour la gestion et l'évaluation de projets, pas pour développer Shazam for food  ::P:

----------


## FB74

> Même si c'est du troll, je me permet de rebondir là dessus.
> Y'a optimisation et optimisation.
> 
> Savoir choisir les bonnes fonctions, les bonnes structures de données et tuti quanti c'est bien.
> Par contre si derrière t’utilises des algo avec une complexité exponentielle alors que t'aurais pu avoir du polynomial (voir du linéaire), ben c'est un peu inutile.


Souvent ça se résume à "oh, avec les processeurs actuels, pas besoin d'optimiser, c'est rapide".
Sauf que, quand le calcul revient souvent...

- - - Mise à jour - - -




> Conseiller à quelqu'un le Java face au C++ en enseignement sous prétexte qu'il masque des choses avec le Garbage collector c'est juste n'importe quoi. Si l'un de mes collègues soutenait ce genre de truc en réunion d'enseignement il se prendrait deux tartes


Y'a 2 façons de voir le problème, la facilité ou la maitrise du tout.

Quand les gens font des formations courtes, ils n'ont pas le temps d'approfondir.

----------


## Nilsou

> Y'a 2 façons de voir le problème, la facilité ou la maitrise du tout.
> 
> Quand les gens font des formations courtes, ils n'ont pas le temps d'approfondir.


Oui perso moi je m'exprime dans le contexte de gens qui font une formation longue : École d'ingé scientifique, Facultés, etc. Ou de personne désirant apprendre à programmer en général (parce qu'elles veulent coder leurs propres appli sur le temps long, faire du JV, que sais-je...) 

Effectivement si c'est juste pour une formation de 25h pour diversifier ton profil professionnel dans d'autres contexte ou pour apprendre à faire un peu de technique applicatif (Application de librairies d'apprentissage machine et cie) c'est totalement inutile d'apprendre le C  ::P:

----------


## FB74

> Oui perso moi je m'exprime dans le contexte de gens qui font une formation longue : École d'ingé scientifique, Facultés, etc. Ou de personne désirant apprendre à programmer en général (parce qu'elles veulent coder leurs propres appli sur le temps long, faire du JV, que sais-je...) 
> 
> Effectivement si c'est juste pour une formation de 25h pour diversifier ton profil professionnel dans d'autres contexte ou pour apprendre à faire un peu de technique applicatif (Application de librairies d'apprentissage machine et cie) c'est totalement inutile d'apprendre le C


J'ai fait une formation AFPA (qui n'a mené à rien d'ailleurs).

J'ai essayé de faire comprendre aux formateurs que ce serait bien de "montrer" ce qui se cache derrière (à un plus bas niveau), mais....  :Emo: 

Les gens font de la programmation sur un langage "évolué", mais ils n'ont aucune idée de toute la couche qu'il y a en dessous.

----------


## Captain_Cowkill

Ah ouais, merci pour tous vos retours  ::o:

----------


## Teocali

> pour le coup chez nous c'est de l'ada et ça marche vraiment pas mal, merci le compilateur defense-compliant


etgl ?

----------


## rOut

Et pour apprendre en s'amusant, dans un contexte plus sympa qu'une formation ou le boulot, et dans n'importe quel langage je conseille d'ailler voir là aussi : https://forum.canardpc.com/threads/1...le-fin-Fevrier

----------


## Captain_Cowkill

Ah oui  ::lol:: 
J'étais tombé dessus par hasard en fouinant pour des cours.

----------


## Dross

> Pour justement avoir commencé à jouer avec C ces dernières semaines, je pense que, dans mon cas, je me serais dégouté et aurais abandonné. Peut-être que dans le contexte d'une école j'aurais persévéré, mais c'est dur à dire.


J'ai bien spécifié "académiquement" dans mon cas, en fait quand j'ai commencé le C j'étais déjà fonctionnel en HTML/CSS/JS/PHP en autodidacte, et c'est vrai que j'ai pesté au départ, c'est chiant le C. Mais si la personne suis "une formation" alors je m'attends à un aspect "académique" sinon c'est quoi l'intérêt ? Autant être full-autodidacte dès le départ et utiliser les ressources en ligne directement. 

La programmation c'est un des rares endroits en ingénierie où on peux aussi fonctionner au porte-folio. Si t'a des trucs de dingue à montrer mais pas le bon diplôme, tu as quand même moyen de choper le poste.

Après oui il faut un langage banquable, mais sortez pas le Python alors. Python c'est académie/R&D, sauf que R&D sans formation longue derrière (doc, post-doc etc) franchement c'est rêver en couleur. Java/.NET/Javascript-Typescript-Node oui, Python, bof.

----------


## Nilsou

Et encore, en recherche on fait pas du Python pour la beauté du langage, mais parce que 75% des collègues sont des gens qui ne touchent à un ordi que pour lire des e-mails et que la conjoncture veut qu'ils doivent quand même faire un peu d'apprentissage machine pour avoir du budget, du coups faut un langage 100% adaptés aux boulets  ::ninja::

----------


## war-p

> Et encore, en recherche on fait pas du Python pour la beauté du langage, mais parce que 75% des collègues sont des gens qui ne touchent à un ordi que pour lire des e-mails et que la conjoncture veut qu'ils doivent quand même faire un peu d'apprentissage machine pour avoir du budget, du coups faut un langage 100% adaptés aux boulets


Et ça donne des monstres informe  :Gerbe:  (Et je sais sais de quoi je parle, surtout quand on leur dit "hey toi tu sais développer fais nous un portail en java/angular"  ::(:  )

----------


## gros_bidule

Haaa, je me rappellerai toujours de ces conférences (meetups) sur la datascience, pleine de jeunes diplômés qui faisaient honneur aux stéréotypes du chercheur : chemise boutonnée jusqu'en haut du cou, souliers, parfois noeud papillon (si si), cheveux gras (ou gominés, ché pas) coiffés en arrière.

Les confs parlaient entre autres choses de réseaux de neuronnes, via une plateforme de démo en ligne et quelques formules mathématiques, et à chaque fois le présentateur annonce aux jeunes qu'ils vont devoir apprendre à coder en Python ou R. Et à chaque fois la même réaction de ces boutonneux qui demandent si on ne peut pas refiler ce genre de chose à des développeur. Mais dit d'une façon... tu sens que les devs c'est le bas peuple, et que le jeune est un peu paniqué, à minima déçu.
Ca se confirme lors de l'apéro après la prez : tu vas voir un jeune et il te dit direct "hey, t'es doctorant ?". Tu as juste le temps de lui dire que tu es dev, que tu as un BTS, que le type fait aussitôt un 180° et part discuter avec un type comme lui.

Mais je ne dis pas que les jeunes datascientists sont des crétins, absolument pas, juste que dans les confs on voit de sacrés trucs, peut être les pires  ::P:  (j'y allais accompagné d'un collègue chercheur, qui lui est super, mais c'est un adulte).
Je veux bien comprendre pourquoi ils n'aiment pas le dev, et pourquoi ça se passe mieux quand il y a une équipe de dev pour les épauler.

----------


## Nilsou

En datascience c'est souvent un brin comme ça. Déjà tu en a pas mal qui viennent de math pure ou d'école d'éco. Ça aide. 

Perso je fais de l'IA dans des disciplines non-data-science (robotique et cie) et quand on va en conf chez eux c'est d'un ennuiiiiiiiiiiiiiiii  ::zzz::  à cause de ce genre de chose entre autre  ::rolleyes:: 
Puis dans les autres disciplines on vient d'informatique ou d'électronique, de science sociale ou de biologie, donc forcement, c'est que des gens bien  :Indeed:

----------


## MrBeaner

Ha ben moi qui suis plutôt dans le management, je suis plutôt admiratif des développeurs. Malgré le fait que j'acquiers continuellement des skills, j'ai toujours honte de mon niveau et je n'ose pas dire que je "programme"  :Emo: 

J'espère un jour pouvoir me voir comme un programmeur quelque part  ::happy2:: 

J'ai aussi eu quelques échanges avec des programmeurs pédants qui étaient pas très bienveillant pour un noob comme moi. C'est pas très agréable  :^_^:

----------


## gros_bidule

Ha ça les gens désagréables, c'est souvent qu'ils ne savent pas grand chose. Ils maîtrisent juste un truc, s'y accrochent, et prennent de haut ceux et celles qui n'ont pas leur _niveau_.  :Emo:

----------


## ook4mi

> Perso, j'ai vu que OpenClassroom est recommandé ici depuis plusieurs années, mais je trouve les MOOC sur Coursera ou edX (les plus chers) vraiment supérieurs pour mon expérience et mon profil.


Bonjour,

est-ce que tu as pris un abonnement CourseraPlus ou pas ? Je me tâte à en prendre un pour enrichir mon CV mais je ne suis pas sur que l'investissement soit "rentable".

Merci

----------


## war-p

> Haaa, je me rappellerai toujours de ces conférences (meetups) sur la datascience, pleine de jeunes diplômés qui faisaient honneur aux stéréotypes du chercheur : chemise boutonnée jusqu'en haut du cou, souliers, parfois noeud papillon (si si), cheveux gras (ou gominés, ché pas) coiffés en arrière.
> 
> Les confs parlaient entre autres choses de réseaux de neuronnes, via une plateforme de démo en ligne et quelques formules mathématiques, et à chaque fois le présentateur annonce aux jeunes qu'ils vont devoir apprendre à coder en Python ou R. Et à chaque fois la même réaction de ces boutonneux qui demandent si on ne peut pas refiler ce genre de chose à des développeur. Mais dit d'une façon... tu sens que les devs c'est le bas peuple, et que le jeune est un peu paniqué, à minima déçu.
> Ca se confirme lors de l'apéro après la prez : tu vas voir un jeune et il te dit direct "hey, t'es doctorant ?". Tu as juste le temps de lui dire que tu es dev, que tu as un BTS, que le type fait aussitôt un 180° et part discuter avec un type comme lui.
> 
> Mais je ne dis pas que les jeunes datascientists sont des crétins, absolument pas, juste que dans les confs on voit de sacrés trucs, peut être les pires  (j'y allais accompagné d'un collègue chercheur, qui lui est super, mais c'est un adulte).
> Je veux bien comprendre pourquoi ils n'aiment pas le dev, et pourquoi ça se passe mieux quand il y a une équipe de dev pour les épauler.


Datascientists  :Facepalm:  Ils sont peut être en haut de l'échelle du bullshit job... (Avec éventuellement les chefs de projet) Mais c'est bien, en général, ils font des choses, genre select * sur bdd avec des millions d'entrées et des millions de relations sur des milliers de tables (le genre de bdd designé par ces même datascientists) et qui viennent te voir, les larmes aux yeux : "Ça marche pas, plus rien ne marche je comprend pas", ou alors le mec qui fait un programme en python, qui rame du cul dans tous les sens, pétri de bug, ou mieux qui fonctionne, grâce à de vieux effets de bords, et ensuite une fois que cette gentille personne s'est barré, on appelle un pauvre sous traitant pour maintenir la... chose.

----------


## Lazyjoe

Bon... je ne viendrai plus me plaindre de mes codes fortran écrits par des physiciens.  ::ninja::

----------


## Helix

Sérieux les gars, vous êtes en train de faire exactement ce que vous reprochez aux _data scientists_, c'est moche.

----------


## gros_bidule

C'est pas faux, désolé  :Emo: 
On se moque des mauvais, mais comme dans tout métier la majorité bosse très bien. On ne remarque hélas que les boulets ou les vedettes.
La faute à la pandémie.

----------


## Dross

> Sérieux les gars, vous êtes en train de faire exactement ce que vous reprochez aux _data scientists_, c'est moche.


Oui mais au contraire d'eux nous _on a raison_.  ::ninja::

----------


## GrandFather

Vous savez combien il faut de Data Scientists pour changer une ampoule ?












On sait pas, la requête a planté.  ::trollface::

----------


## Helix

> Oui mais au contraire d'eux nous _on a raison_.


 :^_^:

----------


## MrBeaner

> Bonjour,
> 
> est-ce que tu as pris un abonnement CourseraPlus ou pas ? Je me tâte à en prendre un pour enrichir mon CV mais je ne suis pas sur que l'investissement soit "rentable".
> 
> Merci


Excuse-moi pour avoir traîné dans ma réponse, je t'ai répondu sur smartphone, mais le fofo a avalé mon post  :^_^:  Pour toutes les formations que je suis en ligne, je choisis les options payantes (étant suisse, le coût est très raisonnable). Je ne crois pas avoir croisé d'abonnement CourseraPlus par contre, c'est peut-être nouveau. *EDIT :* ah, c'est un abo annuel pour accéder à toutes les formations  ::o:  Je connaissais pas, mais je ne sais pas si mes cours faisaient partie du catalogue, ou même si j'arriverais à dépenser 400$ cette année.

Mon avis pour les MOOC Coursera : pour avoir suivi des formations en management dans des universités (autant en cursus de base que des formations continues), j'ai gagné BEAUCOUP plus de compétences par heure investie en suivant les MOOC (en l'occurrence en data science et en programmation statistique). Pour suivre actuellement le cours d'introduction à la programmation CS50 sur edX, Coursera n'est pas un cas isolé. Par contre, tout n'est pas du même niveau : les retours sont un indicateur utile, malgré le biais naturel de ce genre d'évaluations. Aussi, cela demande pas mal d'autonomie et le format n'est pas forcément adapté au goût de tous (par exemple, je suis très mauvais à me former avec des bouquins).

Pour le côté "bankable", je ne pense pas que les certificats soient très reconnus actuellement. C'est normal que la culture des ressources humaines accuse un temps de retard, sans compter que les MOOCs sont nombreux. Donc je te recommande de suivre ces formations pour l'acquisition de compétences avant tout. Peut-être que cela changera à l'avenir, je ne sais pas. Après, je ne connais pas le monde de la programmation, plusieurs ont dit plus haut que les portfolios de projets sont valorisés : une idée serait de suivre une formation qui accompagnerait la réalisation d'un projet (c'est ce que je vais faire avec Django par exemple).

J'ai un profil entrepreneur, ce qui fait que je n'ai pas de souci d'investir dans l'acquisition de compétences plutôt que dans des signaux de valeurs pour les recruteurs (bien que les deux soient bien sûr souvent corrélés). Pour la sécurité de l'emploi, la meilleure stratégie reste de trouver ce que tes employeurs potentiels valorisent et chercher à acquérir cela (même si ça veut dire parfois payer plus pour un certificat que pour un diplôme).

J'espère avoir pu aider dans ton questionnement  ::happy2::

----------


## ook4mi

> J'espère avoir pu aider dans ton questionnement


Non pas du tout  ::ninja::  !

Blague à part, clairement CS50 me fait aussi de l'oeil mais cela prend pas mal de temps et je ne saurais pas forcément le rentabiliser professionnellement dans l'immédiat. 

Alors qu'un mooc SAP (bon j'en trouve pas) + JavaScript from Zéro to Hero + Google Cloud Plateform serait parfaitement PARFAIT :D . Google donne des formations sur Coursera mais faut payer l'abonnement.

Bon j'ai trouvé comme solution de tenter me faire financer par mon employeur. =D Tu le sens que je vais me prendre un gros vent ? =D

----------


## MrBeaner

Si t'essayes pas, tu sauras pas  :;): 

Protip : teste une ou deux semaines en gratuit pour voir si ça te correspond avant de prendre l'abo  ::):  et tu n'es pas obligé de prendre l'abo annuel CourseraPlus, tu peux juste prendre le certificat du cours en particulier.

----------


## Charmide

> Je m'autorise a être un peu péremptoire sur le sujet parce que ça fait maintenant 10 ans que j'enseigne dans le domaine et que je me tape semaine après semaine le débat avec d'autres enseignants à la faculté d'abord et en écoles d'ingé info ensuite. Donc je pense avoir fait le tour des arguments et avoir pas mal de retours expériences de chose qu'on a tenté, avec des chiffres et tout sur les succès et compréhension d'un groupe par rapport à un autres, on a fait des expériences


C'est pas pour être méchant, mais je pense que si c'était un sujet qui se résolvait en 10 ans, en informatique comme ailleurs, ça se saurait. C'est un truc bourré de variabilité non seulement dans ce qu'on veut former mais aussi individuellement. J'ai appris quedalle en école, et particulièrement dans les cours qui avaient l'approche que tu décris. Si j'en étais resté à faire des segfault et debugger des pointeurs comme première approche de l'informatique, et si j'avais pas eu le dev web et des expériences en startups pour faire des trucs utiles et avec le feedback immédiat de ta ton navigateur et ton code à gauche, je serais parti élever des chèvres ou je ne sais quoi d'autre. J'ai aussi 0 doute sur le fait que ça marche pour certains et pour certaines filières. 

On est fans d'être péremptoires ou d'avoir "la" solution dans le domaine, c'est bien un truc qui me désole, en général c'est surtout le signe qu'on fait la même chose depuis trop longtemps ou qu'on est incapables de voir plus loin que le bout de son nez. C'est quand même formidable d'avoir autant de "conservateurs accidentels" dans un truc aussi jeune. 

En passant et dans le même genre, pour les noobs du topic, je me souviens d'avoir lu ça y'a 10 ans: un bouquin qui te fait tester sur leurs points forts des languages volontairement très différents (et pas du tout bankable en passant). C'est 'hachement instructif, et une bonne intro au fait qu'au final, ce qui est plus important est souvent langage/stack agnostic.

----------


## Nilsou

Tu es hors débat, on parlait de quelqu'un qui voulait apprendre le C/C++ à terme (et on discutait ainsi de l'ordre optimal incluant C/C++). Pas de quelqu'un qui se tâtait sur le langage à apprendre et n'aime pas le C/C++ d'entrée de jeu. Si t'aime pas les segfault, les pointeurs et que tu kif le dev web, c'est tant mieux pour toi, mais toutes les approches existantes sur le C/C++ t'auraient alors rebutées, que ce soit un cours cours, siteduzero ou autre.

Quant à la méthode pour enseigner le C/C++ en particulier, sur le long terme les profs ne sont pas bébête, on a des stats de réussite en fonction des méthodes, des profs etc. par exemple.  Actuellement la méthode trèèèèès classique qui consiste à introduire le fonctionnement sous jacent de l'ordi dans un premier temps, puis à faire du C et faire le lien avec ce fonctionnement sous-jacent, puis à abstraire avec le C++, puis à partir sur les autres language c'est un bon 3/4 de la classe avec d'excellentes notes à la fin et qui vont faire des stages en entreprises en programmation, ce qui est l'objectif. Donc quand tu dis « c'est adapté à certains », le truc c'est que parmi les gens qui viennent apprendre le C/C++ le « certains » est une bonne grosse majorité, et pas juste quelques cas isolés.

La pédagogie, quand tu l'applique aux masses, c'est une science, pas juste un truc relatif « ça dépends de chacun », sinon on naviguerait à vue.

edit : Bon sinon, sur le fond, oui, j'admets que ça ne fait jamais de mal d'avoir un truc visuel en parallèle plutôt qu'un pauvre terminal, histoire de donner envie d'apprendre. Dans le cadre du C/C++ ça se débat (intro GTK/QT/SDL assez tôt ? ) . Faire du web en premier ou plutôt en parallèle (puisqu'on peut faire ça sans soucis en école) pourquoi pas après tout, on le fait déjà presque en parallèle. Mais dans le débat précédent on parlait plutôt de truc comme Java, Javascript, qui viennent parasiter l'évolution pédagogique, selon moi, quand on les fait en premier. Par contre rien n'interdit de faire de l'intro à l'HTML5 en parallèle je pense, à tester.

----------


## ducon

> La pédagogie, quand tu l'applique aux masses, c'est une science,


Ben pour le moment, vu la gueule de la science et de ses défenseurs, elle en est au stade de l’alchimie et de l’astrologie.

----------


## Nilsou

Bon c'est pas faux  ::ninja:: 

Disons qu'on essaie de l'aborder comme une science, par essais-erreurs. C'était pour répondre à la phrase « _je pense que si c'était un sujet qui se résolvait en 10 ans, en informatique comme ailleurs, ça se saurait_ » : en pratique si, au fur et à mesure des années, par essai-erreur on fini par connaitre les trucs qui ne marchent pas, les trucs qui marchent, et les trucs qui marchent moins bien.

----------


## Charmide

Quand je dis que ça dépend de chacun et que la variabilité individuelle est énorme, je le sors pas du cul, c'est des résultat de l'état de l'art du domaine pour ce qu'il vaut. Dire ça c'est pas incompatible avec un caractère scientifique, et c'est pas incompatible avec choisir un cursus non plus. C'est possible d'enseigner de plusieurs façons et de construire quelque chose qui donne à manger à différents profils qui apprennent différemment. T'es pas obligé d'en choisir une qui correspond à 51% des gus et d'abandonner les autres. 

Mais bon je le répète, "j'ai aussi 0 doute sur le fait que ça marche pour certains et pour certaines filières", très content que ta méthode fonctionne de façon que tu juges suffisante pour 75% de ta classe. Grand bien t'en fasse, c'est bien tout ce qu'on peut demander à un prof, mais je pense pas que t'aies résolu le problème au point d'en être autant péremptoire, cf. message de ducon. 

Moi j'ai 10 ans d'expérence "de l'autre côté" sur après ce que tu dis être ton critère de réussite: ils partent faire un stage. Bah je peux te dire que c'est pas la joie sur "les masses"  ::trollface:: 
Et sinon oui, je confirme que le meilleur pour quelqu'un qui veut faire du C/C++ c'est d'apprendre le C/C++, avis d'expert  ::trollface::

----------


## Nilsou

> Quand je dis que ça dépend de chacun et que la variabilité individuelle est énorme, je le sors pas du cul, c'est des résultat de l'état de l'art du domaine pour ce qu'il vaut. Dire ça c'est pas incompatible avec un caractère scientifique, et c'est pas incompatible avec choisir un cursus non plus. C'est possible d'enseigner de plusieurs façons et de construire quelque chose qui donne à manger à différents profils qui apprennent différemment. T'es pas obligé d'en choisir une qui correspond à 51% des gus et d'abandonner les autres.


Bah c'est à dire que quand tu construit ta formation tu ne peut pas le construire comme un simple MOOC en ligne ou c'est chacun sélectionne ce qu'il veut comme approche. Donc oui, on prends ce qui corresponds à la plupart (comme tout les systèmes de formation à vrai dire ...) . Et bon tu exagère, si on avait que 50% de retour positif sur ce type de formation on se poserait des questions  ::rolleyes::  . Le fait est que cette méthode d'enseignement marche bien. Même en école d'ingé plutôt généraliste ou l'informatique n'est pas au cœur de la formation.

Pour info j'ai enseigné dans deux structures dont l'une enseigne l'informatique en France depuis les débuts de l'enseignement informatique en France  ::P:  Donc ils ont un peu de bouteilles sur le sujet quand même. Et cette approche « bottom-up » est celle qui donne de meilleurs résultats (quand tu a des élèves qui sont obligés de suivre les cours hein, je ferais pas la même chose pour un tuto).

----------


## Charmide

51%, 75%, 62%, 95%, 71.3% ou même une pluralité, peu importe. Je dis juste que je vois pas pourquoi tu présentes ça comme "il faut choisir la méthode qui a le meilleur taux de réussite moyen" quand c'est pas vraiment ça le choix. Même si je sais très bien que quand on est profs on fait ce qu'on peut avec ce qu'on a et ce qu'il est possible de faire. "Tu ne peux pas" parce que c'est pas comme ça que fonctionnent les structures que tu connais, mais j'm'attends pas à ce qu'on révolutionne le système éducatif. Mais bref, ça n'était qu'une façon d'aller dans le sens du "c'est dur de se la péter dans ce domaine", y'en a plein d'autres. 

Case in point, quand tu me dis "dont l'une enseigne l'informatique en France depuis les débuts de l'enseignement informatique en France", faut prendre beaucoup d'élan pour passer de ça à "ah du coup ils doivent savoir comment faire apprendre l'informatique". Si tu regardes comment on se fait botter le cul par les US dans le secteur malgré la théorique performance de notre système éducatif, c'est quand même un peu triste. Y'a certainement d'autres causes qu'un pool de talents disponibles/formés, mais c'est dur de ne pas en y voir une. De façon assez drôle on est plutôt bons pour produire de grosses SS2I comparés au reste de la planète, où à la limite la meilleure compétence des devs c'est la capacité à produire du code médiocre pour générer de la maintenance applicative et des contrats en plus, c'est aussi une forme de succès  ::ninja:: 

Tous les bons que je connais se sont formés sur le tas, d'une façon ou d'une autre, à coup de projets perso ou comparable. Quand je fais du recrutement, même de juniors, j'ai pas encore trouvé mieux que d'ignorer à 95% la formation pour me concentrer sur d'autres trucs. Je suis sûr que c'est aussi biaisé par mon expérience propre et les profils que je cherche en général, y'a franchement moyen que ce soit de l'eau tiède et le cas dans toutes les filières même celles qui ont bien plus qu'une cinquantaine d'années, mais quand même.

----------


## gros_bidule

> Tous les bons que je connais se sont formés sur le tas, d'une façon ou d'une autre, à coup de projets perso ou comparable. Quand je fais du recrutement, même de juniors, j'ai pas encore trouvé mieux que d'ignorer à 95% la formation pour me concentrer sur d'autres trucs. Je suis sûr que c'est aussi biaisé par mon expérience propre et les profils que je cherche en général, y'a franchement moyen que ce soit de l'eau tiède et le cas dans toutes les filières même celles qui ont bien plus qu'une cinquantaine d'années, mais quand même.


(ignorez mon post si c'est trop HS, j'ai essayé de lire toute la discuss mais j'oublie des trucs  :^_^: , pardon d'avance)

Je pense avoir le même ressenti que toi sur les "bons" devs, ou plutôt les débrouillards qui vont te trouver les solutions au moins correctes et être force de proposition, ce sont ceux et celles qui ne se contentent pas de leur diplôme (souvent d'ingé). Projets persos, intérêt pour l'actu informatique (podcasts de dev par ex), etc. Mais du coup je ne suis absolument pas choqué par l'enseignement de l'informatique en France. Mes profs (y'a plus de 12 ans) d'info m'ont toujours dit, et je m'en souviendrai toujours, qu'à l'école on ne t'apprend pas à programmer, on t'apprend à apprendre. Tu sors de l'école tu ne sais rien faire, mais tu es sensé avoir les armes pour entrer dans le code d'un projet, apprendre et te faire lentement ton background technique. Et en ça, l'enseignement français me semble pas mal. En tous cas, quand je compare des jeunes collègues français à ceux d'autres nationalités, hum... la France n'est pas n°1, mais nous sommes très loin d'être bon derniers ^^. Y'a aussi les différences de mentalités qui peuvent choquer, et faire passer un pb d'adaptation comme un manque de compétences.

Après, la situation de l'enseignement se dégrade peut être (ex : on pond bcp plus d'ingés qu'avant, sans que le niveau des élèves n'ait augmenté, cherchez l'erreur...), ché pas, mais j'ai l'impression qu'on pond encore pas mal de jeunes curieux (et je ne dirais pas "talents". Une école de cirque pond peut être des talents, mais pas une école d'informatique).

----------


## Charmide

C'est dur sinon impossible à quantifier, je grossissais le trait pour la discussion toujours dans l'angle "c'est dur de se la péter sur ce sujet quand même" mais je suis d'accord avec toi. 
En général j'ai beaucoup d'affection pour les formations qui poussent à beaucoup de projets et d'autonomie pour justement forcer ce "apprendre à apprendre", et on en a quelques-unes en France. Après c'est aussi ce qu'aimait bien dire mon école d'ingé, mais à la fin j'ai eu 2 ans de cours magistraux où j'ai moins appris qu'en 3 mois d'entreprise.

(tu m'as fait regarder le larousse mais j'ai même pas l'impression que talent soit inadapté, j'ai eu peur de m'être fait bouffer le cerveau par du vocable RH ou un anglicisme  ::ninja:: )

----------


## Dross

On peut critiquer beaucoup de choses en France mais certainement pas son élitisme éducatif. Le truc c'est que nos élites ne finissent justement pas dans nos SSII Française, mais partent à l'étranger et on les retrouves dans les meilleurs services de Google, Microsoft, Amazon, et cie. Toutes les brutes que j'ai connu en prépa et en école d'ing n'ont pas fait leur carrière en France mais à l'étranger. Donc merci de ne pas critiquer la formation sur la médiocrité de nos entreprises locales. 

Je vis à l'étranger et les gens ici sont toujours impressionnés par la qualité de nos ingénieurs, bien sûr, c'est une facette particulière, tout nos ingés ne sont pas de cette trempe, mais si c'est quelque-chose qui est unanimement accepté quand on sort de chez nous ça n'est pas pour rien.

----------


## Nilsou

> 51%, 75%, 62%, 95%, 71.3% ou même une pluralité, peu importe. Je dis juste que je vois pas pourquoi tu présentes ça comme "il faut choisir la méthode qui a le meilleur taux de réussite moyen" quand c'est pas vraiment ça le choix. Même si je sais très bien que quand on est profs on fait ce qu'on peut avec ce qu'on a et ce qu'il est possible de faire. "Tu ne peux pas" parce que c'est pas comme ça que fonctionnent les structures que tu connais, mais j'm'attends pas à ce qu'on révolutionne le système éducatif. Mais bref, ça n'était qu'une façon d'aller dans le sens du "c'est dur de se la péter dans ce domaine", y'en a plein d'autres.


Nan mais moi je faisais que donner un conseil. Si on me dit : je suis très intéressé par l'informatique, je veux apprendre quelques langages comme du C, du Java, du Python, etc. et qu'on me demande dans quel ordre aborder tout ça, bah c'est naturel que je recommande le « standard » qu'on utilise dans l'enseignement en France pour les informaticiens et les écoles d'ingé, puisque ce standard donne de bons résultats  ::P:  

D'ailleurs il a aussi donné de bons résultats en dehors des cours, combien de canards ont commencé la programmation via les tuto de C du « siteduzero » (openclassroom aujourd'hui) ? Un bon paquet à mon avis  ::P:  




> Case in point, quand tu me dis "dont l'une enseigne l'informatique en France depuis les débuts de l'enseignement informatique en France", faut prendre beaucoup d'élan pour passer de ça à "ah du coup ils doivent savoir comment faire apprendre l'informatique". Si tu regardes comment on se fait botter le cul par les US dans le secteur malgré la théorique performance de notre système éducatif, c'est quand même un peu triste.


On ne se fait botter le cul par rien du tout  ::P:  Quand on compare le système éducatif US faut prendre de grosses pincettes parce que 95% de leur système éducatif est BIEN plus pourris que la plus pourrie des fac en France, sans rire. J'ai un très grand nombre de potes qui sont passés de la Fac aux Fac US dont certaines, assez coté, et à niveau équivalent, ça a été très souvent la grande déception.
Les 5% de Fac de très haut niveau ne sont fonctionnelles que parce qu'elles s'adressent à un pays de la taille d'un continent (ce qui leur permet de trier à la fois sur la thune et sur le niveau d'entrée) C'est absolument impossible à mettre en place dans de plus petits pays (sauf si tu veux une promo de quelques personnes à chaque fois, on a déjà ça, on appelle ça X et puis voilà  ::P:  ) . Et ne forment finalement que très très peu de monde par rapport à la population. 
Une fois pris tout ceci en compte, franchement faut relativiser. 

Deuxième facteur à prendre en compte : les US comptent énormément sur l'immigration pour compenser les faiblesses de leur système éducatif. Mon directeur de recherche à fait 1 an dans deux des plus grandes facultés US et a été très étonné de remarquer que le niveau des masters chez eux est exécrable, alors que leurs labos sont bons. Comment ils font : ben très simple, les gens recrutés en labo sont ... principalement des étrangers formés ailleurs : des Chinois, des Indiens (beaucoup en informatique) et même des Français. 
C'est principalement la conséquence perverse du fait qu'une fois rentré dans la Fac et vu son prix, la Fac est un peu obligée de garder l’élève et de ne pas le jarter (il y a un aspect politique aussi, quand les plus grands messieurs des USA mettent leurs gamins là-bas, tu as un peu moins tendance à préconiser le redoublement ... ) . 

Donc dire : « tel secteur des US est + performant que », qu'on parle de recherche ou d'industrie, est là encore à prendre avec des pincettes. Est-ce vraiment des personnes formées aux US qui font tourner la machine ? 

Enfin, les US ont effectivement une avance sur l'industrie informatique d'un point de vue acquis des entreprises, à cause du simple fait historique que l'informatique a débuté massivement là-bas. 




> Y'a certainement d'autres causes qu'un pool de talents disponibles/formés, mais c'est dur de ne pas en y voir une. De façon assez drôle on est plutôt bons pour produire de grosses SS2I comparés au reste de la planète, où à la limite la meilleure compétence des devs c'est la capacité à produire du code médiocre pour générer de la maintenance applicative et des contrats en plus, c'est aussi une forme de succès


Tu ne peux t'en prendre qu'à nos politiques, pas à notre système éducatif. Tout le système français (et une bonne part du système occidental) est construit de sorte à faire genre qu'il y ait un type de « rêve américain » sous-jacent : _« tu montes ta boite, tu deviens riche, ta boite prospère jusqu’à atteindre les cimes, etc. »_. Dans la vraie vie ceux qui y vont ainsi sont très rapides à déchanter : tu montes ta boite, ta boite a une bonne idée qui sur le papier, devrait écraser la concurrence existante, sauf que tu heurtes à un cartel de quelques multinationales qui détiennent à peu près toutes les activités en occidents : Un choix implicite s'offre à toi -> soit tu rentres dans une bataille contre des monstres qui ont tous les moyens de t'épuiser et de te piquer à la fin ton idée insuffisamment protégée ou de s'en inspirer pour proposer un produit qui t’écrasera. Soit tu vends ta boite et tu recommences. La plupart choisissent la seconde solution, et voilà le cycle de la startup qui est née. 
Quant au SS2I elles ne survivent que parce qu'elles permettent de recourir à de la sous-traitance sous-payée pour de grosses boites qui elles, gardent leurs mains « propre » avec un bon personnel, de bon niveau, bien formé. Sinon elles seraient rachetées tout autant s’il y avait le moindre intérêt à le faire. Une SS2I qui tenterait de prospérer au-delà de la proposition de ce type de service finirait comme toute startup un peu trop ambitieuse. 

Petit exemple illustratif : dans le labo juste au-dessus du mien, les chercheurs avaient trouvé un système de polymère spécifique (labo de chimie-biologie) capable de se décoller automatiquement au bout de X jours tout en libérant des substances actives. Une grande avancée pour les grands brulés et autres personnes nécessitant des pansements sur le long terme, avec cicatrisation difficile et application de traitement en local.  
Au lieu de vendre leur brevet aux grands noms de l'industrie pharmaceutique comme d'habitude, ils ont monté une startup rattachée au labo.
Elle a très bien démarré : ils ont eu moult financements de régions et européens, ils ont monté leur propre usine de production et ont commencé à empiler les cartons de produits, beaucoup d’hôpitaux se sont immédiatement portés acheteurs. 

La fondation scientifique était tellement propre et solide que ce fut l'autorisation de mise sur le marché la plus rapide jamais délivré en Europe, rien que ça  ::P:  
Et on attendait plus que la signature d'un comité d'expert en France pour l'autorisation de vente définitive, une broutille normalement.

Et là paf, la signature ne vient jamais, les mecs s’interrogent, pourquoi, comment est-ce possible ? Ils n'obtiennent que des réponses floues. Mais à force de creuser on leur fait passer des infos en douce : les grandes industries pharmaceutiques font blocus pour que la réunion n'ait jamais lieu et que la signature n'arrive jamais. 

Mois après mois ils tentent tout, et au final ça durera plusieurs années, le budget de la boite s'épuise dans l'attente et fini en liquidation judiciaire. Le jour même de la liquidation, elle est rachetée par un consortium formé de deux grands labos et démantelée. Le lendemain, la signature autorisant la vente du pansement est donnée.  ::rolleyes::  

(plus tard les chercheurs du labo apprendront de sources peu fiable, mais ça vaut le coup de le rapporter, que le brevet ne sera jamais exploité, car selon des analyses internes des acquéreurs il aurait fait perdre plus sur les autres traitements qu'il n'aurait fait gagner, étant finalement trop efficace pour son propre bien ) 

J'ai à peu près la même anecdote à l'époque sur les boites qui ont tenté de faire passer les voitures à compression d'air (celles utilisées dans les aéroports) comme véhicules publics, qui se sont retrouvée face à un blocus au passage des mines, c'était un prof que j'avais eu qui étaient aux mines à ce moment-là et qui me racontaient le pourquoi du comment. Bah c'est dans la même veine  :;):  . J'ai la même sur GDF et une startup de roboticien/IA. 

J’espère que ces anecdotes t'éclairent un peu plus sur le pourquoi du comment tout ceci fonctionne et pourquoi il ne survit plus dans cet environnement, que des petites startup fraichement créées ou des sociétés de services qui ne font que faire les petites mains. C'est une forme de sélection génétique  ::P:  
(sélection qui marche aussi pour les créateurs de boites : des patrons pleins de bonnes intentions qui voit se phénomène leur arriver deux ou trois fois finissent par jeter l'éponge, seuls ceux à qui ça ne pose aucun problème restent et continuent le cycle création - vente). 




> Tous les bons que je connais se sont formés sur le tas, d'une façon ou d'une autre, à coup de projets perso ou comparable. Quand je fais du recrutement, même de juniors, j'ai pas encore trouvé mieux que d'ignorer à 95% la formation pour me concentrer sur d'autres trucs. Je suis sûr que c'est aussi biaisé par mon expérience propre et les profils que je cherche en général, y'a franchement moyen que ce soit de l'eau tiède et le cas dans toutes les filières même celles qui ont bien plus qu'une cinquantaine d'années, mais quand même.


Après c'est un peu tautologique, ceux qui sont bons en sortant de l'enseignement ou pendant l'enseignement vont aussi faire des projets persos et cie, donc forcément c'est un bon critère au final. 
Ça revient à dire que les bons sont bons quoi  ::P:

----------


## Charmide

Ca part dans tous les sens mais je vais pas me lancer dans une guerre de pavé et de quotes, c'est pas très intéressant comme format, en général c'est le signe qu'une discussion va nul part. "J’espère que ces anecdotes t'éclairent un peu plus sur le pourquoi du comment tout ceci fonctionne" ça m'a bien fait rire, je suis désolé mais j'ai pas attendu tes anecdotes pour avoir un avis. Dur à croire mais d'autres personnes peuvent avoir un avis divergent du tiens ET de l'expérience aussi, j'en ai bossé dans un paquet de startups et même lancé quelques-unes. Les problèmes que tu décris sont réels et existants, mais aussi fortement déconnecté de la réalité des soucis qu'on peut avoir en vrai. L'informatique est un secteur à startup justement parce qu'il est possible de se lancer et grossir malgré le corporatisme et les résistances des goliaths existants, qui, effectivement, est une plaie en France en général. 

Sur ton "Enfin, les US ont effectivement une avance sur l'industrie informatique d'un point de vue acquis des entreprises, à cause du simple fait historique que l'informatique a débuté massivement là-bas.", qui est la seule phrase qui répond à ce que tu quote dans ce passage (le symptôme de la guerre de quote qui part dans tous les sens). Je sais pas trop à quoi tu fais référence, ça a "débuté" en même temps en France et aux US. Si tu prends l'exemple d'internet, y'avait le réseau cyclades en France au début dans les années 70, à la fin on a eu le minitel puis 0 GAFA. Si le problème c'était qu'on est en retard de quelques années parce qu'on a commencé quelques années plus tard, y'aurait moins de questions à se poser sur les causes. C'est drôle que t'enchaines ça en disant que le problème en France c'est que les gens sont formattés avec un "rêve américain".

- - - Mise à jour - - -




> On peut critiquer beaucoup de choses en France mais certainement pas son élitisme éducatif. Le truc c'est que nos élites ne finissent justement pas dans nos SSII Française, mais partent à l'étranger et on les retrouves dans les meilleurs services de Google, Microsoft, Amazon, et cie. Toutes les brutes que j'ai connu en prépa et en école d'ing n'ont pas fait leur carrière en France mais à l'étranger. Donc merci de ne pas critiquer la formation sur la médiocrité de nos entreprises locales. 
> 
> Je vis à l'étranger et les gens ici sont toujours impressionnés par la qualité de nos ingénieurs, bien sûr, c'est une facette particulière, tout nos ingés ne sont pas de cette trempe, mais si c'est quelque-chose qui est unanimement accepté quand on sort de chez nous ça n'est pas pour rien.


Qu'on se fasse piquer nos meilleurs et qu'on en produise plus qu'ailleurs c'est cool. J'en doute pas. Ce dont je doute que ce soit une réussite si on investit pour générer des gens qui se barrent du pays. 
C'est pas une critique que j'adresse aux écoles et aux formation pour rien. La Silicon Valley, au pif, est né très largement dans ses campus. Nos entreprises locales sont absolument liées à ce qu'on fait dans nos facs et écoles, on pourrait très bien être ceux qui piquent les talents des autres, y'a de l'oeuf et de la poule là-dedans.

----------


## Nilsou

> Qu'on se fasse piquer nos meilleurs et qu'on en produise plus qu'ailleurs c'est cool. J'en doute pas. Ce dont je doute que ce soit une réussite si on investit pour générer des gens qui se barrent du pays. 
> C'est pas une critique que j'adresse aux écoles et aux formation pour rien. La Silicon Valley, au pif, est né très largement dans ses campus. Nos entreprises locales sont absolument liées à ce qu'on fait dans nos facs et écoles, on pourrait très bien être ceux qui piquent les talents des autres, y'a de l'oeuf et de la poule là-dedans.


Sauf que tu simplifie à outrance. La Silicon Valley n'est pas née que de ses facs, de talents et de cerveaux, mais de MILLIARDS investit par les USA (et notamment les militaires) pour que des entreprises liés à ces technologies émergent la bas. 
Tu lies tout au système éducatif comme si c'était le système éducatif qui conditionnait la naissance de tel ou tel type d'entreprise, mais c'est faux. La sillicon valley est née de budget publique ahurissant et d'une volonté politique interventionniste massive. Ce n'est pas du tout la différence de talent qui conditionne cette différence de résultat.

C'est ce que je te décrivais par l'exemple dans mon post : le cadre actuel en France (et en UE en général, et d'ailleurs c'est de plus en plus la même chose aux USA) c'est de maintenir le statu quo des très grandes entreprises dominantes touche à tout (qui n'ont absolument aucune envie de voir émerger un « GAFA » indépendant) . Ça n'a aucun rapport avec le système éducatif, c'est une histoire de gros sous, d'influence, de politique. Le cadre à l'époque aux USA c'est qu'il leur fallait, pour des raisons de politiques extérieures, principalement, des entreprises nouvelles dans ce secteur pour devenir dominant. Ils ont financés à mort le truc (par des sous directement, des dons de matos, de brevet etc.).

Tu évacue le cadre politique dans ton analyse comme si le système se comportait dynamiquement tout seul. C'est une grosse erreur d’analyse et c'est historiquement faux.




> Ca part dans tous les sens mais je vais pas me lancer dans une guerre de pavé et de quotes, c'est pas très intéressant comme format, en général c'est le signe qu'une discussion va nul part. "J’espère que ces anecdotes t'éclairent un peu plus sur le pourquoi du comment tout ceci fonctionne" ça m'a bien fait rire, je suis désolé mais j'ai pas attendu tes anecdotes pour avoir un avis. Dur à croire mais d'autres personnes peuvent avoir un avis divergent du tiens ET de l'expérience aussi, j'en ai bossé dans un paquet de startups et même lancé quelques-unes. Les problèmes que tu décris sont réels et existants, mais aussi fortement déconnecté de la réalité des soucis qu'on peut avoir en vrai. L'informatique est un secteur à startup justement parce qu'il est possible de se lancer et grossir malgré le corporatisme et les résistances des goliaths existants, qui, effectivement, est une plaie en France en général.


Le seul fait qu'aucune de ces boites n'atteint les « goliath existants » est une démonstration très parlante du plafond de verre. Tu ne te lance pas « malgré » les goliath existants, mais avec leur bénédiction, sachant qu'ils rachèteront les succès ensuite (d'ailleurs beaucoup de startup sont directement financés en France par des fonds venu de ces Goliath) . 
Le simple fait que tu en ai « lancé quelques unes » montre également bien que tu t'inscrit complétement dans ce système et il n'est donc pas étonnant que ça ne te choque pas/plus. Tu cherche dans l'éducation le problème qui fait qu'on ai aucune GAFA alors que l'explication est plutôt sous ton nez. C'est pas l'éducation française qui est responsable du fait qu'aucune de tes startup ne soit devenu une GAFA aujourd'hui désolé  ::siffle:: 

Quant aux exemples que je t'ai donné, ils sont important, même si ils ont l'air de t’énerver : ils illustrent bien l'intrication des Goliath avec l'état en général et ce qui arrive à des startups qui tentent de monter trop haut en tenant de damer le pion à ces-dits Goliath. Une réalité sans doute irritante et angoissante, surtout pour quelqu'un qui monte des startups à la chaine, mais ça ne change rien ...

----------


## deathdigger

> Tu es hors débat, on parlait de quelqu'un qui voulait apprendre le C/C++ à terme (et on discutait ainsi de l'ordre optimal incluant C/C++). Pas de quelqu'un qui se tâtait sur le langage à apprendre et n'aime pas le C/C++ d'entrée de jeu.


Non. C'est un adulte qui s'intéresse au développement très probablement dans le cadre d'une reconversion.
Je ne connais pas le C++ (rien que voir la syntaxe  :Gerbe: ), le C, j'en fais vite fait quand je me bouge le fion et fais des trucs pour Arduino, ça ne m'empêche pas d'être un dev apprécié pour son travail (en fait, surtout la partie non-dev/débrouille citée plis haut).

C'est peut-être le fait que tu ais fait de hautes études là-dedans et pas moi qui font que nous avons une vision opposée. Mais je maintiens mes propos, dans le cadre d'une reconversion le haut niveau, c'est mieux, et c'est plus bankable. Concernant les formations, un pote à moi a suivi une formation d'openclassroom, et il a choppé un diplôme/certificat reconnu par l'État.

----------


## Nilsou

Perso je trouve les trucs d'open class room très bien fait, et ils collent en plus avec l'approche classique dans l'enseignement, donc j'aurais tendance à dire qu'on est d'accord  ::unsure::  
Sauf si je n'ai pas compris ton propos ...  ::unsure::

----------


## deathdigger

Sur le sujet principal : Ce n'est pas une demande de lycéen/étudiant pour savoir quel langage est intéressant à apprendre, c'est celle d'un adulte qui n'est pas développeur.

----------


## Charmide

> Sauf que tu simplifie à outrance. La Silicon Valley n'est pas née que de ses facs, de talents et de cerveaux, mais de MILLIARDS investit par les USA (et notamment les militaires) pour que des entreprises liés à ces technologies émergent la bas. 
> Tu lies tout au système éducatif comme si c'était le système éducatif qui conditionnait la naissance de tel ou tel type d'entreprise, mais c'est faux. La sillicon valley est née de budget publique ahurissant et d'une volonté politique interventionniste massive. Ce n'est pas du tout la différence de talent qui conditionne cette différence de résultat.
> 
> C'est ce que je te décrivais par l'exemple dans mon post : le cadre actuel en France (et en UE en général, et d'ailleurs c'est de plus en plus la même chose aux USA) c'est de maintenir le statu quo des très grandes entreprises dominantes touche à tout (qui n'ont absolument aucune envie de voir émerger un « GAFA » indépendant) . Ça n'a aucun rapport avec le système éducatif, c'est une histoire de gros sous, d'influence, de politique. Le cadre à l'époque aux USA c'est qu'il leur fallait, pour des raisons de politiques extérieures, principalement, des entreprises nouvelles dans ce secteur pour devenir dominant. Ils ont financés à mort le truc (par des sous directement, des dons de matos, de brevet etc.).
> 
> Tu évacue le cadre politique dans ton analyse comme si le système se comportait dynamiquement tout seul. C'est une grosse erreur d’analyse et c'est historiquement faux.


On parle de formation donc c'est de ça que je parle. J'ai jamais dit que c'était le seul facteur. Mais ça a clairement un rapport.

----------


## Charmide

> Le seul fait qu'aucune de ces boites n'atteint les « goliath existants » est une démonstration très parlante du plafond de verre. Tu ne te lance pas « malgré » les goliath existants, mais avec leur bénédiction, sachant qu'ils rachèteront les succès ensuite (d'ailleurs beaucoup de startup sont directement financés en France par des fonds venu de ces Goliath) . 
> Le simple fait que tu en ai « lancé quelques unes » montre également bien que tu t'inscrit complétement dans ce système et il n'est donc pas étonnant que ça ne te choque pas/plus. Tu cherche dans l'éducation le problème qui fait qu'on ai aucune GAFA alors que l'explication est plutôt sous ton nez. C'est pas l'éducation française qui est responsable du fait qu'aucune de tes startup ne soit devenu une GAFA aujourd'hui désolé 
> 
> Quant aux exemples que je t'ai donné, ils sont important, même si ils ont l'air de t’énerver : ils illustrent bien l'intrication des Goliath avec l'état en général et ce qui arrive à des startups qui tentent de monter trop haut en tenant de damer le pion à ces-dits Goliath. Une réalité sans doute irritante et angoissante, surtout pour quelqu'un qui monte des startups à la chaine, mais ça ne change rien ...


Ces ad-hominems gratuits... Mes affaires vont très bien, merci de t'inquiéter. 

Les acquisitions de startups par des gros existants en recherche de renouvellement n'ont jamais été un facteur négatif pour un écosystème, c'est même tout l'inverse, c'est très confortable d'avoir cette option et y'en a plein aux US aussi. Le problème c'est qu'il n'y a que ça en France, et il n'y a que ça parce que très peu de boîtes arrivent à passer au palier d'après. Et sur les raisons du pourquoi, la disponibilité de talents a clairement un rôle. Comme beaucoup d'autre choses, encore une fois, mais c'était pas de ça qu'on parlait. 
Tes exemples illustrent l'échec récurrent des partenariats public-privés en France, mais c'est pas à cause de GDF qu'on va pas avoir de startups de roboticien/IA, c'est pas à cause d'Accor qu'on a pas eu Airbnb, et même France Telecom qui a eu bon dos pour quelques exemples du "génie français" en matière informatique ne peut pas expliquer tout.

- - - Mise à jour - - -




> Non. C'est un adulte qui s'intéresse au développement très probablement dans le cadre d'une reconversion.
> Je ne connais pas le C++ (rien que voir la syntaxe ), le C, j'en fais vite fait quand je me bouge le fion et fais des trucs pour Arduino, ça ne m'empêche pas d'être un dev apprécié pour son travail (en fait, surtout la partie non-dev/débrouille citée plis haut).
> 
> C'est peut-être le fait que tu ais fait de hautes études là-dedans et pas moi qui font que nous avons une vision opposée. Mais je maintiens mes propos, dans le cadre d'une reconversion le haut niveau, c'est mieux, et c'est plus bankable. Concernant les formations, un pote à moi a suivi une formation d'openclassroom, et il a choppé un diplôme/certificat reconnu par l'État.


Si ça peut te rassurer, perso je me suis tapé tout le trip des grandes écoles et de l'élite de la nation, et j'en ressors quand même avec le même avis que toi. Suivre un ordre académique c'est vraiment un coup à se dégouter du truc, même sans parler de bankabilité, et je trouve tout purisme basé sur le "ça apprend des bonnes pratiques" vraiment illusoire: y'a moyen de faire de la merde et de jamais les apprendre peu importe d'où tu pars.

----------


## Mr Slurp

Débat avec Nilsou in a nutshell  :tired:

----------


## Nilsou

> Le problème c'est qu'il n'y a que ça en France, et il n'y a que ça parce que très peu de boîtes arrivent à passer au palier d'après. Et sur les raisons du pourquoi, la disponibilité de talents a clairement un rôle. Comme beaucoup d'autre choses, encore une fois, mais c'était pas de ça qu'on parlait.


Ben si, c'est de ça qu'on parle. Tu argumente depuis le départ que tout se ramène à l'éducation, et dés que j’essaie d'introduire un brin de complexité dans tout ça, que l’émergence de nouvelles boites n'est pas qu'un phénomène issus des « talents » disponibles mais aussi une histoire de gros sous, d'orientation politiques etc... tu balaie ça d'un revers de main pour revenir sur le fait que c'est principalement un problème d'éducation. 

Sauf que non, c'est pas un problème de formation des « talents », je t'ai fait une liste bien détaillés d'exemples, fournies, avec moult témoignage et autres : le secteur US ne fonctionne pas de cette manière à cause d'un surplus de talent, mais bien au contraire en dépit d'un manque de talent dans le domaine, ils recrutent pour compenser à l'étranger via l’immigration, et ça c'est ... de la politique (politique migratoire forte pour faire venir les cerveaux sur le territoire), les GAFA US sont nés des énormes quantités de thune investies par l'état, notamment dans un cadre militaire, et des transferts de tech gratuit. Et ça, encore une fois, c'est ... de la politique. La façon dont les Goliath bien implantés en UE arrivent à mettre des bâtons dans les roues de toutes startup émergentes allant trop haut (nombreux exemples à l'appui), ça aussi c'est ... de la politique. 

Ta façon de réduire ce problème systémique à un problème éducatif sur cette comparaison US-France est donc dénuée de fondement, à mon sens. Surtout qu'a chaque fois que des chiffres tombent sur le sujet, on forme mieux et en plus grosse quantité par rapport à notre population. Certains canards ont déjà appuyé en ce sens plus haut dans la discussion d'ailleurs (voir réponse de Dross). C'est donc en dépit d'un meilleur système de formation qu'on a des soucis, et il faut donc chercher les causes ailleurs : cause qui ont déjà donné lieu à moult analyse hein, la naissance des GAFAM il y en a des tonneau sur le sujet. Bah ce n'est pas le conte idyllique d'un mec qui créé une boite milliardaire dans son garage, c'est aussi et surtout beaucoup BEAUCOUP de thune de l'état et beaucoup de protection de ces entreprises naissantes par l'état, de façon volontaire (pour des raisons géopolitiques et militaires, une fois encore).

C'est quand même fort d'aller chercher le « truc qui marche », dans le système de formation US, connu pour être l'un des plus pourris au monde vis à vis de leur population  ::O: 




> Sur le sujet principal : Ce n'est pas une demande de lycéen/étudiant pour savoir quel langage est intéressant à apprendre, c'est celle d'un adulte qui n'est pas développeur.


Certes, mais cet adulte sait déjà qu'il veut du C/C++, du Java, du Python (cf ses posts initiaux) et pose des questions sur l'ordre. J'enseigne a des adultes (enseignement supérieur, c'est pas des lycéens) avec un programme composé de C/C++/Java/Python, la comparaison me paraissais pertinente.

----------


## Charmide

Je sais même pas avec qui tu débats, j'ai jamais argumenté que "tout se ramène à l'éducation". J'ai dis que c'était drôle de se la péter tout plein d'assurance en disant qu'on avait LA meilleure façon d'enseigner l'informatique parce qu'on a enseigné "dans deux structures dont l'une enseigne l'informatique en France depuis les débuts de l'enseignement informatique en France" alors même qu'on est pas à la pointe du domaine, point. 

Mais content d'avoir eu cette discussion tangente avec toi, je te remercie d'avoir su introduire si finement ton analyse stratégico-militaro-géopolitique. Quand même con qu'on ait pas d'investissement public en France par rapport aux US, on aurait pu avoir les GAFAM aussi, c'était pas loin.

- - - Mise à jour - - -




> Débat avec Nilsou in a nutshell


Fallait me prévenir avant  :tired: 
Bon je suis sûr que j'aurai oublié pour la prochaine fois mais c'est pas grave.

----------


## Dross

> alors même qu'on est pas à la pointe du domaine, point.


Sauf que c'est justement ça le problème : l'état de notre industrie ne veux rien dire par rapport à l'état de nos formations. Tu peux tout à fait avoir la meilleure formation du monde et avoir l'industrie la plus naze, ça n'est pas incompatible, et c'est justement pas loin de ce qu'on a en France d'ailleurs. 

La question est plutôt "est-ce que les entreprises de pointe au niveau mondiale aiment le produit de nos formations ?" et la réponse est oui, trois fois oui. L'ingénieur Français c'est un peu comme la Parisienne (mode, cosmétique, etc), c'est un produit qui s'exporte très bien. 

Après on pourrai parler du fait que c'est un problème, des raisons sous-jacentes, etc, mais ce n'est pas vraiment le sujet. 




Par contre, est-ce qu'on a besoin de cet académisme pour être un bon dev ? Non, pas forcément. Mais tant qu'à faire des formations académiques (i.e. pas en autodidacte avec les ressources du net) je trouve ça aussi étonnant de ne pas avoir cette structure là. Se former pour être fonctionnel sur un langage bankable tu peux le faire toi même, la formation ne sert alors à rien et te fait perdre ton temps (une formation c'est toujours plus lent que de l'autodidacte pour ce genre de trucs).

----------


## deathdigger

Ça dépend d'où tu pars, et de ce que tu sais déjà. J'ai fait une formation C# d'une semaine sur le MVVM. Je ne connaissais rien au C# (j'avais fait du PHP et du Vb.net en mode spaghetti), et encore plus rien au langage objet : je suis tombé sur un super formateur qui a réussi à me faire découvrir les principes de base de l'objet et également le MVVM. Sans cette aide, j'aurais très probablement continué à faire du code dégueu pendant longtemps (bon je ne fais jamais de MVVM par contre  ::ninja:: ).

Du coup, ça a surtout été une formation pour me dire de "regarder dans la bonne direction" et c'était cool (le gars faisait des articles sur developpez.com, vraiment un super pédagogue).

----------


## Charmide

> Sauf que c'est justement ça le problème : l'état de notre industrie ne veux rien dire par rapport à l'état de nos formations. Tu peux tout à fait avoir la meilleure formation du monde et avoir l'industrie la plus naze, ça n'est pas incompatible, et c'est justement pas loin de ce qu'on a en France d'ailleurs. 
> 
> La question est plutôt "est-ce que les entreprises de pointe au niveau mondiale aiment le produit de nos formations ?" et la réponse est oui, trois fois oui. L'ingénieur Français c'est un peu comme la Parisienne (mode, cosmétique, etc), c'est un produit qui s'exporte très bien. 
> 
> Après on pourrai parler du fait que c'est un problème, des raisons sous-jacentes, etc, mais ce n'est pas vraiment le sujet.


Bah c'est déjà ce que je t'ai répondu plus haut, je ne suis pas d'accord. "La meilleure formation du monde", selon mes critères, c'est celle qui a des effets et qui crée un écosystème local de boîtes/une vraie dynamique, pas celle qui produit un top du panier qui va aller s'exporter ailleurs où on fait des trucs cool, même si on y pense qu'ils sont des génies mentaux. 

Si tu combines ça à "y'a pas besoin de cet académisme pour être un bon dev", t'as compris ce que je pense. C'est bien de se palucher sur l'excellence "théorique" de nos formations, ça serait mieux d'avoir de bons devs et une bonne industrie.

----------


## Charmide

Je trouve ça intéressant de penser que "la formation" et "l'industrie" n'ont rien à voir, et sont deux problèmes déconnectés. Ca sonne bien comme un problème français. 
Les écoles formattent et imputent une culture - l'industrie n'est que la somme des personnes qui y sont passés. Si tu formattes de bons petits soldats, tu risques pas d'avoir une culture entrepreneurial. Réciproquement, si tes perspectives c'est Total ou Cap Gemini, tu risques pas d'avoir une formation qui facilite la prise de risque ou d'initiative, et des mecs qui la quittent en plein milieu pour lancer leur boîte. 

Les effets ont plus de dimensions qu'une espèce d'échelle académique qui irait de mauvais à bon, et où les ingés français seraient bien notés et passeraient plus facilement les entretiens d'embauche de Google.

----------


## Nilsou

> Bah c'est déjà ce que je t'ai répondu plus haut, je ne suis pas d'accord. "La meilleure formation du monde", selon mes critères, c'est celle qui a des effets et qui crée un écosystème local de boîtes/une vraie dynamique, pas celle qui produit un top du panier qui va aller s'exporter ailleurs où on fait des trucs cool, même si on y pense qu'ils sont des génies mentaux. 
> .


Ils vont pas s'exporter ailleurs pour le plaisir ou parce que nos formations les poussent à ça hein. Si ils pouvaient monter des GAFA en France ils le feraient. C'est le problème de l'écosystème autour, qui n'est absolument pas lié à la formation. Je le répète une fois encore : Le mythe des GAFA indépendant qui sont nés de bonnes idées dans un garage n'est qu'un mythe, il y a des articles, des bouquins, des documentaires sur le sujet, il y a pléthore de documentation : Ça a été un volontarisme énorme de la part de l'état US (raisons géopolitiques et militaires), des Milliards de dépensé, des dons de brevet énormes qui auraient été impossible autrement. Sans ce contexte les cerveaux de l'époque aurait fait leur petite bidouille d'étudiant (comme les nôtres le font régulièrement) et aurait baissé les bras devant l'impossibilité de leur projet, avant de trouver à s'employer chez les grand déjà en place. 

C'est le contexte politique qui change la donne, c'est pas uniquement la volonté ou le talents des individus (surtout quand on compare des pays de l'OCDE ou volonté et talents sont toujours disponible un peu partout finalement).





> Je trouve ça intéressant de penser que "la formation" et "l'industrie" n'ont rien à voir, et sont deux problèmes déconnectés. Ca sonne bien comme un problème français. 
> Les écoles formattent et imputent une culture - l'industrie n'est que la somme des personnes qui y sont passés.


Non, un environnement est la somme de ce qui y rentre ET de son passé, c'est un système bouclé (ancienne entreprise en place, prise des décisions politiques sur cet environnement, Argent investit, facilité de faire des contrats avec des institutions (militaire dans le cadre US) etc., labo de recherche publique partenaire déjà en place, facilité de profiter de subvention et de la bienveillance des autorités etc.). Un système qui est d'ailleurs assez conservateurs puisque les plus puissants du système sont ceux qui y ont survécu et s'y sont adapté. C'est donc très résistant au changement. 

En somme tu peut mettre tout les génies les plus débrouillards du monde au cœur de l'Afghanistan, il n'en sortira rien du tout.

Si la structure de l'environnement en place t’interdit de monter ta boite au delà de certaines limite, bah des gens intelligent et bien formé s'en rendent justement compte. Donc soit ils s'adaptent en trouvant un poste dans les gros goliath de l'industrie déjà en place, soit ils fuient, plutôt que d'affronter des conditions qui sont impossible à renverser par un effort individuel. Ce qui est du pur bon sens.
Tu crois qu'ils ont fait quoi les élèves de mon école quand à éclaté le scandale relatif à la startup montée par des gens du labo de bio (cf plus haut) ou le scandale relatif à GDF et mes anciens collègues qui ont monté leur startup en robotique ? Ben de façon très juste ils en concluent à un environnement corrompu jusqu'au trognon dans lequel les plus fort en place font leur loi : donc ils font une croix sur le fait de faire la même chose. 

Et on te dit pas que formation et industrie n'ont rien à voir, si je prends 20000 diplômé et 20000 analphabète, nul doute que le premier groupe s'en sortira mieux dans tout environnement. Mais à formation équivalente, ce qui est le cas, on le répète, en France par rapport à pas mal d'autres pays de l'OCDE, bah le problème est à chercher ailleurs, tout simplement.

----------


## Captain_Cowkill

C'est toujours aussi animé ici ?  :^_^:

----------


## Charmide

> ...


Oui oui mon Nilsou, y'a toujours d'autres raisons comme à la dernière page, mais c'est toujours du système éducatif dont on parle. Si je pensais qu'il fallait qu'une bonne idée et un gus dans un garage ou au milieu de l'Afghanistan, pourquoi est-ce que je me ferais chier à parler du rôle des formations et d'un écosystème?

- - - Mise à jour - - -




> C'est toujours aussi animé ici ?


Fais pas genre, t'es peut-être nouveau ici mais tu connais CPC  ::ninja::

----------


## Teocali

Perso, même si je ne suis pas d'accord avec tout ce qu'a dit Nilsou sur la pédagogie d'apprentissage de l'informatique (Perso, je suis pour un apprentissage C pour chopper les principes de base de la gestion de mémoire, puis Java pour l'objet, avec du HTML/CSS/JS en parallèle, parce que ne nous leurrons pas, l'UI maintenant, c'est les technos Web, même si ça m'emmerde), je suis absolument d'accord avec lui : ce qui freine l'emergence de licorne en France (je préfère ce terme a "GAFAM"), c'est un contexte global, dont l'instruction *informatique*  n'est que secondaire voir même tertiaire. Avant cela, on retrouve les contexte économique et culturel.

Un bel exemple qui me revient en tête : le projet de Cloud souverain, Andromède. Les mecs cherche a faire émerger un concurrent français a AWS et GCP, but louable en soit. Ils décident de mettre des millions sur la table. Et a qui ils refilent ces millions ? Orange et Thales (Cloudwatt), SFR et Bull (Numergy)... des boites qui n'avaient *aucune* experience dans l'hébergement. Mais alors aucune...

Alors qu'en face tu avais OVH, boite française et premier hébergeur européen, qui partait a l'assault du cloud, mais tout seul.

Résultat des courses, Cloudwatt et Numergy ont fermé, OVH est en perte de vitesse parce qu'elle a du faire rentrer un fond au capital, avec pour résultat un gros dégraissage dans les compétences pour réduire la masse salariale et elle a annoncé y'a un an qu'elle établissait une alliance avec Google pour assurer sa croissance dans le cloud...

GG les décideurs.

Et des anecdotes comme ça tu peux en avoir plein. Je bosse sur une startup qui a un produit peu tech, mais avec un concept assez prometteur (un peu la même situation qu'Uber et AirBnb quand on y pense)... Et ben, je vous raconte pas la galère pour avoir un peu d'aide des instances gouvernementales...

----------


## Charmide

Bon, je le redis hein, j'ai jamais dit que c'était LE facteur primaire, c'est juste de ça dont on parlait dans le thread. 
Comme d'hab ces problèmes sont complexes et n'ont pas une seule source, et même si je me suis bien cassé le cul à recruter des profils adaptés en startup, à cause notamment de l'académisme puriste des formations, j'avance pas que c'est la première ou la seule.

Je les connais les exemples du style que tu cites aussi. D'ailleurs c'est pour ça que je me moquais de Nilsou qui nous sort que y'a des GAFA au US à cause de l'investissement massif de l'état, alors qu'on est les rois des projets foireux où les subventions publiques, qui sont 928% du PIB en France où l'état-providence est roi, sont dilapidées pour 0 résultat concret. Si il suffisait de mettre du pognon parce qu'on est stratégiquement intéressés, on serait #1

Meta-troll aussi, ces décideurs qui prennent ce genre de décision sortent sûrement de l'ENA, une autre "grande école" de premiers de la classe qui forme l'élite de la nation dont énormément sont fiers  ::trollface::

----------


## Tramb

Bof, perso, j'ai pas vu trop d'"académisme puriste" chez les jeunes.

Soit des mecs qui savent pas programmer et qui sont nuls en théorie.
Soit on a des mecs forts en CS et qui savent plutôt bien programmer.
Soit des autodidactes qui se démerdent en codage mais à qui il manque plein de fondements théoriques (pas dramatique pour plein de tâches).
Mais alors le profil du mec qui me parle de lambda calcul typé ou de logique de premier ordre sans savoir programmer un minimum je l'ai jamais vu  ::):

----------


## Charmide

:^_^: 

Ca correspond pas à ce que j'essaie de décrire. Ce qui me rend triste c'est beaucoup de profils qui se débrouillent très bien dans des exercices cadrés ou d'exécution, mais sont pas débrouillards/hackers pour un sou. Ou manquent du pragmatisme pour développer une solution qui suffit au besoin versus la solution parfaite en 18 fois plus d'effort (faut savoir sortir la tête du guidon technico-technique pour ça).

Je trouve ça très présent même dans tes #2 qu'on a en France, typé cliché du geek/savant fou déconnecté du réel qui est une brute du code mais que tu détestes avoir dans ton équipe quand même et qui est moins utile qu'il ne le croit, ça me pousse très souvent à bosser avec ton #3.

Et c'est tout relatif et sans jugement de valeur, je coderais des OS ou les systèmes embarqués d'Ariane, je suis sûr que je chercherais d'autres profils.

----------


## Tramb

Ouais il faut des deux souvent dans une équipe de dev  ::):

----------


## Charmide

Toutafé!

----------


## Tramb

> geek/savant fou déconnecté du réel qui est une brute du code mais que tu détestes avoir dans ton équipe quand même


Les meilleurs des meilleurs sont assez peu de ce type-là, quand même.
Le melon est souvent plus chez les moyen+, car ils n'ont pas conscience de leurs limites.

----------


## Charmide

Mmh.. De base, j'ai tendance à et envie de croire qu'un humain pas trop bête en général a mécaniquement de l'humilité (certainement) et sait prendre de la perspective (sûrement). Après, je suis régulièrement étonné. 
Mais j'ai pas assez de points sur ma distribution pour faire une vraie différence entre moyen+ et au-delà, y'en a pas tant que ça. Surtout, pour boucler la boucle, quand ils se barrent du pays ou arrêtent de faire (que) du dev voire du technique vu les perspectives et la considération qu'on a pour ça en France.

----------


## Lazyjoe

> Je trouve ça très présent même dans tes #2 qu'on a en France, typé cliché du geek/savant fou déconnecté du réel qui est une brute du code mais que tu détestes avoir dans ton équipe quand même et qui est moins utile qu'il ne le croit, ça me pousse très souvent à bosser avec ton #3.


Le pragmatisme et le bon sens d'utiliser une bonne solution simple plutôt qu'une usine à gaz, pour moi c'est plus une compétence qui se développe avec l'expérience que quelque chose que tu vas apprendre dans ta formation initiale.

----------


## Nilsou

> Bon, je le redis hein, j'ai jamais dit que c'était LE facteur primaire, c'est juste de ça dont on parlait dans le thread. 
> Comme d'hab ces problèmes sont complexes et n'ont pas une seule source, et même si je me suis bien cassé le cul à recruter des profils adaptés en startup, à cause notamment de l'académisme puriste des formations, j'avance pas que c'est la première ou la seule.
> 
> Je les connais les exemples du style que tu cites aussi. D'ailleurs c'est pour ça que je me moquais de Nilsou qui nous sort que y'a des GAFA au US à cause de l'investissement massif de l'état, alors qu'on est les rois des projets foireux où les subventions publiques, qui sont 928% du PIB en France où l'état-providence est roi, sont dilapidées pour 0 résultat concret. Si il suffisait de mettre du pognon parce qu'on est stratégiquement intéressés, on serait #1


Sauf qu'on met beaucoup moins d'argent, et quand on en met on en met dans les boites qui sont déjà les plus influentes, tes goliath. Exemple de Theocali plus haut : Orange, Thales, SFR, Bull etc
Et du coups oui, c'est la façon de donner cet argent qui compte, ravi que tu sois d'accord au final. Et on en revient à ce que je disais au tout départ : c'est un problème qui touche à la politique (car c'est ça la politique, savoir combien on donne d'argent et à qui). 

Là ou tu te trompe un brin, c'est que l'état providence est tout autant roi aux USA, voir plus, sans l'état providence et ses milliards d'argent public il n'y aurait ni Google, ni Facebook, ni IBM et encore moins de SpaceX. Derrière ce sont des gros sous (et des dons de brevet, ce qui est loin d'être négligeable). Et en proportion les USA balancent bien plus de sous publiques que nous dans ces subventions  :^_^:  (leur budget militaire c'est pas pour faire joli, et une part non négligeable part dans des projets en lien avec toutes ces boites) 

Donc si tu considère que les USA sont un modèle, l'état providence n'est alors pas le problème de fond, même si ça fait jolie de taper dessus, le problème de fond devient alors quel état providence tu veut. Celui qui utilise l'argent des impôts pour favoriser les bonnes idées, protéger les petites boites des gros mastodontes en les dotant de l'arsenal juridique, des fonds, de la masse de brevet de l'état ainsi que de la puissance de la recherche publique. Ou celui qui se contente de donner tout aux gros cadors déjà en place (qui ont pas mal d'influence en politique, ça aide), de favoriser la législation pour qu'ils bouffent les petits, de leur donner brevet et recherche publique sans compter (ce qui rends tout les plus petits dépendant d'eux en définitive). 

Les US, et d'autres, ont joué la première carte pendant une certaines période, pour diverses raisons, d’où l’émergence rapide de pas mal de boites indé. La France l'a aussi joué a une certaine époque. Mais globalement aujourd'hui on est sur le deuxième modèle. Et vu l'intrication entre la politique et ces gros cadors (notamment via la possession des médias par ces derniers, ça aide à pousser dans un sens), c'est pas prêt de changer. 




> Meta-troll aussi, ces décideurs qui prennent ce genre de décision sortent sûrement de l'ENA, une autre "grande école" de premiers de la classe qui forme l'élite de la nation dont énormément sont fiers


C'est vrai, mais c'est aussi un peu toi qui vote. 
Il suffit de prendre le CV des candidats à la présidentiel et de regarder leurs actions passée (ou leur diplôme si tu y tiens) pour voir ou leur gouvernement va mettre du budget une fois en poste, c'est pas sorcier... Tu peut aussi voir qui fait la promotion de tel ou tel candidat. Si tu vote pour des mecs qui sont acclamés par les gros Goliath du secteur, faut pas être surpris que le système se maintienne à leur avantage ensuite  ::rolleyes::  
C'est de la politique encore une fois. Tu ne peut pas y échapper dans ce problème.

----------


## Charmide

> Sauf qu'on met beaucoup moins d'argent, et quand on en met on en met dans les boites qui sont déjà les plus influentes, [...] globalement aujourd'hui on est sur le deuxième modèle. Et vu l'intrication entre la politique et ces gros cadors (notamment via la possession des médias par ces derniers, ça aide à pousser dans un sens), c'est pas prêt de changer.


C'est clair que y'a pas du tout d'intrication entre les "gros mastodontes" et la politique aux US, aka le pays où y'a des lobbies dans tous les coin et où c'est littéralement le métier d'un paquet de gens d'être payés par des entreprises pour influencer les gens qui écrivent les lois  :tired:  
Les gros en place ont, par la force des choses, l'arme de l'influence et du juridique (payer des avocats quand t'as 3.4€ de budget c'est dur). Les deux côtés de l'Atlantique ont des lois anti-trust aussi. 

Tes comparaison de montant n'ont pas beaucoup de sens dans le vide, à l'échelle de tes comparaison c'est choux et carottes et trop vague pour vouloir dire quelque chose. 
Je pense que tu sous-estimes ce que la France a mis dans des projets de "rattrapage" numérique à son échelle, de façon bien plus directe qu'aux US, la multiplication de structures et d'associations qui vivent de subventions des régions/de l'Etat pour aider les startups, sans parler de programmes comme le CIR ou les JEI. Je pense que tu surestimes aussi l'importance qu'a eu le pognon de l'état pour des boîtes comme FB ou Google qui n'ont pas eu besoin de ça pour atteindre la taille critique nécessaire pour gagner leur marché.
Je sais toujours pas à quoi tu fais référence quand tu parles de "subvention" dans ces cas là, faudrait que tu sois un peu plus précis. Si y'a bien un truc qu'a su faire les US en termes de politique publique, c'est du plus soft que ça (libéraliser des marchés nouveaux, section 230, le droit du travail californien super flexible qui permettaient aux startups de piquer des talents, etc.)  




> C'est vrai, mais c'est aussi un peu toi qui vote. 
> Il suffit de prendre le CV des candidats à la présidentiel et de regarder leurs actions passée (ou leur diplôme si tu y tiens) pour voir ou leur gouvernement va mettre du budget une fois en poste, c'est pas sorcier... Tu peut aussi voir qui fait la promotion de tel ou tel candidat. Si tu vote pour des mecs qui sont acclamés par les gros Goliath du secteur, faut pas être surpris que le système se maintienne à leur avantage ensuite  
> C'est de la politique encore une fois. Tu ne peut pas y échapper dans ce problème.


Quand je dis ENA, je parlais pas d'élu, c'est l'administration/les corps intermédiaires qui décident de comment est affecté ce pognon et sont responsables de ces coups de génie. 
N'importe quel élu qu'on a eu depuis les années 60 va te dire "ouais les nouvelles technos c'est important" et te mettre du pognon dedans.

----------


## Dross

> Les meilleurs des meilleurs sont assez peu de ce type-là, quand même.
> Le melon est souvent plus chez les moyen+, car ils n'ont pas conscience de leurs limites.


Appelé aussi Effet Dunning-Kruger.


Après personnellement - mais on s'écarte bien du sujet - je pense que le problème Français est un problème structurel avant tout. Dans un pays où il faut tout justifier sur tout et remplir 36 formulaires avant d'encaisser le moindre €, faut pas s'étonner que ça soit moins agile à chopper des parts de marchés. Quand les embauches s'éternisent car après t'est marié avec le type ça n'aide pas non plus (pendant ce temps la concurrence avance et elle rigole). Quand tu te plante sur ta croissance et qu'il faut élaguer, là aussi l'Etat te regarde avec des gros yeux et t'enfonce la tête un peu plus sous l'eau (là aussi la concurrence, elle rigole). Etc. 

Des gens qui sortent de nos écoles et qui montent des trucs prospère il y en a, il en a même plein, sauf qu'à part être le descendant d'une famille déjà dans le domaine (qui pourra alors te donner les contacts politiques, financiers, et juridiques nécessaire pour garder la tête hors de l'eau en France), tu va plutôt le faire à l'étranger.

----------


## Charmide

> Le pragmatisme et le bon sens d'utiliser une bonne solution simple plutôt qu'une usine à gaz, pour moi c'est plus une compétence qui se développe avec l'expérience que quelque chose que tu vas apprendre dans ta formation initiale.


Peut-être, mais je peux pas m'empêcher de penser qu'un peu moins de cours avec des pointeurs de pointeurs et où on te demande de réimplémenter from scratch sans utiliser la lib standard des listes chainés, et un peu plus de cas qui ressemblent à la vraie vie en école, ça aiderait quand même un peu.

- - - Mise à jour - - -




> Après personnellement - mais on s'écarte bien du sujet - je pense que le problème Français est un problème structurel avant tout. Dans un pays où il faut tout justifier sur tout et remplir 36 formulaires avant d'encaisser le moindre €, faut pas s'étonner que ça soit moins agile à chopper des parts de marchés. Quand les embauches s'éternisent car après t'est marié avec le type ça n'aide pas non plus (pendant ce temps la concurrence avance et elle rigole). Quand tu te plante sur ta croissance et qu'il faut élaguer, là aussi l'Etat te regarde avec des gros yeux et t'enfonce la tête un peu plus sous l'eau (là aussi la concurrence, elle rigole). Etc. 
> 
> Des gens qui sortent de nos écoles et qui montent des trucs prospère il y en a, il en a même plein, sauf qu'à part être le descendant d'une famille déjà dans le domaine (qui pourra alors te donner les contacts politiques, financiers, et juridiques nécessaire pour garder la tête hors de l'eau en France), tu va plutôt le faire à l'étranger.


Super vrai. C'est très dur de tenir ce discours là sans tomber dans ou se faire traiter de néolibéral, mais c'est clairement un cas où on a souffert du modèle très inflexible et protecteur de la loi du travail/des entreprises en général. 
Maintenant, je pense que c'est un des facteurs que pour le coup ceux qui peuvent y faire quelque chose en France ont commencé à bien comprendre et à résoudre.

Il reste un espèce de truc culturel derrière où tout a de l'inertie et où on est naturellement "conservateur" sur ce terrain-là, y'a du lag partout, les gens en place ont la vie plus facile que ceux qui veulent du renouveau. Ca me rappelle le 19ème siècle où on est passés de "super pouvoir économique" à "c'est quoi ce bordel notre économie est toujours autant basée sur l'agriculture que celle de la Grande-Bretagne au 18ème" en quelques décennies de pas être capables d'aller aussi vite que les autres sur un nouveau terrain.
C'est quand même franchement déprimant de réfléchir à ces questions et de voir l'état de la France et de l'Europe vs. les US et la Chine.

----------


## Nilsou

> C'est clair que y'a pas du tout d'intrication entre les "gros mastodontes" et la politique aux US, aka le pays où y'a des lobbies dans tous les coin et où c'est littéralement le métier d'un paquet de gens d'être payés par des entreprises pour influencer les gens qui écrivent les lois  
> Les gros en place ont, par la force des choses, l'arme de l'influence et du juridique (payer des avocats quand t'as 3.4€ de budget c'est dur). Les deux côtés de l'Atlantique ont des lois anti-trust aussi.


C'est pour que ça que j'ai insisté tout du long sur le fait que tout ceci ne valait qu'a une certaine époque aux USA. Une époque ou les militaires, pour des raisons géopolitiques, ont poussé pour que le domaine du numérique se développe à mort, ils les ont protégé contre les anciens gros de l'électronique qui aurait voulu prendre le relai. 
De la politique encore ^^
Effectivement aujourd'hui aux USA il arriverait la même chose à une startup qui essaierais de déloger les GAFAM qu'en France.




> Je pense que tu surestimes aussi l'importance qu'a eu le pognon de l'état pour des boîtes comme FB ou Google qui n'ont pas eu besoin de ça pour atteindre la taille critique nécessaire pour gagner leur marché.


Ha non, c'est très souvent sous estimé, mais ça se compte avec tellement de 0 que s'en est ahurissant. Il y a moult docu sur le sujet. 
Pour les subventions en gros c'est très souvent indirect : dons de tonnes de brevet (qui normalement aurait valut des millions à acheter), défiscalisation, aide au déploiement, contrat militaire en pagaille, et surtout : protection contre les plus gros, c'est un point important.




> Super vrai. C'est très dur de tenir ce discours là sans tomber dans ou se faire traiter de néolibéral, mais c'est clairement un cas où on a souffert du modèle très inflexible et protecteur de la loi du travail/des entreprises en général.


Bah, heu, faut appeler un chat un chat, c'est un discours néolibéral  ::rolleyes:: 




> C'est quand même franchement déprimant de réfléchir à ces questions et de voir l'état de la France et de l'Europe vs. les US et la Chine.


C'est quand même rigolo de citer la Chine, puis de houspiller l'état nation/providence en France  ::rolleyes:: 
La Chine c'est genre tout l'inverse de ce que tu décrit comme positif dans ton discours, et crois moi, je suis allé en Chine quelques mois, j'ai fait 10 ans de Chinois et vécu au cœur des plus grandes communauté chinoise de France  :^_^:

----------


## Charmide

J'ai jamais "houspiller l'état nation/providence en France", j'idéalise ni les US ni la Chine. Je suis pas resté ici par hasard. Regarde ce que tu cites, je parle de loi du travail inflexible _et_ protectrice volontairement parce que y'a toujours un revers de la médaille. Les choses qui nous pénalisent dans certains domaines sont des avantages dans d'autres, dont je suis très content de profiter, et je suis particulièrement fier du modèle social-démocrate en général, d'ailleurs je me fritte régulièrement avec des potes américains là-dessus. 
Tu m'as fais dire dans un autre poste que je prenais comme modèle les US, mais c'est pas la question. Je suis pas un fanboy du rêve américain. C'est un état de fait qu'on est en retard, qu'ils sont clairement dominants, et c'est intéressant d'en chercher les causes. J'en fais une analyse comme je peux avec ce que je connais, pragmatiquement, parce que les startups et créer de nouveaux produits software c'est le truc que j'aime le mieux faire et que j'ai fait dans toute ma carrière. 

Par contre, toi... Tu m'excuseras, mais transformer "moult docus" (donnes-en au moins un que tu trouves bien foutu, je suis curieux) en un monde féerique où c'est l'interventionisme et le protectionnisme économique qui explique tout... Faut vraiment avoir envie de projeter ses convictions idéologique préexistantes sur le monde et voir que ce qu'on a envie de voir. Que tu qualifies un diagnostic de bon sens de néolibéral parce qu'il correspond pas à tes convictions m'étonne pas trop à ce compte là. Ton approche est tellement caricaturale que je pense pas que quiconque te fasse changer d'avis. 

Elle s'arrête quand ta période au fait? Parce que bon, tu dis que "aujourd'hui il arriverait la même chose à une startup qui essaierais de déloger les GAFAM qu'en France", force est de constater que y'a quelques lettres qui s'y sont rajoutées récemment à ce sigle, qu'elles se sont toutes tirer la bourre et déloger mutuellement tout récemment. 
Et puis qu'entre Uber (en procès avec Google/Waymo), Airbnb (en guerre avec un paquet d'exécutifs locaux et de lobbies), Netflix (qu'un gros a essayé de racheter à l'époque où ils envoyaient des DVDs par la poste), Slack (en compétition frontale avec Microsoft Teams), Salesforce, j'en passe et des meilleurs qui tous marchent sur les plates-bandes de géants en place et ont déjà réussi à faire leur place, la machine a pas l'air de s'arrêter.

----------


## ook4mi

> Si t'essayes pas, tu sauras pas 
> 
> Protip : teste une ou deux semaines en gratuit pour voir si ça te correspond avant de prendre l'abo  et tu n'es pas obligé de prendre l'abo annuel CourseraPlus, tu peux juste prendre le certificat du cours en particulier.


Bah c'est passé, j'y suis aller au culot en disant qu'il doit rester des crédits formations pas utilisés avec le covid et en effet, il restait des sous sous dans le compte formation. Puis bon 340 euros pour une entreprise c'est vraiment pas grand chose, surtout à imputer sur un compte pour la formation... :D

PS :: j'ai eu quand même quelques consignes, c'est pas un cadeau déguisé mais rien qui ne soit pas du bon sens.

----------


## Kamasa

C'est Décembre, quoi de mieux que d'attendre Noel en codant ?

https://adventofcode.com/

----------


## Sariyah

Salut les canards,

Je ne sais pas trop où poster mon problème.
Je dois utiliser elasticsearch avec *Cerebro* et je n'y arrive pas...

J'arrive bien sur l'interface en localhost sur le port 9000 mais ensuite je dois renseigner le node adress sur le *port 9200* et j'ai un message d'erreur avec un "*error connecting to...*"
Dans le fichier de config en .yml j'ai bien essayé de changer le port ou le network.host mais rien ne change.

Quelqu'un aurait une piste svp ?  ::cry::  
_(Ubuntu en 20.04)_

----------


## gros_bidule

Yo  ::): 

dans ta config Cerebro (un .conf) tu peux déclarer la connexion à Elastic :


```
hosts = [
  {
    host = "http://localhost:9200"
    name = "Main Cluster"
  }
]
```

C'est ça qui te manquait j'imagine.


Le yml de ton Elastic peut être très simple. Si tu n'as qu'un noeud, pour commencer : 



```
---
## Default Elasticsearch configuration from elasticsearch-docker.
## from https://github.com/elastic/elasticsearch-docker/blob/master/build/elasticsearch/elasticsearch.yml
#
cluster.name: "docker-cluster"
network.host: 0.0.0.0

# minimum_master_nodes need to be explicitly set when bound on a public IP
# set to 1 to allow single node clusters
# Details: https://github.com/elastic/elasticsearch/pull/17288
discovery.zen.minimum_master_nodes: 1

## Use single node discovery in order to disable production mode and avoid bootstrap checks
## see https://www.elastic.co/guide/en/elasticsearch/reference/current/bootstrap-checks.html
#
discovery.type: single-node
```

-> Elastic configuré pour fonctionner tout seul, single-node, sans autres noeuds. Il ne cherchera pas à découvrir des potes.


Nota : ton Cerebro affichera du warning, car il considère que n'avoir qu'un noeud Elastic n'offre pas le minimum de sécurité (il en voudrait au moins 3 je crois, sinon on considère qu'il y a risque de perte de données/dispo si le noeud tombe). Normal donc.

----------


## Sariyah

Salut gros_bidule  ::): 

Alors en fait normalement tout devait être configuré pour le tp.. que je devais rendre aujourd'hui.
Dans application.conf côté Cerebro j'ai 



```
hosts = [
  #{
  #  host = "http://localhost:9200"
  #  name = "Localhost cluster"
  #  headers-whitelist = [ "x-proxy-user", "x-proxy-roles", "X-Forwarded-For" ]
  #}
```

et côté elastic 


```
cluster.name: cpe-tp
```

Remplacer "Localhost cluster" par "cpe-tp" n'a pas l'air de fonctionner. Pour le network.host, tu me conseilles de mettre 0.0.0.0 ?
*transport.host:* localhost sinon.

Pour expliquer un peu plus : Dans un terminal je dois faire un *logstash/bin/logstash -f logstash/conf/csvload.conf* et ça ça fonctionne et dans le même temps de l'autre côté sur un autre terminal je dois lancer le *start.sh* qui faisait parti des fichiers donnés. (et ils sont ok puisque ça marche chez d'autres)
Une fois que c'est fait j'ai bien l'interface de connexion à Cerebro sur le port 9000 mais impossible d'entrer le node adress avec le port 9200... Résultat je peux même pas commencer les requêtes du TP.

edit : Je viens aussi d'essayer avec 127.0.0.1 mais toujours rien.

----------


## gros_bidule

Mince, il manque un bout dans la conf Cerebro ?

La partie montrée est en commentaire  ::): 

- - - Updated - - -

Parcontre Cerebro ce n'est que pour monitorer tes Elastic.
Pour requêter Elastic tu veux plutôt parler de Kibana (et son onglet Dev Tools) ?
J'imagine que le TP est sur le montage d'une stack "ELK" (Elasticsearch Logstash Kibana) ? Cerebro c'est un outil en plus, mais pas indispensable.

Dans ta conf kibana yml, tu auras un truc genre : 


```
server.name: kibana
server.host: "0"
elasticsearch.hosts: http://elasticsearch_ip:9200
```


---

Enfin, ton Elastic est-il en marche ? Si son process meurt au démarrage, c'est qu'il y a une config à faire selon ton OS : 
dans un terminal :


```
sudo sysctl -w vm.max_map_count=262144
```

(souvent nécessaire au moins sous Debian/Ubuntu., donc tu es concerné. A faire juste une fois. C'est un soucis d'Elastic, enfin... un prérequis peu commun)

----------


## Sariyah

Sans les commentaires toujours pas de connect sur le port 9200.
C'est possible que ce soit une question de droit ? Quelqu'un a eu ce soucis sur Mac il me semble.

Oui c'est bien la stack ELK.  :;): 

En fait dans mon dossier j'ai Elasticsearch, Logstash, Kibana, Cerebro et un dossier data. Ce que j'ai compris, c'est qu'à ce niveau une fois connecté sur 9200 via Cerebro je dois avoir une interface graphique.

----------


## ook4mi

> Sans les commentaires toujours pas de connect sur le port 9200.
> 
> C'est possible que ce soit une question de droit ? Quelqu'un a eu ce soucis sur Mac il me semble.


Est-ce que le port est "disponible" ? Il est pas déjà pris par un autre service ou fermé/masqué par un pare-feu ?

----------


## Sariyah

Si c'était le cas je le verrais sur un *netstat -natp* ? Pour le firewall aucune idée faut que je regarde comment faire.

----------


## gros_bidule

Sous Ubuntu tu ne devrais pas avoir de soucis.

Est-ce que tu vois ton process elastic (du java) avec un  "pstree" ?

----------


## Sariyah

Je vois bien un process en java avec le port 9000 mais pas de "pstree"

----------


## gros_bidule

Pardon, c etait la commande pstree pour lister les process  ::): 
Mais du coup 9000 c est ton cerebro. Tu n'as rien sur le 9200 ? "netstat -abno", tu verras les ports utilisés et le nom des process.

----------


## Sariyah

Ah mais oui désolé  ::happy2::  Non je le vois pas...

edit : C'est vraiment netstat -abno ?

Je me demande si demain je vais pas passer par une VM sur mon fixe. C'est assez gros mais à priori il y a tout dessus. Faut que je finisse pour vendredi.
Je fais une pause pour ce soir depuis 8h30 je me suis quasi pas arrêté je commence à avoir mal à la tête  ::o:

----------


## Sariyah

Je suis passé sur une VM du coup et ça a fonctionné. J'ai réessayé ce matin pour mon port 9200 mais vraiment je vois pas...

Bon maintenant c'est les requêtes Rest et les QueryDSL mais c'est un autre problème.  ::P:

----------


## gros_bidule

Nice, bien joué !  :B): 

N'hésites pas si tu as un soucis avec ce querydsl des enfers  ::): , on organisera des sessions de soutien moral.

----------


## Teocali

> Nice, bien joué ! 
> 
> N'hésites pas si tu as un soucis avec ce querydsl des enfers , on organisera des sessions de soutien moral.


je suis en train de galérer pour les générer en gradle à partir d’entités écrites en kotlin...

----------


## Orhin

https://github.com/jayphelps/git-blame-someone-else

Huhu.

----------


## gros_bidule

Oui mé non, les vrais programmeurs sont _protégés_ car ils signent toujours leurs commits  ::trollface::  Si pas signé, c'est pas eux.

Par contre, un truc qui m'agace quand je bosse avec un chieur, c'est quand je fais une branche, il pousse un commit au milieu des miens. Ok, jusque là pas de soucis, sauf qu'avant de merger on squash pour n'avoir qu'un nombre minimal de commits, et on ne voit que mon nom. Plus tard, ce même chieur vient te demander pourquoi tu as commité cette ligne de code, là ? C'est l’œuvre du chieur, mais git blame ne peut pas le deviner.
Il faut un gros chieur de compétition quand même, mais il y en a ^^.

----------


## Getz

> Oui mé non, les vrais programmeurs sont protégés car ils signent toujours leurs commits 
> 
> Par contre, un truc qui m'agace quand je bosse avec un chieur, c'est quand je fais une branche, il pousse un commit au milieu des miens. Ok, jusque là pas de soucis, sauf qu'avant de merger on squash pour n'avoir qu'un nombre minimal de commits, et on ne voit que mon nom. Plus tard, ce même chieur vient te demander pourquoi tu as commité cette ligne de code, là ? C'est l’œuvre du chieur, mais git blame ne peut pas le deviner.
> Il faut un gros chieur de compétition quand même, mais il y en a ^^.


Fais un rebase interactif et tu regroupes tous tes commits sauf le sien à l'avenir  ::ninja::

----------


## gros_bidule

Haha, yeah, complètement  ::):

----------


## Captain_Cowkill

> Fais pas genre, t'es peut-être nouveau ici mais tu connais CPC


Je ne suis plus autant investi dans les débats CPC, je l'avoue  ::ninja::

----------


## ook4mi

Coin Coin, 

je vais avoir besoin d'ajouter l'outil JavaScript et NodeJS dans ma caisse à outil (juste à côté de la Google Cloud Plateform). Je cherche donc des bonnes ressources pour bien m'autoformé. 

J'ai repéré 2 ressources pour JS mais je ne sais pas si il y a pas mieux ?  ::P: 
https://www.freecodecamp.org/learn
http://codecademy.com/learn/introduction-to-javascript

Et la documentation sur le site de NodeJS qui me semble très bien
https://nodejs.dev/learn

Bon après sinon y a une jungle de ressources dispo, c'est très confusant  :Splash: 

Merci  ::):

----------


## zifox

> Oui mé non, les vrais programmeurs sont _protégés_ car ils signent toujours leurs commits  Si pas signé, c'est pas eux.
> 
> Par contre, un truc qui m'agace quand je bosse avec un chieur, c'est quand je fais une branche, il pousse un commit au milieu des miens. Ok, jusque là pas de soucis, sauf qu'avant de merger on squash pour n'avoir qu'un nombre minimal de commits, et on ne voit que mon nom. Plus tard, ce même chieur vient te demander pourquoi tu as commité cette ligne de code, là ? C'est l’œuvre du chieur, mais git blame ne peut pas le deviner.
> Il faut un gros chieur de compétition quand même, mais il y en a ^^.


Ben pourquoi tu squash son commit ? Garde le tel quel. Que tu squash des commits consécutifs pour du WIP ça parait logique, mais squasher des commit de deux personnes différentes ça me parait illogique.

Accessoirement si c'est TA branche, qu'est ce qu'il vient foutre dedans ?

----------


## gros_bidule

Squash parce que j'avais un historique du genre
- refactoring fonction Truc
- un bidule (du type chiant)
- fonction Truc
L'était au milieu quoi. J'aurais pu jouer sur des reverts et rejouer mes commis avant ou après le sien, mais bon, je n'avais pas que ça à faire, et entre collègues on est sensé être bienveillants.

Et ouaip, que faisait son commit dans ma branche... bah mec toxique voulait faire du pair programming, mais tu sais, le mauvais pair programming, celui où le mec se met à côté de toi et commente ce que tu fais sous les 2s. Avec son commit on va dire qu'il a _forcé_ son code. Mais le pair programming ça s'apprend, il y a plusieurs techniques et des règles à respecter. Perso ma petite bible c'est ça : https://martinfowler.com/articles/on...ogramming.html

----------


## Orhin

> Squash parce que j'avais un historique du genre
> - refactoring fonction Truc
> - un bidule (du type chiant)
> - fonction Truc
> L'était au milieu quoi. J'aurais pu jouer sur des reverts et rejouer mes commis avant ou après le sien, mais bon, je n'avais pas que ça à faire


Avec le rebase interactif sur la GUI des produits Jetbrains ça se fait en 2 clics.  :tired:

----------


## gros_bidule

Sauf si tu as des conflits reloux à gérer  :;):  On travaillait sur la même base de code.
Et encore une fois, ce n'était pas sensé être gênant. On est pas sensé se taper dessus dans une équipe. C'était ça le soucis.
Enfin bon, un ancien taff, je ne reverrai jamais le type, et now je bosse avec des gens formidables  ::):

----------


## Tramb

> Avec le rebase interactif sur la GUI des produits Jetbrains ça se fait en 2 clics.


Ca dépend à quel point les commits sont orthogonaux.

----------


## Orhin

> Sauf si tu as des conflits reloux à gérer On travaillait sur la même base de code.





> Ca dépend à quel point les commits sont orthogonaux.


Des excuses, des excuses...  :tired: 




> Et encore une fois, ce n'était pas sensé être gênant. On est pas sensé se taper dessus dans une équipe. C'était ça le soucis.
> Enfin bon, un ancien taff, je ne reverrai jamais le type, et now je bosse avec des gens formidables


Ah clairement dans une équipe qui fonctionne bien ce genre de problème n'est pas censé arrivé.

----------


## Tramb

Scandale, jamais je n'aurais écrit bosser avec des gens formidables.
La preuve, j'ai même bossé avec Rout.

----------


## gros_bidule

Pas de soucis Orhin  ::): 

Puis c'est clair que dans IJ (mais pas que lui évidemment) le support Git est devenu top.
Il y a encore quelques versions il fallait lancer un rebase interactif pour avoir l'assistant graphique de squash, et maintenant tu as même la possibilité de squash sans rebase : tu sélectionnes les commits dans l'historique, squash, et voilà (ce que je faisais via SmartGit jusque là, étant une feignasse). Enfin ! Tu peux tout faire depuis l'IDE. Ca fait du bien pour qui ne veut pas utiliser la ligne de commande ou un second outil.

----------


## rOut

> Scandale, jamais je n'aurais écrit bosser avec des gens formidables.
> La preuve, j'ai même bossé avec Rout.


Ha bon? J'ai jamais vraiment bossé tu sais.

----------


## gros_bidule

Tu es datascientist ?

----------


## Tramb

> Tu es datascientist ?


C'est un abus de langage, c'est juste qu'on a été rémunéré en même temps.

----------


## rOut

> Tu es datascientist ?


Non, juste très très fainéant, et (je trouve) bien trop payé pour le boulot que je fais.

----------


## Sariyah

> Nice, bien joué ! 
> 
> N'hésites pas si tu as un soucis avec ce querydsl des enfers , on organisera des sessions de soutien moral.


Merci.  :;): 
J'ai rendu le TP j'ai fais ce que j'ai pu. Je suis passé sur celui de MongoDB maintenant...
Même si j'ai pu m'en sortir avec une VM, j'avoue j'aimerais bien comprendre ce blocage de port 9200. J'ai pas eu le temps mais je vais jeter un oeil à la config d'ELK sur la VM pour voir. 

En fait ces derniers temps j'ai eu occasion de voir un peu de réseau au boulot et je trouve ça intéressant. A mes heures perdues (donc pas cette année -_-) j'aimerais bien apprendre dans ce domaine.

----------


## Dross

Pour du dev regarde du coté de Docker, c'est carrément plus pratique/flexible pour déployer ce genre de ressources sans se prendre la tête.

----------


## Kamasa

Surtout que tu peux déjà trouver des tas d'images prêtes à l'emploi ou que tu peux modifier à loisir

----------


## Captain_Cowkill

Bon du coup, dans le cadre de mon changement d'orientation professionnelle (pour ceux qui n'ont pas suivi voici mon premier message à ce sujet), j'ai eu un rendez-vous avec une conseillère de l'APEC ce matin.
Je m'attendais à un vrai RDV d'orientation avec une personne spécialisée dans tout ce qui touche à la programmation. Et en fait non. Elle n'y connaissait rien et n'a fait que me marteler des conseils génériques (dont la plupart que je savais déjà) pendant 1h15. Non seulement elle ne m'a rien dit de concret (à part les éternels "il faut être sûr du métier que vous voulez", "il faut être sûr que ça vous plait", "il faut être sûr que...") mais en plus m'a limité découragé car mon background est à mille lieux du domaine de la programmation et que si, selon elle, je ne fais pas une formation diplômante longue je n'intéresserai personne sur le marché (marché qu'elle ne connait pas, je rappelle). Et elle m'a balancé plein de liens pour je cherche moi même.

Me revoilà donc à la case départ.

----------


## Nilsou

Mais c'est quoi ton profil à la base ?

----------


## Captain_Cowkill

Alors études de commerce international (et langue chinois), puis 12 ans de taf dans le commerce, puis 2 ans dans la fonction publique.
Ouais, le mec qui sait pas trop où il va  ::P:

----------


## Nilsou

Et pourquoi tu veut faire de l'informatique exactement ? Tu es bien conscient que tu trouvera surement moins de débouché que dans le commerce et qu'un informaticien débutant touche infiniment moins qu'un mec qui a 12 ans de taf dans le commerce ou qu'un fonctionnaire  ::P:  ? Sans parler de la sécurité de l'emploi  :Sweat:

----------


## Captain_Cowkill

Parce que ça fait 14 ans que je bosse la mort dans l'âme parce que je fais uniquement des choses inintéressantes et dans lesquelles je ne me vois pas finir ma carrière. J'ai besoin d'un truc intellectuellement plus poussé. L'informatique m'a toujours intéressé mais je n'ai jamais osé faire le pas (ma plus grosse erreur) et je sais que c'est un endroit où je me sentirai plus à ma place. Je me suis mis à apprendre le C++ et je m'amuse (à voir aussi si ça passera une fois l'attrait de la nouveauté passé...).
Le commerce, hors de question que j'y retourne, je suis parti parce que je n'en pouvais plus (notamment à cause des clients absolument immondes). J'étais aussi blasé par cette mentalité bullshit du paraître et par l'obligation de convaincre les gens de choses auxquelles je ne croyais pas du tout (je ne suis pas commercial pour un sou).
La fonction publique bah... je délite totalement intellectuellement parlant. Le poste que j'occupe actuellement est dur mais n'est pas compliqué. Et surtout je fréquente énormément de gens qui me sortent par les trous de nez car totalement abrutis. Je ne dis pas ça pour me valoriser hein, mais quand 95% des discussions tournent autour du cul, du foot ou de la conspiration de la COVID, ça a tendance à me rendre mauvais.

Et je doute qu'un informaticien débutant touche beaucoup moins que ce que je touche actuellement (je suis aux alentours des 1400 par mois, le commerce et la fonction publique ça ne paie pas bien du tout).

Pour la sécurité de l'emploi, c'est ce qui m'a fait aller dans la fonction publique quand j'en ai eu l'occasion. Mais est-ce que ça vaut le coup quand je vais tous les jours au boulot déprimé et que j'en rentre épuisé ?  ::sad::

----------


## Awake

Tu n'auras probablement pas de problème à trouver du taf comme dev, le secteur croule sous la demande. Et après quelques années tu seras bien payé, surtout si tu es motivé et progresses vite.

Follow your dreams !

----------


## MrBeaner

Si tu as pris ta décision, je pense que c'est cool que tu aies le courage de suivre la voie qui te plaît.

J'ai un ami qui n'était plus content dans son job précédent et qu'il a quitté pour aller autre part. Même si son prochain taff ne lui plaît pas concrètement, il pourra toujours changer. Tous les risques valent la peine de quitter une position qui te rend certainement malheureux.

Si tu accumules un mal-être, je recommande d'être accompagné par un psychothérapeute, à la fréquence que tes finances le permettent, pour également dealer avec ce poids en développement personnel.

Pour la carrière de dev (dont je ne connais pas le marché du travail), il doit y avoir des statistiques officielles qui donnent une idée, non ?

----------


## Nilsou

> ...


Je dirais que dans ce cas le seul soucis c'est de trouver une formation qui a un brin de légitimité dans la reconversion, afin de te faire embaucher dans des jobs débutants. 
Pourquoi pas le CNAM, exemple au pif ?

----------


## Captain_Cowkill

> Tu n'auras probablement pas de problème à trouver du taf comme dev, le secteur croule sous la demande. Et après quelques années tu seras bien payé, surtout si tu es motivé et progresses vite.
> 
> Follow your dreams !


Je suis ultra motivé (même si mon entretien de ce matin m'a un peu filé le bourdon) et, oui, j'apprends très vite  ::P: 




> Si tu as pris ta décision, je pense que c'est cool que tu aies le courage de suivre la voie qui te plaît.
> 
> J'ai un ami qui n'était plus content dans son job précédent et qui l'a quitté pour aller autre part. Même si son prochain taff ne lui plaît pas concrètement, il pourra toujours changer. Tous les risques valent la peine de quitter une position qui te rend certainement malheureux.
> 
> Si tu accumules un mal-être, je recommande d'être accompagné par un psychothérapeute, à la fréquence que tes finances le permettent, pour également dealer avec ce poids en développement personnel.
> 
> Pour la carrière de dev (dont je ne connais pas le marché du travail), il doit y avoir des statistiques officielles qui donnent une idée, non ?


Je pense pas avoir besoin de psy pour le moment, mon mal être est dû au fait que je m'ennuie très vite (j'aime apprendre constamment de nouvelles choses) et aussi au fait que mon environnement de travail ne me correspond pas "intellectuellement" (voir ma remarque sur mon message précédent). Actuellement j'ai uniquement 2 personnes avec qui le courant passe très bien (dont une qui vient de partir).




> Je dirais que dans ce cas le seul soucis c'est de trouver une formation qui a un brin de légitimité dans la reconversion, afin de te faire embaucher dans des jobs débutants. 
> Pourquoi pas le CNAM, exemple au pif ?


Oui voilà, faut que je trouve une vraie formation. Et je m'attendais à ce que la conseillère APEC me dirige vers un (des?) choix correspondants. Mais je trouverai bien quelquechose parmi les 50 liens internet qu'elle m'a envoyé par mail.

----------


## MrBeaner

Je vais bientôt achever le cours CS50 sur edX qui aura été une très très TRÈS chouette expérience (je le recommande d'ailleurs Cowkill s'il a un jour un temps mort avant de reprendre les études)  ::): 

Comme j'ai pythonné en data science (je ne sais jamais s'il faut mettre ou non des majuscules), je pense qu'il me manque pas mal de bonnes pratiques dont je ne me rendrai compte de l'avantage que plus tard. Du coup, puisque je lis souvent des posts inquisitoires sur ci ou ça, j'aimerais bien avoir des éclairages sur mes questions spontanées :

Pour le développement en python :

*1)* J'ai lu plus haut que *pip* n'était pas apprécié. J'ai checké un peu et j'ai lu des recos pour plutôt python -m pip install pour installer une nouvelle libirairie, mais je ne suis pas sûr de comprendre le problème avec le programme. Est-ce que c'est parce qu'il y a trop de choses qui se passent implicitement ?

*2)* Pour tester tensoflowGPU un jour, j'ai dû créer un *environnement* de travail. Je comprends que ces environnement permettent de garder dans un coin indépendant tout l'environnement de librairies à utiliser dans un projet. Du coup, est-ce que la bonne pratique veut qu'il faille créer systématiquement des environnements pour chaque projet ? J'ai lu un billet qui déconseille vivement de jamais lancer une pip install directement en ouvrant le prompt Anaconda (ce que j'ai fait jusque là).

----------


## ducon

> Pour le développement en python :
> 
> *1)* J'ai lu plus haut que *pip* n'était pas apprécié. J'ai checké un peu et j'ai lu des recos pour plutôt python -m pip install pour installer une nouvelle libirairie, mais je ne suis pas sûr de comprendre le problème avec le programme. Est-ce que c'est parce qu'il y a trop de choses qui se passent implicitement ?


Pour moi, ça rajoute un gestionnaire de paquets par dessus celui qui existe déjà, ça me suffit pour éviter.

----------


## Cwningen

Disclaimer : je ne suis pas un expert en Python.

J'aime pas pip parce que c'est un mauvais gestionnaire de paquets quand on est habitué aux gestionnaires de paquets de n'importe quelle distribution Linux, en particulier : il ne gère pas les mises à jour, et il ne désinstalle pas les dépendances. Je préfère utiliser le gestionnaire de paquet de la distribution autant que possible (même sur Windows, j'utilise le pacman de msys2), c'est plus propre. L'idéal est, je pense, de limiter l'usage de pip aux venv, comme ça le bazar reste dans un coin. Mais, en pratique, j'utilise pip surtout pour installer des logiciels en tant qu'utilisateur et non pas pour du développement (donc pas en venv).

----------


## TwinBis

@Captain_Cowkill Tu as regardé les écoles genre Simplon ?
J'avais vu une ou deux personnes en reconversion qui en sortaient et qui m'avaient fait bonne impression.

----------


## Lazyjoe

> Mais, en pratique, j'utilise pip surtout pour installer des logiciels en tant qu'utilisateur et non pas pour du développement (donc pas en venv).


Ah je me disais, tous les pythoneux utilisent pip dans mon labo, quel est donc le loup ?
Mais vu qu'on bosse sur des calculateurs où personne n'a le droit d'effleurer de loin la config système ça reste un bon choix pour déployer le nécessaire.

----------


## Nilsou

> Pour moi, ça rajoute un gestionnaire de paquets par dessus celui qui existe déjà, ça me suffit pour éviter.


Sauf que tout le monde utilise pire que Pip, beaucoup utilisent conda, encore une surcouche.  ::trollface::  
C'est fou comme ce langage est trop bien  ::siffle::

----------


## Nilct

De mon côté (chef d'une équipe IA, qui fait des POC/prototype), nous utilisons au maximum des environnements conda - en utilisant par défault conda-forge comme repository. 
Comme les machines sont mutualisées (plusieurs utilisateurs y accèdent) cela permet à chacun de se créer son environnement selon les projet (pytorch ou tensorflow, mais aussi des libs computer vision/géodata dans certains cas).

En cas de soucis ou de mise à jour, le pire qu'il puisse arriver est d'effacer l'environnement et d'en refaire un.

Pour le passage à l'industrialisation, nous passons par docker (et là nous n'avons pas encore figé la méthodo ... ).

----------


## Nilsou

> Ah je me disais, tous les pythoneux utilisent pip dans mon labo, quel est donc le loup ?
> Mais vu qu'on bosse sur des calculateurs où personne n'a le droit d'effleurer de loin la config système ça reste un bon choix pour déployer le nécessaire.


Le truc c'est que deux codes python sont rarement fonctionnel sur le même python. Un pythonneux n'a pas envie de s'adapter et de changer les bibliothèques , les trucs, les machins et le formalisme (sinon ils ne seraient pas pythonneux  ::trollface::  , logique  :Indeed:  ). Donc il créé des environnement virtuel adapté à ses sessions pour éviter le merdier.

En clair ce qu'on fait en mettant une bibliothèque compilée à la bonne version dans un code C, eux, ils le font avec des outils en surcouche. En général Conda->Pip


Bon, pour moi, quand un langage qui est déjà, à l'origine, une surcouche, dont 100% des bibliothèques sont écrites dans d'autres langages, a en plus besoin d'outils spécifiques sinon c'est ingérable, c'est peut-être qu'il faut penser à tout foutre à la benne  ::siffle::

----------


## C4nard

> Le truc c'est que deux codes python sont rarement fonctionnel sur le même python. Un pythonneux n'a pas envie de s'adapter et de changer les bibliothèques , les trucs, les machins et le formalisme (sinon ils ne seraient pas pythonneux  , logique  ). Donc il créé des environnement virtuel adapté à ses sessions pour éviter le merdier.
> 
> En clair ce qu'on fait en mettant une bibliothèque compilée à la bonne version dans un code C, eux, ils le font avec des outils en surcouche. En général Conda->Pip
> 
> 
> Bon, pour moi, quand un langage qui est déjà, à l'origine, une surcouche, dont 100% des bibliothèques sont écrites dans d'autres langages, a en plus besoin d'outils spécifiques sinon c'est ingérable, c'est peut-être qu'il faut penser à tout foutre à la benne


C'est sûr qu'en C/C++ la gestion des versions de bibliothèque est un problème ne nécessitant absolu aucun outil tiers.  ::rolleyes::  (*et*/ou des macros...).

----------


## Tramb

> C'est sûr qu'en C/C++ la gestion des versions de bibliothèque est un problème ne nécessitant absolu aucun outil tiers.  (*et*/ou des macros...).


Ouais sauf que les "gens sérieux" comme RedHat, FreeBSD ou Debian s'en tirent très bien avec les dépendances pour "les libs sérieuses".
Les "gens sérieux" du Python, comment dire...

----------


## MrBeaner

Hé ben ! C'est vraiment la fête au Python ici  ::P: 

Du coup, quel(s) langage(s) de haut niveau vous satisfont actuellement ?

----------


## Tramb

Bah il est vachement à la mode, donc il prend, comme le js  ::P: 

Edit: Moi j'aime beaucoup Racket, dans le monde langage dynamique à REPL
Plus statique, Rust, OCaml ou Haskell sont bien propres je trouve.

----------


## olih

C#  ::ninja::

----------


## Nilsou

> Du coup, quel(s) langage(s) de haut niveau vous satisfont actuellement ?


C++  ::ninja::

----------


## Tramb

> C++


lolilol

----------


## Nilsou

> C'est sûr qu'en C/C++ la gestion des versions de bibliothèque est un problème ne nécessitant absolu aucun outil tiers.  (*et*/ou des macros...).


Outil tiers ?  ::unsure::  
Tu parle de GCC c'est ça ?  ::ninja:: 




> lolilol


 ::lol::

----------


## Tramb

> Outil tiers ?  
> Tu parle de GCC c'est ça ?


Et make  ::):

----------


## ducon

> Sauf que tout le monde utilise pire que Pip, beaucoup utilisent conda, encore une surcouche.  
> C'est fou comme ce langage est trop bien


anaconda n’existe pas dans Debian.
Quant à confondre le langage et un logiciel annexe…  ::lol::

----------


## Nilsou

C'était bien le propos : quand tu es obligé de dépendre autant de logiciel connexe pour que programmer dans ton langage devienne efficace, c'est problématique. Selon moi.
Je confond rien du tout  :tired: 

- - - Mise à jour - - -




> Et make


C'est pas faux  ::P:

----------


## ducon

Je n’ai jamais été obligé d’utiliser pip.

----------


## Tramb

Mais tu n'es pas développeur.
Regarde nous on utilise pas ProNote  ::P:

----------


## C4nard

> Et make ninja


Fixed.

Et autotools  ::): 
ou cmake  ::): 
ou meson  ::): 

En fait y a exactement le même problème en C qu'en python, et c'est pas vraiment étonnant. Si tu veux telle version de la lib machin (parce que t'as besoin de telle fonctionnalité), t'es bien obligé à un moment ou à un autre de le préciser quelque part. Que ce soit du pip, du cmake ou du cargo c'est pareil...

Puis le packaging debian etc., c'est pas forcément une réfèrence non plus (cf. l'emergence de flatpak et autres qui permettent de bundler toutes les dépendances dans le paquet final, parce que 2 versions de la même lib peuvent pas être installé sur le système simultanément par exemple).

Bref comme partout c'est une histoire de compromis et de bon sens… (ie le gars qui veut la dernière version de tout utilisera un OS rolling release et pas debian stable).

----------


## Tramb

> Fixed.


Oh que oui.

Sinon je ne suis pas d'accord, le déploiement d'application dans les ports tree d'un BSD, ça fonctionne.
Ou les packages debian et redhat.

Le fait que ce soit compliqué quand tu veux plusieurs versions concurrentes de la même lib, pour moi, c'est pas un problème (ni en Python d'ailleurs).

----------


## Captain_Cowkill

> @Captain_Cowkill Tu as regardé les écoles genre Simplon ?
> J'avais vu une ou deux personnes en reconversion qui en sortaient et qui m'avaient fait bonne impression.


Ah non, je ne connaissais pas Simplon. Merci pour le tip !

Mais pour le moment j'essaie de trouver à quel poste je voudrai être. Le souci c'est qu'il y a tellement d'intitulés différents que je m'y perd. Je comptais un peu sur la conseillère APEC pour m'aiguiller mais elle avait tout aussi larguée.
Le seul truc que je sais, c'est que je veux me diriger vers du code pur.

----------


## Hideo

Retourner a l'ecole est une option pour toi ? Si oui tu peux aussi te poser la question de l'alternance, meme si ca peut etre un peu complique de trouver quelque chose au tout debut.

----------


## Kamikaze

Bah y'a plein de devs sur le topic mon cher Captain, on peut te conseiller mieux que ces empafés.

C'est une question très large mais y'a rien de trop difficile concernant la réponse.

Le plus important c'est ton expérience actuelle (ce que tu as déjà fait, ce que tu penses qu'il te plaira de faire) et de te lancer.

Perso je pense qu'il ne faut pas hésiter à ratisser extrêmement large et en gros à postuler à tout ce qui te plaît de prêt ou de loin, et bien sûr important de continuer à te former là dessus.

Donc, le pavé:

Y'aurait plusieurs moyens de découper ça, mais je pense que c'est intéressant de d'abord voir *si une industrie te plait d'avantage* (c'est pas forcé mais ça pourrait t'aider à trouver une direction). 

Par exemple tu peux faire du code très applicatif, assez généraliste/pas trop spécialisé (imagine des softwares de comptabilité par exemple, des trucs de gestion de stock, etc. pense à un utilitaire custom en gros).

Tu peux aussi travailler dans ce que je qualifierais de truc plus industriel, donc des logiciels qui vont contrôler des flottes de machines spécialisées, un bras robotique, un scanner, une chaine de production, etc.

Y'a également l'embarqué, donc là tu peux penser à des lecteurs mp3, des trucs genre Alexa d’Amazon, un petit boîtier qui gère un panneau solaire, une télécommande, etc.

Y'a ce que je qualifierait "d'applicatif spécialisé", donc par exemple la finance de marché où les connaissances en maths/finances t'aideront, ou genre une entreprise spécialisé dans l'audio ou là le traitement du signal etc. pourrait t'aider, on pourrait également parler du secteur du jeu vidéo, mais c'est un sujet à part entière.

Donc bref, y'a beaucoup de choses en commun entre ces quelques exemples mais c'est un vrai découpage qui pourra t'aider à créer un profil pertinent. Par exemple la plateforme: https://www.efinancialcareers.co.uk/ est spécialisée dans les postes de dev au sein d'entreprises financières (banque, assurance, etc.).

-----------

Ensuite je verrais un autre découpage principal, c'est ta position en tant que dév'. Là tu nous dis que tu veux "faire du code pur" mais même là dedans y'a des différences.

Est ce que tu veux travailler plus dans l'infrastructure, c'est à dire que tu vas programmer des outils qui vont fournir une plateforme pour servir d'autres outils. C'est un peu n'importe quoi au niveau des acronymes et autres dénominations mais tu vas parfois retrouver les noms: "operations", "ops" ou encore "SRE" (site reliability engineer). Et en gros c'est l'infrastructure ouais.

Après t'as "le dev" qui développe une application qui va être consommée par un pool d'utilisateur assez précis (qui sont parfois d'autres dev, pas forcément un utilisateur final diront nous), et cette application va généralement être déployée sur l'infrastructure fournie par les mecs que j'ai décrit au dessus.

Ensuite t'as la partie service IT, qui malheureusement est souvent distincte des deux autres ci dessus (ce qui est un peu absurde, mais bon) et qui s'occupe de fournir un environnement de travail pour les deux lurons ci-dessus. Machines de développement, pare-feu, la frontière est parfois un peu grise entre ces gars là et le premier groupe que j'ai décrit. Généralement assez peu de code ici mais j'essaye de te donner une image de ce qu'on retrouve dans la plupart des boites.

Ensuite si on s'attarde sur le second groupe "les devs", là aussi y'a parfois un découpage entre ceux qui vont s'occuper des tests (quality insurance, tests etc.) et ceux qui vont développer. Selon si la boite est plus ou moins sophistiquée ça pourra être la même personne. Parfois tu vas retrouver l'acronyme "devops" qui en gros signifie que tu vas t'occuper d'un peu tout, de l'application jusqu'à son infrastructure. Ensuite t'as souvent un découpage entre ceux qui font les interfaces graphiques, et ceux qui s'occupent "du moteur" sous-jacent.

-----

Donc bref, mon souci n'est pas d'être exhaustif ou hyper précis, mais c'est de montrer la diversités des possibilités. 

*Donc ce que je te conseille*, c'est de regarder un maximum d'offres, dans chaque offre tu vas avoir une *description des technologies* utilisées (par exemple: C++, Node.js pour le front end, Git pour la gestion des sources, Jenkins pour l’intégration continue, Kubernetes/Docker pour le déploiement). Si ces termes ne te parlent pas encore, ça viendra, il faut t'y intéresser.

Généralement tu as un langage et quelques framework pour le coeur (exemple: C++17 et la librairie zeromq)
Ensuite assez souvent tu as un framework ou un langage dédié pour la partie front end, l'interface graphique/la gestion (exemple: Node.js, Qt, etc.)
Ensuite tu as le gestionnaire de source (Git, Gitlab, Git Stash)
Ensuite tu as ce qui s'occupe de compiler et tester les sources en gros (Jenkins, Sonarqube, etc.)
Ensuite tu as l'environnement sur lequel tourne tes sources et le déploiement (Kubernetes, Docker, etc.)

En plus de cette description de la "tech stack" tu auras une *description de "l'industrie"*, "du business" qui correspond un peu à ma première partie sur l'industrie, qui va te décrire ce que fait l'application au final, dans quel domaine on travaille (genre une boite qui fait des panneaux solaires, une boite qui fait des logiciels de compta, etc.).

EDIT: Ah oui et la position au sein de l'équipe évidemment (testeur, dev, etc.)

Et si tu vois une offre qui t'intéresse, je te conseille de te documenter sur tous les points décrit dans l'offre, tu vas en apprendre beaucoup et voir si ça te plait. Ne reste plus qu'à te former un peu plus si besoin et postuler.

----------


## Orhin

> Ensuite assez souvent tu as un framework ou un langage dédié pour la partie front end, l'interface graphique/la gestion (exemple: Node.js, Qt, etc.)


Node.js c'est pas vraiment du front-end.  ::P: 

Mais sinon plutôt d'accord avec tout le reste du post.

----------


## Kamikaze

Ouais bonne remarque, j'ai dit ça sans trop réfléchir parce que récemment j'ai fait un projet en C++ dont les outputs sont mis à dispositions publiquement via un serveur http (toujours en C++) et une autre équipe s'est chargé de servir ces résultats via Node.js et express machin là et qu'en gros ça ne fait que de la présentation quoi, ça choppe les données et ça les affiches, et éventuellement ça me renvoie quelques modifications.

Mais effectivement pour certains Node c'est leur backend j'imagine

On a aussi utilisé récemment Node dans de l'embarqué (bon de l'embarqué assez obèse, on parle de truc équivalents à du raspberry pi) et de ce que je me souviens ça pompait quelques dizaines de mo de mémoire vive ce qui était OK au niveau de nos contraintes et là encore ça se contente de servir des pages webs, donc bon niveau backend y'a plus complexe. C'est ancré comme frontend dans ma tête maintenant haha, jamais vu de gros trucs en Node

----------


## Captain_Cowkill

> Retourner a l'ecole est une option pour toi ? Si oui tu peux aussi te poser la question de l'alternance, meme si ca peut etre un peu complique de trouver quelque chose au tout debut.


Economiquement, pas trop. Je me vois mal payer une école, ne plus toucher de salaire et payer ma baraque  ::P: 




> ...


C'est déjà très exhaustif, et beaucoup plus complet (et précis) que ce que j'ai vu maintenant. Merci pour l'explication.
Ça me donne déjà des pistes.

Pour en revenir à mon expérience actuelle, je suis tellement à des lieux du développement que ça ne m'aide pas trop.

----------


## Kamikaze

Fais gaffe t'as mis tout mon post en réponse ça va faire des mécontents.

Concernant ton expérience passé qui ne serait pas pertinente, honnêtement ne la mets pas trop de côté pour autant. Quand une équipe recrute quelqu'un, une grosse partie de l'échange c'est d'avoir un collègue agréable qui veut apprendre et échanger, essaye de trouver des liens avec ce que tu veux faire désormais. Ne serait ce qu'expliquer que ton changement de voie est un véritable attrait pour le monde du développement, bah ça donne envie. Travailler avec un nouveau hyper enthousiaste c'est mieux qu'un vieux de la vieille qui n'y trouve pas de motivation.

Ensuite ton expérience actuelle concernant le C++ a de la valeur même si tu débutes, je pense que tu ne devrais pas hésiter à échanger un maximum, notamment sur le forum, ça te permettra de trier entre les on-dit/théorie idéalisée et la réalité.

C'est assez courant sur internet, d'ailleurs y'avait un article plus ou moins à ce sujet sur ce très bon site dédié au C++ (dispo en anglais ou en allemand): https://www.modernescpp.com/index.ph...ules-and-myths

----------


## Hideo

> Economiquement, pas trop. Je me vois mal payer une école, ne plus toucher de salaire et payer ma baraque


C'est justement tout l'interet de l'alternance, ton ecole est payee par ta boite et tu touches un salaire. 
Bon par contre souvent la rémunération est souvent assez faible, mais tout depend de ce que tu negocies. Quand j'etais en alternance je touchais 900€/mois.
C'est probablement la premiere piste que tu devrais explorer, une fois que tu auras mis un pied dans tout ce bordel et que tu commences a monter en competence la ca sera p'tet plus interessant.

----------


## Captain_Cowkill

> Fais gaffe t'as mis tout mon post en réponse ça va faire des mécontents.
> 
> Concernant ton expérience passé qui ne serait pas pertinente, honnêtement ne la mets pas trop de côté pour autant. Quand une équipe recrute quelqu'un, une grosse partie de l'échange c'est d'avoir un collègue agréable qui veut apprendre et échanger, essaye de trouver des liens avec ce que tu veux faire désormais. Ne serait ce qu'expliquer que ton changement de voie est un véritable attrait pour le monde du développement, bah ça donne envie. Travailler avec un nouveau hyper enthousiaste c'est mieux qu'un vieux de la vieille qui n'y trouve pas de motivation.
> 
> Ensuite ton expérience actuelle concernant le C++ a de la valeur même si tu débutes, je pense que tu ne devrais pas hésiter à échanger un maximum, notamment sur le forum, ça te permettra de trier entre les on-dit/théorie idéalisée et la réalité.
> 
> C'est assez courant sur internet, d'ailleurs y'avait un article plus ou moins à ce sujet sur ce très bon site dédié au C++ (dispo en anglais ou en allemand): https://www.modernescpp.com/index.ph...ules-and-myths


Oui pardon, j'ai corrigé la quote.
Quand je parlais d'expérience passée non pertinente, c'était surtout relatif au fait que je viens d'un monde éloigné du dév. Parce que la motivation, j'en manque pas. Enfin aujourd'hui si, mais c'est plus un coup de mou.





> C'est justement tout l'interet de l'alternance, ton ecole est payee par ta boite et tu touches un salaire. 
> Bon par contre souvent la rémunération est souvent assez faible, mais tout depend de ce que tu negocies. Quand j'etais en alternance je touchais 900€/mois.
> C'est probablement la premiere piste que tu devrais explorer, une fois que tu auras mis un pied dans tout ce bordel et que tu commences a monter en competence la ca sera p'tet plus interessant.


Même à 900€ par mois je sais pas si on pourrait s'en sortir avec madame (qui ne gagne pas des masses non plus). Je ne veux pas mettre notre équilibre économique fragile dans le mal (même si c'est une super bonne idée, ça me permettrai d'être vite dans le bain).

----------


## Orhin

> C'est ancré comme frontend dans ma tête maintenant haha, jamais vu de  gros trucs en Node


Pour le coup moi c'est plutôt l'inverse, Node j'ai toujours observé ça comme du backend (sauf pour faire une petite interface vite fait d’administration par exemple).
Les gros projets en front, dans l'univers Javascript c'est Angular ou React.




> Economiquement, pas trop. Je me vois mal payer une école, ne plus toucher de salaire et payer ma baraque


En alternance tu seras payé et tu ne paieras pas l'école.  :;): 

Si t'as plus de 26ans (ce qui me parait probable vu ton parcours  ::P: ) tu pars sur 100% du SMIC.

----------


## Kamasa

> Pour le coup moi c'est plutôt l'inverse, Node j'ai toujours observé ça comme du backend (sauf pour faire une petite interface vite fait d’administration par exemple).
> Les gros projets en front, dans l'univers Javascript c'est Angular ou React.


Node est définitivement à ranger dans la catégorie back-end puisqu'il ne tourne pas sur la machine de l'utilisateur.
Si tu fais du javascript qui a pour but de tourner dans la page du navigateur de ton utilisateur c'est du front-end, mais si tu fais du javascript pour traiter les appels webservices de clients c'est du back-end (c'est là qu'est Node.js)

----------


## deathdigger

> Bah y'a plein de devs sur le topic mon cher Captain, on peut te conseiller mieux que ces empafés.
> 
> C'est une question très large mais y'a rien de trop difficile concernant la réponse.
> ...


Quelques petites nuances à apporter : Tu peux passer de l'un à l'autre plus ou moins facilement selon ton métier. Perso, j'ai commencé à faire des trucs en PHP dégueulasse (des espèces de mini-sites pour un intranet), puis fait des applications plus poussées, maintenant je bosse sur un ERP où je m'occupe autant des flux de documents que de l'informatique embarquée (Windows Mobile et j'espère bientôt Androïd), des flux d'usine, etc.
Y'a 50 000 langages existants, mais tu passes généralement de l'un à l'autre sans trop de difficultés.

----------


## Captain_Cowkill

> Quelques petites nuances à apporter : Tu peux passer de l'un à l'autre plus ou moins facilement selon ton métier. Perso, j'ai commencé à faire des trucs en PHP dégueulasse (des espèces de mini-sites pour un intranet), puis fait des applications plus poussées, maintenant je bosse sur un ERP où je m'occupe autant des flux de documents que de l'informatique embarquée (Windows Mobile et j'espère bientôt Androïd), des flux d'usine, etc.
> Y'a 50 000 langages existants, mais tu passes généralement de l'un à l'autre sans trop de difficultés.


Ça c'est un des points qui m'attirent. On apprend de nouvelles choses, on jongle entre toutes ces connaissances quand il faut. Ça ne stagne pas.

----------


## vv221

> @Captain_Cowkill Tu as regardé les écoles genre Simplon ?





> Ah non, je ne connaissais pas Simplon. Merci pour le tip !


Je suis sorti d’une de leurs formations il y a quelques années. C’est naze.

En fait ils se contentent de foutre leur logo sur des formations assurées par d’autres, en contrepartie de quoi ils daignent partager un peu de "matériel pédagogique" (a.k.a. 2~3 dépôts GitHub qu’ils ont eux-même piqués à d’autres formateurs). Le tout facturé une somme déraisonnable.

À éviter comme la peste. J’ai eu la chance de bien m’en sortir, en particulier grâce à un formateur qui s’est donné à fond, mais c’est _malgré_ Simplon, sûrement pas grâce à eux.

----------


## Captain_Cowkill

> Je suis sorti d’une de leurs formations il y a quelques années. C’est naze.
> 
> En fait ils se contentent de foutre leur logo sur des formations assurées par d’autres, en contrepartie de quoi ils daignent partager un peu de "matériel pédagogique" (a.k.a. 2~3 dépôts GitHub qu’ils ont eux-même piqués à d’autres formateurs). Le tout facturé une somme déraisonnable.
> 
> À éviter comme la peste. J’ai eu la chance de bien m’en sortir, en particulier grâce à un formateur qui s’est donné à fond, mais c’est _malgré_ Simplon, sûrement pas grâce à eux.


Par curiosité, c'est quoi ton parcours (en MP si tu veux) ?

----------


## deathdigger

Faudrait se créer une école virtuelle des canards. Trouver un truc qui permet de donner des cours en ligne en direct (genre Twitch), où des élèves posent des questions et où un canard (Expert  :Cigare: ) fait le cours. Et après on diffuserait la vidéo via Youtube/Peertube/whatever pour les retardataires.

----------


## Charmide

> ...


Joli post! 
Je trouve ça drôle que malgré tes qualités de résumé, si j'avais écris un pavé pareil j'aurais pas mis les mêmes trucs/examples dedans, c'est une belle preuve de la dimension du domaine. 




> Ça c'est un des points qui m'attirent. On apprend de nouvelles choses, on jongle entre toutes ces connaissances quand il faut. Ça ne stagne pas.


On a toujours les mêmes problèmes par contre  ::ninja::  

Si t'as pas trop d'idée précise en tête sur "où commencer" Cowkill et que ton objectif c'est surtout d'avoir un job à plein temps là-dedans le plus vite possible histoire d'y mettre les pieds, je mets toujours mon pognon sur 2 endroits. Qui s'avèrent être ceux que je connais le mieux (startups, produits web, saas, etc), mais j'espère que c'est pas la seule raison. 

- Le développement web d'abord. C'est la sous-industrie la plus jeune, donc encore la fête du slip, plein d'autodidactes et des formations qui rattrapent le retard pas très vite, beaucoup de demande des entreprises pour peu d'offre sur le marché du travail, etc. Je pense que "structurellement" c'est le truc où t'as le plus de chances de "percer". 
- En terme de type de boîtes, je viserais également des toutes petites structures qui se lancent. Elles auront plus de latitude à donner leur chance à des profils moins académiques / plus autodidactes, et des "potentiels". On m'a bien bombardé directeur technique à 22 ans il fut un temps, j'ai renvoyé l'ascenseur à pas mal d'occasions depuis, je pense pas qu'on m'aurait laissé faire si j'avais été à la BNP (avec 12 fois plus de budget recrutement aussi, hem)

Ca m'a jamais dérangé de donner leur chance à licences de chimie, de socio ou autre école de commerce, et je sais que je suis pas si seul que ça. Si t'es prêt à bosser n'importe où, je pense que tu peux optimiser pour ça, et trouver quelqu'un qui te prendra sur la base de cours en ligne/exemples de code que t'as développé (genre un site web perso, un clone de ebay, et je ne sais quoi)/le feeling d'un entretien/quelques exercices techniques sur place. 

Lecran d'après, et dans le genre de simplon (que je connais pas), y'a beaucoup de "bootcamps" qui promettent de te former au dev web en quelques semaines. Celui dont j'entends le plus parlé c'est le wagon, je ne saurais pas dire ce que ça vaut, mais en creusant tu dois pouvoir te faire une idée de ces trucs et de leurs concurrents, toujours plein d'histoire d'horreur comme vv221. 
Ce que je sais c'est qu'un mec pas trop con et motivé qui rentre dans un truc de ce genre, bosse les sujets et explore au-delà, en sortira avec les compétences nécessaires pour avoir un poste de dev junior tranquillement, sûrement un peu plus vite qu'en solo (mais pas trop). Est-ce que c'est suffisant pour convaincre quelqu'un de te laisser une chance? Des RH et des plots te regarderont sûrement de haut, mais en général c'est pas ceux qui ont les jobs les plus intéressants.

----------


## vv221

> Par curiosité, c'est quoi ton parcours (en MP si tu veux) ?


C’est pas trop confidentiel, on peut même le trouver sur le rézosocial des startupeurs disruptifs  ::ninja:: 

Je commence comme beaucoup par de la bidouille dans mon coin autour de mes 15~16 ans, avec passage sous Linux parce que le Logiciel Libre ça a quand même l’air sympa. Un bac S à 18 ans, suivi par quelques tentatives d’études abandonnées rapidement (math sup’, fac de math, d’info, de socio, de psycho…). Une fois que je me rends compte que les études c’est chiant, je passe par le traditionnel tour du monde chez les hippies, à couper des arbres au Canada, cueillir des avocats en Australie et ramasser des noix de coco en Inde (authentique).

De retour en France, une vague succession de boulots court terme (dont facteur), suivi d’un ferme projet de bosser dans l’informatique parce que, quand même, on n’y porte pas beaucoup de charges lourdes. Comme à ce moment j’avais déjà une bonne demi-douzaine d’années d’expérience en amateur dans le développement et surtout l’administration système, je cherchais surtout à trouver un diplôme qui m’ouvre la possibilité des entretiens d’embauche.

C’est là que le trouve, via le CCAS (organisme chargé de "m’accompagner" et surtout m’accorder mon RSA), une formation rapide de développement Web. Formation que je suis sur 8 mois, durant lesquels je n’apprends pas forcément grand chose de neuf, mais je m’accroche en pensant à la certification au bout de l’année. Une fois cette certification en poche, je postule comme développeur Web dans des boîtes (vu que ça correspond à mon diplôme) pour me faire embaucher à chaque fois comme administrateur système (vu que ça correspond à mes compétences).

Au bout de quelques années à être sous-payé dans ma dernière boîte, je négocie une rupture conventionnelle et m’offre deux ans de chômage à bosser exclusivement sur du logiciel libre, sans personne qui me dise sur quoi travailler ni comment le faire… Il m’en reste encore plus d’une année complète avant de devoir retourner chercher quelque chose de plus rémunérateur  :B):

----------


## Captain_Cowkill

> Joli post! 
> Je trouve ça drôle que malgré tes qualités de résumé, si j'avais écris un pavé pareil j'aurais pas mis les mêmes trucs/examples dedans, c'est une belle preuve de la dimension du domaine. 
> 
> 
> 
> On a toujours les mêmes problèmes par contre  
> 
> Si t'as pas trop d'idée précise en tête sur "où commencer" Cowkill et que ton objectif c'est surtout d'avoir un job à plein temps là-dedans le plus vite possible histoire d'y mettre les pieds, je mets toujours mon pognon sur 2 endroits. Qui s'avèrent être ceux que je connais le mieux (startups, produits web, saas, etc), mais j'espère que c'est pas la seule raison. 
> 
> ...


Oui, je trouve énormément de formations et demandes pour développeur web. Mais c'est pas trop le langage que je cherchais à faire. On peut dévier après ? Parce que si c'est une bonne porte d'entrée, je suis prêt à apprendre.

- - - Mise à jour - - -




> C’est pas trop confidentiel, on peut même le trouver sur le rézosocial des startupeurs disruptifs 
> 
> Je commence comme beaucoup par de la bidouille dans mon coin autour de mes 15~16 ans, avec passage sous Linux parce que le Logiciel Libre ça a quand même l’air sympa. Un bac S à 18 ans, suivi par quelques tentatives d’études abandonnées rapidement (math sup’, fac de math, d’info, de socio, de psycho…). Une fois que je me rends compte que les études c’est chiant, je passe par le traditionnel tour du monde chez les hippies, à couper des arbres au Canada, cueillir des avocats en Australie et ramasser des noix de coco en Inde (authentique).
> 
> De retour en France, une vague succession de boulots court terme (dont facteur), suivi d’un ferme projet de bosser dans l’informatique parce que, quand même, on n’y porte pas beaucoup de charges lourdes. Comme à ce moment j’avais déjà une bonne demi-douzaine d’années d’expérience en amateur dans le développement et surtout l’administration système, je cherchais surtout à trouver un diplôme qui m’ouvre la possibilité des entretiens d’embauche.
> 
> C’est là que le trouve, via le CCAS (organisme chargé de "m’accompagner" et surtout m’accorder mon RSA), une formation rapide de développement Web. Formation que je suis sur 8 mois, durant lesquels je n’apprends pas forcément grand chose de neuf, mais je m’accroche en pensant à la certification au bout de l’année. Une fois cette certification en poche, je postule comme développeur Web dans des boîtes (vu que ça correspond à mon diplôme) pour me faire embaucher à chaque fois comme administrateur système (vu que ça correspond à mes compétences).
> 
> Au bout de quelques années à être sous-payé dans ma dernière boîte, je négocie une rupture conventionnelle et m’offre deux ans de chômage à bosser exclusivement sur du logiciel libre, sans personne qui me dise sur quoi travailler ni comment le faire… Il m’en reste encore plus d’une année complète avant de devoir retourner chercher quelque chose de plus rémunérateur


Ah oui, c'est assez atypique  :^_^: 
Je vais essayer un truc plus classique, j'ai déjà 35 piges...

----------


## Charmide

> Oui, je trouve énormément de formations et demandes pour développeur web. Mais c'est pas trop le langage que je cherchais à faire. On peut dévier après ? Parce que si c'est une bonne porte d'entrée, je suis prêt à apprendre.


Ouais, en faisant un peu attention et en étant tactique dans tes choix de boîte/projet je pense que tu ne seras pas coincé. 
En général quand y'a une interface web, y'a un backend derrière, des problématiques de traitement de données, d'architecture et de passage à l'échelle, etc. Ce qui est inclut dans "dev web" est à géométrie variable (ça peut être copier-coller des wordpress pour l'épicier du coin, qui est peut-être spontanément ce à quoi les gens dans ce topic pensent, ce qui est quand même moins intéressant et déviable après). T'auras pas de mal à trouver des postes où le front-end et l'interface, écrire du HTML/JS, n'est pas la majorité du taf, même qu'à ma grande tristesse beaucoup voient ça comme une corvée. 
Ditto pour les petites boîtes, un autre truc que j'y aime bien c'est qu'on y est tous polyvalent et touche à tout, avec le mythique "dev full-stack". A l'extrême t'es la seule personne technique donc t'as intérêt à vouloir tout faire/apprendre. Pas de sous-sous-département ou de "ah moi je m'occupe que de cette micro-partie du bouzin, démerde toi". 

C'est assez agnostique en termes de langage aussi. Ce qui tourne dans le navigateur est assez contraint (et encore, y'a 722 façons d'écrire du JS ou de générer du HTML), ce qui est derrière peut être tout et n'importe quoi. Après, si t'as une idée plus précise de ce que tu veux faire, c'est un meilleur point de départ. Je pense que tu gagneras plus à penser en termes de domaines/de postes que de langages. L'un entrainant l'autre. Même pour strictement du web j'aurais plein de façons de conseiller un tutorial ou une approche selon la cible.

----------


## Captain_Cowkill

Bah disons comme "idée précise" pour le moment :
- faire du dév
- j'ai bien accroché au C++
- chercher un point d'entrée dans cet univers hyper vaste et varié (je suis un peu paumé pour le moment).

C'est pour ça que je demande un peu partout l'expérience de chacun.

----------


## rOut

> Au bout de quelques années à être sous-payé dans ma dernière boîte, je négocie une rupture conventionnelle et m’offre deux ans de chômage à bosser exclusivement sur du logiciel libre, sans personne qui me dise sur quoi travailler ni comment le faire… Il m’en reste encore plus d’une année complète avant de devoir retourner chercher quelque chose de plus rémunérateur


Le mieux après c'est de trouver un boulot surpayé pour bosser exclusivement sur du logiciel libre, sans personne qui te dise sur quoi travailler ni comment le faire  :Cigare: .

----------


## Charmide

> Bah disons comme "idée précise" pour le moment :
> - faire du dév
> - j'ai bien accroché au C++
> - chercher un point d'entrée dans cet univers hyper vaste et varié (je suis un peu paumé pour le moment).
> 
> C'est pour ça que je demande un peu partout l'expérience de chacun.


Heureusement c'est de ça qu'on aime le plus parler  :^_^: 

Du coup ouais je te dirais bien de tester un tuto React ou Vue et de voir si ça te plait (ça sera plus intéressant que "les bases du HTML 101" - c'est comment faire l'interface de netflix ou airbnb ou gmail plutôt que des trucs statiques), si t'accroches autant au web je pense que ça sera plus facile de trouver, sinon ça sera toujours ça de pris pour la culture et faire classe en entretien. 

Je suis curieux d'entendre l'expérience de chacun sur le côté "c'est quoi le minimum qu'il faut pour décrocher un job", de façon totalement indépendante et déconnectée du côté "comment apprendre", et partant du principe qu'on a acquis les bases/connaissances nécessaires. Genre est-ce que vos boîtes prennent des autodidactes complets, des gens en reconversion, des gens avec une formation minimale type bootcamp, etc; et si oui sur quelles bases.

----------


## deathdigger

> Bah disons comme "idée précise" pour le moment :
> - faire du dév
> - j'ai bien accroché au C++
> - chercher un point d'entrée dans cet univers hyper vaste et varié (je suis un peu paumé pour le moment).
> 
> C'est pour ça que je demande un peu partout l'expérience de chacun.


Alors, par contre...
Tous les langages sont apprenables, mais le C++, c'est réservé aux barbus  ::ninja:: 
C'est sur ce langage que tu rencontreras les mecs les plus calés dans le développement, du coup, des "concurrents" potentiellement très forts. Jette un oeil à Java et/ou C#, c'est de l'objet, c'est simple, et y'a plein de ressources et de taf  :;):

----------


## Orhin

> ça peut être copier-coller des wordpress pour l'épicier du coin, qui est peut-être spontanément ce à quoi les gens dans ce topic pensent


Je ne pense pas, on est quand même quelques un à toucher Angular/React/Vue.js/Symphony, donc normalement on voit un peu à quoi ça correspond.
À noter aussi que l'expérience Angular ou React peut facilement permettre de faire du développement d'applications mobiles après en partant sur Ionic ou React Native.  :;): 




> Du coup ouais je te dirais bien de tester un tuto React ou Vue et de  voir si ça te plait (ça sera plus intéressant que "les bases du HTML  101" - c'est comment faire l'interface de netflix ou airbnb ou gmail  plutôt que des trucs statiques), si t'accroches autant au web je pense  que ça sera plus facile de trouver, sinon ça sera toujours ça de pris  pour la culture et faire classe en entretien.


Je plussoie.

----------


## Kamikaze

Ouais apprendre brièvement des trucs web ce n'est JAMAIS perdu car très souvent c'est le mode de partage favorisé. Personne n'a besoin d'installer quoique ce soit vu que tout le monde a un browser, suffit d'héberger ça quelque part, chopper un beau truc en css/html et roulez jeunesse, t'es le roi du pétrole. On en retrouve partout, même dans de l'embarqué, genre la bête page de configuration de votre Routeur à la maison, c'est du web, etc.

----------


## Captain_Cowkill

> Alors, par contre...
> Tous les langages sont apprenables, mais le C++, c'est réservé aux barbus 
> C'est sur ce langage que tu rencontreras les mecs les plus calés dans le développement, du coup, des "concurrents" potentiellement très forts. Jette un oeil à Java et/ou C#, c'est de l'objet, c'est simple, et y'a plein de ressources et de taf


Oui j'ai vu ça, mais disons que c'est le seul langage sur lequel je me suis penché au départ parce qu'un pote m'en a parlé.
Mais je ne veux pas mettre la charrue avant les meuh évidemment  ::P: 

En tout cas merci à tous pour vos conseils/expériences.

De ce que j'en retire c'est soit je me lance dans le dév web qui est apparemment plus accessible histoire de mettre un pied dedans, soit je persiste dans le dév C/C++/Python/trucmuch mais là ça demande quand même une expérience et même des années de formation (et je sais pas si je peux vraiment me le permettre vu que j'ai déjà 35 piges).

----------


## Orhin

> On en retrouve partout, même dans de l'embarqué, genre la bête page de configuration de votre Routeur à la maison, c'est du web, etc.


Yep, perso j'ai déjà bossé sur un projet de ce type.
En gros c'est un boitier qui se connecte à plein de capteurs externes pour faire de la remontée d'information ou l'envoi de commandes. Le hardware est maison, ça tourne avec une distri linux custom et ça expose une API Rest pour communiquer avec l'extérieur.
Mais y'a aussi une interface de contrôle développée en Angular avec des tableaux/graphes/formulaires, le tout servie par un nginx.

Un autre exemple que j'aime bien : pas mal de gros jeux ont une interface utilisateur basée sur des technos web, genre Battlefield c'est du React.  ::P:

----------


## vv221

> Le mieux après c'est de trouver un boulot surpayé pour bosser exclusivement sur du logiciel libre, sans personne qui te dise sur quoi travailler ni comment le faire .


Pfff, frimeur  ::(: 

…

Ça recrutera par chez toi vers janvier-février 2022 ?

----------


## Charmide

> En tout cas merci à tous pour vos conseils/expériences.
> 
> De ce que j'en retire c'est soit je me lance dans le dév web qui est apparemment plus accessible histoire de mettre un pied dedans, soit je persiste dans le dév C/C++/Python/trucmuch mais là ça demande quand même une expérience et même des années de formation (et je sais pas si je peux vraiment me le permettre vu que j'ai déjà 35 piges).


Dans l'idée caricaturale ouais. J'en rajoute une couche: Python c'est très populaire pour faire des backends web aussi (Django/Flask sont deux piliers en la matière), c'est un langage relativement "neutre" et populaire dans beaucoup de domaine. C/C++ c'est plus spécialisé, en général si tu descends aussi bas niveau c'est que t'as des enjeux importants de performance (e.g. faire tourner cyberpunk à plus de 15fps en ville) ou un environnement contraignant. Parce que c'est spécialisé j'aurais tendance à dire que effectivement y'a une barrière à l'entrée plus élevé. 

(L'échange classique que t'auras partout c'est plus ou moins d'abstraction - moins d'abstraction === plus de contrôle === plus de boulot et de réinvention de la roue, C/C++ est à l'extrême de ce côté là, plus d'abstraction === plus de libraries et de machins === moins de contrôle === moins de boulot pour créer des trucs, de ce côté là des choses comme Java et ses sous-ensembles. Les industries/domaines se retrouvant quelque part sur l'échelle là où c'est logique pour eux.)

- - - Mise à jour - - -




> Yep, perso j'ai déjà bossé sur un projet de ce type.
> En gros c'est un boitier qui se connecte à plein de capteurs externes pour faire de la remontée d'information ou l'envoi de commandes. Le hardware est maison, ça tourne avec une distri linux custom et ça expose une API Rest pour communiquer avec l'extérieur.
> Mais y'a aussi une interface de contrôle développée en Angular avec des tableaux/graphes/formulaires, le tout servie par un nginx.
> 
> Un autre exemple que j'aime bien : pas mal de gros jeux ont une interface utilisateur basée sur des technos web, genre Battlefield c'est du React.


Heureusement qu'on a plus les launchers en flash  ::ninja::

----------


## rOut

> Pfff, frimeur 
> 
> …
> 
> Ça recrutera par chez toi vers janvier-février 2022 ?


C'est possible vu la tendance, mais c'est loin et aussi bien ça peut partir en couille avec le procès Oracle vs Google. Après c'est  pas la seule boite à faire de l'open-source et y'a une bonne dynamique ces derniers temps je trouve.

----------


## gros_bidule

Après, si c'est l'opensource qui te bottes, sans forcément aller jusqu'au logiciel libre, il ne faut pas avoir peur de toquer à la porte de boites un peu célèbres (mais pas que).
Par exemple si l'on parle de Pivotal (Spring Framework), Gradle, RedHat, Google, etc, ça peut faire peur, on a facilement l'impression qu'il faut être un cador (on a vite en tête une ou deux "célébrités", en oubliant la masse un peu plus anonyme) pour postuler chez eux et avoir un poste intéressant. Sauf que non en fait, ils sont plus accessibles qu'on ne l'imagine. C'est plein de gens comme nous quoi, et le taff peut être épanouissant.

----------


## Captain_Cowkill

> Dans l'idée caricaturale ouais. J'en rajoute une couche: Python c'est très populaire pour faire des backends web aussi (Django/Flask sont deux piliers en la matière), c'est un langage relativement "neutre" et populaire dans beaucoup de domaine. C/C++ c'est plus spécialisé, en général si tu descends aussi bas niveau c'est que t'as des enjeux importants de performance (e.g. faire tourner cyberpunk à plus de 15fps en ville) ou un environnement contraignant. Parce que c'est spécialisé j'aurais tendance à dire que effectivement y'a une barrière à l'entrée plus élevé. 
> 
> (L'échange classique que t'auras partout c'est plus ou moins d'abstraction - moins d'abstraction === plus de contrôle === plus de boulot et de réinvention de la roue, C/C++ est à l'extrême de ce côté là, plus d'abstraction === plus de libraries et de machins === moins de contrôle === moins de boulot pour créer des trucs, de ce côté là des choses comme Java et ses sous-ensembles. Les industries/domaines se retrouvant quelque part sur l'échelle là où c'est logique pour eux.)


Désolé, j'ai pas trop compris ton dernier paragraphe  :^_^:

----------


## Charmide

Moi non plus en relisant, ça doit pas être une grande perte  ::ninja::

----------


## Nilsou

> Dans l'idée caricaturale ouais. J'en rajoute une couche: Python c'est très populaire pour faire des backends web aussi (Django/Flask sont deux piliers en la matière), c'est un langage relativement "neutre" et populaire dans beaucoup de domaine. C/C++ c'est plus spécialisé, en général si tu descends aussi bas niveau c'est que t'as des enjeux importants de performance (e.g. faire tourner cyberpunk à plus de 15fps en ville) ou un environnement contraignant. Parce que c'est spécialisé j'aurais tendance à dire que effectivement y'a une barrière à l'entrée plus élevé.


Tu exagère grandement. Je ne sais pas dans quel domaine tu bosse, mais en moyenne C/C++ c'est dans le top 5 des langages les plus demandés en entreprise. Et dans ce même top 5 tu a souvent Java ou C#, qui en sont lourdement inspiré. Donc tu te retrouve avec des top 5 ou 3/5 des langages les plus demandés c'est quand même des proches parents du C. Et le reste des tech, en dehors du Python, c'est du web.

Dire que C/C++ c'est ultra spécialisé c'est nimp.




> (L'échange classique que t'auras partout c'est plus ou moins d'abstraction - moins d'abstraction === plus de contrôle === plus de boulot et de réinvention de la roue, C/C++ est à l'extrême de ce côté là, plus d'abstraction === plus de libraries et de machins === moins de contrôle === moins de boulot pour créer des trucs, de ce côté là des choses comme Java et ses sous-ensembles. Les industries/domaines se retrouvant quelque part sur l'échelle là où c'est logique pour eux.)


Là aussi c'est nimp, dire que *C/C++* c'est _« plus d'abstraction === plus de libraries et de machins === moins de contrôle ===  »_ alors qu'il s'agit d'un des langages ou tu peut le plus tripatouiller le détail du détail de ce que fait chaque fonction, c'est un peu nimp aussi, amha.
Surtout que tout les autres langages ou presque sont plus abstrait ...

----------


## Orhin

> Tu exagère grandement. Je ne sais pas dans quel domaine tu bosse, mais en moyenne C/C++ c'est dans le top 5 des langages les plus demandés en entreprise.


Parler de top 5 ça n'a pas de sens, il faut regarder la part relative des langages.
Si les 2 premiers de ton top récupèrent 90% des projets, ça lui fait une belle jambe au C++ d'être dans le top 5.




> Donc tu te retrouve avec des top 5 ou 3/5 des langages les plus demandés c'est quand même des proches parents du C.


Nawak.
Java ou C# ne sont absolument pas des proches parents du C (d'un point de vue utilisation au quotidien hein, on s'en fout qu'historiquement il y ait des liens).




> Dire que C/C++ c'est ultra spécialisé c'est nimp.


C'est pourtant la réalité du terrain.
Je suis désolé mais t'as l'air d'avoir une vision ultra biaisée de ce qui se passe vraiment dans les entreprises qui font de l'informatique.

Le C/C++ est très utilisé dans certains domaines ayant de fortes contraintes (bas niveau, traitement temps réel dans la communication, grosse simulation, etc) par contre dans les autres domaines ce sont des langages quasi absents.




> Là aussi c'est nimp, dire que *C/C++* c'est _« plus d'abstraction === plus de libraries et de machins === moins de contrôle ===  »_ alors qu'il s'agit d'un des langages ou tu peut le plus tripatouiller le détail du détail de ce que fait chaque fonction, c'est un peu nimp aussi, amha.
> Surtout que tout les autres langages ou presque sont plus abstrait ...


T'as compris exactement l'inverse de ce qu'il voulait dire hein.
Il dit justement que C/C++ c'est moins d'abstraction et plus de contrôle.

Bon ok son paragraphe était super mal rédigé par contre.  ::ninja::

----------


## Charmide

> Tu exagère grandement. Je ne sais pas dans quel domaine tu bosse, mais en moyenne C/C++ c'est dans le top 5 des langages les plus demandés en entreprise. Et dans ce même top 5 tu a souvent Java ou C#, qui en sont lourdement inspiré. Donc tu te retrouve avec des top 5 ou 3/5 des langages les plus demandés c'est quand même des proches parents du C. Et le reste des tech, en dehors du Python, c'est du web.
> 
> Dire que C/C++ c'est ultra spécialisé c'est nimp


J'ai bien dit "caricaturalement" et j'ai jamais dit que c'était un truc ultra confidentiel qui sert à rien ou je ne sais quoi que tu t'imagines. T'es sérieux quand t'utilises Java comme argument sinon? A ce compte là tu peux mettre tous les langages impératifs dans le même panier je pense. 




> Là aussi c'est nimp, dire que *C/C++* c'est _« plus d'abstraction === plus de libraries et de machins === moins de contrôle ===  »_ alors qu'il s'agit d'un des langages ou tu peut le plus tripatouiller le détail du détail de ce que fait chaque fonction, c'est un peu nimp aussi, amha.
> Surtout que tout les autres langages ou presque sont plus abstrait ...


C'est littéralement ce que j'ai écris nilsounet, mais c'est pas grave. 

Mon prochain post ça sera 1+1=2, j'attends avec impatience ta réponse pour expliquer que c'est n'imp.

EDIT: zut grillé, mais c'est bien ça me rassure :x

----------


## Cwningen

C++ === moins d'abstraction ?  ::huh:: 

Et 1+1=10 tout le monde le sait.

----------


## TwinBis

> C++ === moins d'abstraction ?


Que Java et ses copains, oui.
Il faut lire son message en entier (même si la forme pique un peu).

C++ ça reste considéré comme un langage bas niveau dans l'informatique "au global" (pour ce que ça vaut).

----------


## Cwningen

Qu'est-ce qui manque au C++ ? C'est quoi vos critères pour ce manichéisme bas/haut niveau ? Ça fait dix ans que j'ai pas touché au Java, et j'ai cru comprendre que ça a beaucoup évolué depuis, mais à l'époque ça me semblait pas permettre tellement plus d'abstractions.

----------


## TwinBis

C'est pas une question de manichéisme, c'est une question de distance au hardware par ajoût de couches d'abstraction successives.
Et haut/bas niveau ce n'est pas un jugement de valeur, ce sont des outils différents pour des usages différents. Il faut arrêter de placer sa fierté dans le technos que vous utilisez.

----------


## Cwningen

C'est pas un problème de valeur ou de fierté, c'est un problème de classer les langages en deux catégories que je ne comprends pas.

----------


## TwinBis

http://icarus.cs.weber.edu/~dab/cs14.../programs.html

----------


## Orhin

> C'est pas un problème de valeur ou de fierté, c'est un problème de classer les langages en deux catégories que je ne comprends pas.


Mais il n'y a pas 2 catégories, le classement bas/haut niveau c'est toujours relativement à un autre langage.
À la limite tu peux le représenter sauf forme d'un axe.

----------


## rOut

Franchement le C++ moderne c'est quand même vachement haut niveau. Ça plane même un petit peu trop haut à mon avis (pour une utilisation professionnelle on va dire).

----------


## Cwningen

> http://icarus.cs.weber.edu/~dab/cs14.../programs.html


Ce texte classe bien le C++ dans les langages de _plus_ haut niveau (tous les langages cités sont de haut niveau d'après lui). La notion du bas niveau est présentée comme la possibilité d'accès au matériel, rien à voir avec les abstractions possibles.

Le C++ permet d’accéder au matériel (si tu en as envie) et, _en même temps_, d'utiliser des abstractions (si tu en as envie). Je ne comprends pas comment on peut le mettre à l'extrémité "moins d'abstraction" de cet axe.

----------


## Charmide

:tired: 

Alors oui, on peut rajouter 28 couches de frameworks, librairies et abstraction dans n'importe quel langage, tout comme en règle générale on peut se démerder pour en avoir le minimum vital dans n'importe quel contexte. Bien pour ça que les guerres de clocher entre langages de programmation m'ont toujours fait bien marrer. Il "manque" rien au C++, c'est turing complet et y'a un écosystème, regarde juste dans quel domaine et pour faire quoi c'est utilisé. 

Faut se rappeler que j'essayais de donner des repères à un mec qui se lance tout juste et qui n'en a pas. Tu peux toujours trouver des exceptions, incroyablement la vie est plus compliqué que quand tu la projettes sur un axe, c'est pas pour ça que les heuritstiques sont inutiles. Tu peux toujours avoir un référentiel différent que celui de "l'industrie", ce truc flou et vague dans lequel on mélange 29745 domaines différents, et trouver que le C++ c'est déjà trop haut niveau, tout dépend de ce que tu fais. 
En attendant, si tu regardes à l'échelle de l'industrie et de ce que fait le dev moyen en 2020, ça tombe clairement dans le top 10/15% de la distribution dans ce domaine. Et ça me semble utile de se rendre compte en tant que noob que y'a des gens qui ont un accès direct au matériel parce qu'ils en ont besoin, et d'autres qui branchent 23 librairies dans une VM de VM de VM pour faire communiquer 2 ERPs sans avoir jamais appris ce que c'est qu'un pointeur.

----------


## Nilsou

> Parler de top 5 ça n'a pas de sens, il faut regarder la part relative des langages.
> Si les 2 premiers de ton top récupèrent 90% des projets, ça lui fait une belle jambe au C++ d'être dans le top 5.


Bah le C est le langage le plus utilisé dans les entreprises (en 2016 du moins) d'après l'IEEE. Ça a l'air d'être une étude globale sur le monde.  
https://www.inteam.fr/blog/langages-...s-entreprises/

Même aujourd'hui le C reste l'un des premiers dans les classement IEEE Spectrum : https://spectrum.ieee.org/static/int...languages-2020

Sur les offres d'emploi en 2019 : le C++ c'est 36000 emploi, à peu prés autant que javascript et derrière Python et Java (qui sont dans les 68000). Là non plus on est loin d'être sur un petit langage spécialisé.  (source) et on est loin de ton _« premier qui fait 90% des projets »_.

Chez developez.net leur classement sur leurs offres d'emploi sur leur propre portail en France donne le C+C++ à environ 12% des offres. Genre, légèrement devant Python, C# et PHP quoi ... 
https://emploi.developpez.com/actu/3...s-mieux-payes/ et avec seul deux langages qui recrutent bien plus : le Java et le Javascript. 

Et c'est sans compter le C#, qui, si si, est un proche parent du C++.

----------


## Charmide

"10/15%", facile  ::trollface::

----------


## Tramb

> Le C++ permet d’accéder au matériel (si tu en as envie)


Grâce à sa feature de "Ubiquitous Undefined Behaviour"  ::):

----------


## Nilsou

Bon question pratique sinon,
Je refait en ce moment, justement, un cours de C++.

Je me demande si il n'y a pas eu une évolution du langage dans C++17 ou dans la version 2020 sur l'héritage et les surcharge, mais impossible de trouver la réponse. 

En gros, en C++, dans mes connaissances traditionnelle, la surcharge ne fonctionne pas entre classe mère et classe fille (comprendre : une classe mère qui contient une méthode void foo(int a) et une classe fille contenant une méthode void foo(float b) si j’appelle foo(int) sur une instance de la classe fille, ça ne m’appellera pas la variante de la classe mère, qui correspond, ça me jettera à la compilation ou ça me fera une conversion implicite.

J'ai toujours trouvé cette (absence de) mécanique débile. Je me demandais si ça avait été modifié en C++17 et postérieur ? 

J'ai fouillé, sans rien trouver, mais j'ai peut-être manqué un truc ?  ::unsure::

----------


## Mr Slurp

> Bon question pratique sinon,
> Je refait en ce moment, justement, un cours de C++.
> 
> Je me demande si il n'y a pas eu une évolution du langage dans C++17 ou dans la version 2020 sur l'héritage et les surcharge, mais impossible de trouver la réponse. 
> 
> En gros, en C++, dans mes connaissances traditionnelle, la surcharge ne fonctionne pas entre classe mère et classe fille (comprendre : une classe mère qui contient une méthode void foo(int a) et une classe fille contenant une méthode void foo(float b) si j’appelle foo(int) sur une instance de la classe fille, ça ne m’appellera pas la variante de la classe mère, qui correspond, ça me jettera à la compilation ou ça me fera une conversion implicite.


Non, ça le fera pas. Une surcharge n'est pas une méthode virtuelle, et une virtuelle à forcément la même signature entre classe mère et fille. Ce que du décrit serait une sorte de mix bâtard des deux que je ne vois pas possible sans être une grosse source de problème.

----------


## Kamikaze

```
#include <iostream>

class Parent {
  public:
    void work(const std::string& in) {
        std::cout << data << in << std::endl;
    }
  private:
    const std::string data{"Parent: "};
};

class Child : public Parent {
  public:
    using Parent::work; // Impossible de compiler sans
    void work(float in) {
        std::cout << data << in << std::endl;
    }
  private:
    const std::string data{"Child: "};
};

int main() {
    Parent parent;
    parent.work("text 1");
    
    Child child;
    child.work(2);
    child.work("text 2");
}
```

Out



```
Parent: text 1
Child: 2
Parent: text 2
```

----------


## Kamikaze

Ah et pour la conversion implicite



```
#include <iostream>

class Parent {
  public:
    void work(int in) {
        std::cout << data << in << std::endl;
    }
  private:
    const std::string data{"Parent: "};
};

class Child : public Parent {
  public:
    using Parent::work;
    void work(float in) {
        std::cout << data << in << std::endl;
    }
  private:
    const std::string data{"Child: "};
};

int main() {
    Parent parent;
    parent.work(1);
    
    Child child;
    child.work(2.0);
    child.work(3);
}
```



```
main.cpp:27:19: error: call of overloaded ‘work(double)’ is ambiguous
```

Fix



```
child.work((float)2.0);
```



```
child.work((int)2.0);
```

Mais bon ouais c'tait plus pour répondre pour la blague, perso je commence toujours avec mon besoin puis je me réfère à la documentation, je fais pas émerger des possibilités bizarres pour voir ce que ça peut faire.

Donc dans ce cas j'ai pas réfléchi au sens que ça pourrait avoir et je doute que y'en ai besoin

----------


## Cwningen

> ```
> child.work(2.0f);
> ```


Les suffixes c'est plus pratique (il y en a aussi pour les entiers).

----------


## Kamikaze

Ouais t'inquiète pas je passe ma vie avec surtout avec std::chrono_literals

----------


## Nilsou

> Non, ça le fera pas. Une surcharge n'est pas une méthode virtuelle, et une virtuelle à forcément la même signature entre classe mère et fille. Ce que du décrit serait une sorte de mix bâtard des deux que je ne vois pas possible sans être une grosse source de problème.


J'arrive pas à voir le problème : le compilateur irait chercher la classe void foo(int) dans sa classe, il se rends compte que ça n'existe pas alors il va la chercher dans la classe mère. A partir du moment ou la méthode est protected ou public elle est censé être accessible à la classe fille et le mécanisme de surcharge standard prendre le relai comme partout ailleurs.
En fait c'est un soucis qui a une origine technique je pense à l'origine, sur le papier je ne voit pas bien pourquoi ça devrait être impossible.

- - - Mise à jour - - -




> Ouais t'inquiète pas je passe ma vie avec surtout avec std::chrono_literals


Merci pour tes réponses Kamikaze, l'astuce du using je l'avais déjà vu mais jamais utilisé, c'est une bonne réponse au problème en effet  :;):  

Même si je trouve que ça devrait vraiment être le comportement par défaut, je suis étonné que ça n'ait pas été intégré en C++20, j'imagine qu'il y a une bonne raison mais je ne trouve pas laquelle...  ::unsure::

----------


## Mr Slurp

> J'arrive pas à voir le problème : le compilateur irait chercher la classe void foo(int) dans sa classe, il se rends compte que ça n'existe pas alors il va la chercher dans la classe mère. A partir du moment ou la méthode est protected ou public elle est censé être accessible à la classe fille et le mécanisme de surcharge standard prendre le relai comme partout ailleurs.
> En fait c'est un soucis qui a une origine technique je pense à l'origine, sur le papier je ne voit pas bien pourquoi ça devrait être impossible.
> 
> - - - Mise à jour - - -
> 
> 
> 
> Merci pour tes réponses Kamikaze, l'astuce du using je l'avais déjà vu mais jamais utilisé, c'est une bonne réponse au problème en effet  
> 
> Même si je trouve que ça devrait vraiment être le comportement par défaut, je suis étonné que ça n'ait pas été intégré en C++20, j'imagine qu'il y a une bonne raison mais je ne trouve pas laquelle...


J'avoue que je ne connaissait pas non plus cet usage du "using", mais étant donné que c'est du C++ 17, je suis moins surpris de ne le rencontrer que maintenant.
Pour moi la source de problème serait pour une grosse partie des développeurs par forcément au point sur les standard (et je m'inclue partiellement dedans) de comprendre pourquoi telle ou telle version serait appelé, et si le cas présenté ici est encore assez simple avec des types natifs, il serait plus compliqué à désambiguïser si ton paramètres était une classes ou un de ses héritage.

----------


## Nilsou

Bah c'est pourtant assez simple je trouve : c'est les règle de la surcharge de base. Si ta méthode void foo(int) n'existe pas dans la classe fille, c'est celle de la classe mère qui est appelée, puisqu'on en hérite du moment qu'elle n'est pas privé. Si elle existe dans la classe fille, c'est celle de la classe fille qui masque celle de la classe mère.
Au contraire ça suivrait la règle générale du C++ qui est que deux fonction de même nom mais d'en tête différentes sont deux fonctions différentes. Ainsi void foo(int) et void foo(float) sont deux fonctions séparée car en-tête différente. 
Pourquoi cette règle vient s'appliquer partout dans le C++ avec pour seule exception l'héritage ou une unique fonction void foo(tout_et_nimporte_quoi) vient masquer toutes les autres fonctions foo de la classe mère ... mystère ...  ::unsure::

----------


## Captain_Cowkill

Du coup, si on se lance dans le dév web : le mieux c'est de voir HTML, CSS puis JS ?

----------


## Frypolar

Après le C++ ça va te faire bizarre  :^_^:

----------


## Captain_Cowkill

Ouais, j'ai l'impression. Mais de ce que j'ai compris avec toutes les infos que j'ai pioché ça et là, c'est même pas la peine de me lancer dans un taf avec du C++ avec mon peu d'expérience.

----------


## Kamikaze

Honnêtement tu peux voir large tu peux faire les deux. À vrai dire tu pourrais commencer un projet tout simple qui lie tout ça.

Tu regardes un tuto sur comment setup un serveur web hyper basique (Node.js ou n'importe quoi d'autre), tu fais une appli en C++ qui fait un truc simple (un listing d'un dossier, des calculs, peu importe) et tu trouves un moyen de communiquer ça au serveur web (pas besoin de faire compliqué tu peux juste écrire dans un fichier, ce que tu veux).

Tu affiches le résultat dans un beau HTML CSS récupéré sur le web.

Ensuite si tu veux élargir le projet tu rajoutes du JS pour communiquer un input de l'utilisateur dans la page web vers l'appli en C++.

Ca parait peut être trop compliqué mais je pense que seul le fait d'essayer et de voir les endroits où tu butes sera important. C'est crucial que tu te lances dans de petits projets pratiques par toi même, ça te permettra de te rendre compte des choses que tu dois apprendre en premier lieu, setup ton environnement de travail, etc.

Tu peux commencer simple avec Hello World en C++, Hello World en Web et partir de là

----------


## deathdigger

Sinon, en C# tu peux faire les deux, du client lourd et du web  ::ninja::

----------


## Captain_Cowkill

> Honnêtement tu peux voir large tu peux faire les deux. À vrai dire tu pourrais commencer un projet tout simple qui lie tout ça.
> 
> Tu regardes un tuto sur comment setup un serveur web hyper basique (Node.js ou n'importe quoi d'autre), tu fais une appli en C++ qui fait un truc simple (un listing d'un dossier, des calculs, peu importe) et tu trouves un moyen de communiquer ça au serveur web (pas besoin de faire compliqué tu peux juste écrire dans un fichier, ce que tu veux).
> 
> Tu affiches le résultat dans un beau HTML CSS récupéré sur le web.
> 
> Ensuite si tu veux élargir le projet tu rajoutes du JS pour communiquer un input de l'utilisateur dans la page web vers l'appli en C++.
> 
> Ca parait peut être trop compliqué mais je pense que seul le fait d'essayer et de voir les endroits où tu butes sera important. C'est crucial que tu te lances dans de petits projets pratiques par toi même, ça te permettra de te rendre compte des choses que tu dois apprendre en premier lieu, setup ton environnement de travail, etc.
> ...


Oui, mais faudrait que je passe déjà par la case formation pour ça  ::P:

----------


## Kamikaze

Tu peux aussi faire le serveur web en C++ à vrai dire, la raison pour laquelle je cite Node.js c'est qu'il m'apparait que c'est populaire et d'ailleurs un conseil important qu'on a omis c'est que c'est toujours important de faire un petit travail de recherche et de voir ce qui est supporté par une communauté. Faut éviter les technos très peu actives et en voie de devenir désuètes. 

Concernant un serveur web en C++ (je déconseille étant donné que c'est pas la manière populaire de faire donc) ya plein de trucs tout fait sur github ou autre. Des serveurs web hyper légers, mais bon c'est une autre discussion. Quoiqu'un autre exercice sympa serait de chopper un serveur web en C++ depuis github et d'arriver à le faire tourner.

Pour quelqu'un avec un minimum d'expérience et genre sous linux ça prend littéralement 10 secondes mais pour un débutant ça va forcer à apprendre plein de chose

git clone
cmake
install la-dépendence-qui-manque
cmake
make
./run-le-serveur

etc.

M'enfin quoique ça emmène sur une voie peut être un peu trop compliquée et chiante quand tu débutes

- - - Mise à jour - - -




> Oui, mais faudrait que je passe déjà par la case formation pour ça


Ouais ouais, mais n'hésite pas aussi à expérimenter de ton côté, quitte à te manger de gros murs. Mais une formation pourra te kick start effectivement

----------


## MrBeaner

Si jamais, y a des formations en ligne qui sont très orientées projet. Sur Coursera, c'est une catégorie à part il me semble. Si jamais tu veux jeter un coup d'œil, tester une semaine ou deux.

----------


## Dross

> Du coup, si on se lance dans le dév web : le mieux c'est de voir HTML, CSS puis JS ?


Le mieux c'est d'avoir les bonnes bases, donc oui, HTML et CSS. C'est le contenu et la mise en forme. Tu peux même suivre des tutos qui font que ça pour commencer. 

Après le JS, honnêtement c'est assez rare de l'utiliser "vanilla" aujourd'hui, je te conseillerai de passer directement sur des tutos de frameworks comme Angular/Reac/Vu et de faire tes armes avec. Voir de passer directement sur du TypeScript (Angular c'est du TS de toutes manières). Framework+TS ça va t'enlever pas mal de conneries que le langage te laisse faire en version vanille et tu pourra aller plus vite sur l'important : arriver à sortir des trucs dynamiques. 
Une fois que tu sera dans le bain, il sera toujours temps de creuser le langage et googler tout les trucs étranges que tu rencontrera.

ps: venant de C++, C# devrai te plaire pas mal, en serveur web tu a notamment ASP.NET Core (C#) qui est de la vrai bombe, si jamais tu cherche un backend.

----------


## Lazyjoe

> J'arrive pas à voir le problème : le compilateur irait chercher la classe void foo(int) dans sa classe, il se rends compte que ça n'existe pas alors il va la chercher dans la classe mère. A partir du moment ou la méthode est protected ou public elle est censé être accessible à la classe fille et le mécanisme de surcharge standard prendre le relai comme partout ailleurs.
> En fait c'est un soucis qui a une origine technique je pense à l'origine, sur le papier je ne voit pas bien pourquoi ça devrait être impossible.
> 
> - - - Mise à jour - - -
> 
> 
> 
> Merci pour tes réponses Kamikaze, l'astuce du using je l'avais déjà vu mais jamais utilisé, c'est une bonne réponse au problème en effet  
> 
> Même si je trouve que ça devrait vraiment être le comportement par défaut, je suis étonné que ça n'ait pas été intégré en C++20, j'imagine qu'il y a une bonne raison mais je ne trouve pas laquelle...


Il n'y a aucun problème technique, c'est purement une décision de design du langage : quand le nom d'un méthode est présente dans la classe fille, on ne continuera pas plus loin la recherche (même si ça échoue car pas de signature correspondante).
L'idée de base est d'empêcher que l'ajout/modification de méthodes d'une classe mère puisse impacter implicitement la classe fille.



```
classe Base {
  public :
    void f (int i) {std::cout << "Base" << std::endl;}
};
classe Derived : Base {
  public :
    void f (int i) {std::cout << "Derived"<< std::endl;}
};

int main() {
  Derived d;
  d.f(2.0f);
  return 0;
}
```

Quand on appelle d.f(2.0f); ça regarde dans Derived et ça matche avec conversion implicite.
Maintenant imagine que ta classe de Base soit dans une lib indépendante Tartempion-1.0, tu as écris la classe Derived pour fournir un outil spécialisé, et l'appel d.f(2.0); est dans le programme de quelqu'un d'autre qui utilises ton outil.
Puis un jour cet utilisateur récupère la nouvelle release Tartempion-2.0 "nous avons découvert l'existence de chiffres après la virgule !!! toutes les méthodes utilisent maintenant cette précision améliorée !!!"


```
classe Base {
  public :
    void f (double d) {std::cout << "Base" << std::endl;}
};
```

Si la recherche implicite comme tu voudrais fonctionnait, le code de l'utilisateur serait tout cassé car il n'utiliserait plus du tout la méthode de la classe Derived.
Sans se plonger dans le code des deux classes, il ne pourrait pas savoir pourquoi ça a changé. Et en tant que développeur de la classe Derived, tu ne comprendrais pas pourquoi le code des utilisateurs de ta classe est pété alors que Tartempion-2.0 est parfaitement rétrocompatible avec Tartempion-1.0

Autre exemple avec les arguments optionnels :



```
classe Base {
  public :
    void f (int i) {std::cout << "Base" << std::endl;}
};
classe Derived : Base {
  public :
    void f (int i, double d=3.14) {std::cout << "Derived"<< std::endl;}
};

int main() {
  Derived d;
  d.f(2);
  return 0;
}
```

Si on allait chercher implicitement dans la classe mère là il y a ambiguïté vu que les deux méthodes matchent, sans pour autant que ça soit une redéfinition.

D'où la règle du langage : on ne cherche pas implicitement dans les classes parentes si on a déjà un match du nom de méthode dans la classe fille. Pas d'ambiguîté, pas d'implicite : si on veut pouvoir allre chercher la méthode parente il faut le faire explicitement avec _using_

----------


## deathdigger

> Il n'y a aucun problème technique, c'est purement une décision de design du langage : quand le nom d'un méthode est présente dans la classe fille, on ne continuera pas plus loin la recherche (même si ça échoue car pas de signature correspondante).
> L'idée de base est d'empêcher que l'ajout/modification de méthodes d'une classe mère puisse impacter implicitement la classe fille.
> 
> 
> 
> ```
> classe Base {
>   public :
>     void f (int i) {std::cout << "Base" << std::endl;}
> ...


Ça marche en .Net, mais... y'a un mais  ::P: 
Ça, ça marche :


```
class Moman
    {
        public void Toto(string i)
        {
            Console.WriteLine("Moman" + i);
        }
    }

    class Fifille : Moman
    {
        public void Toto(decimal d)
        {
            Console.WriteLine("Fifile " + d);
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            decimal d = 12;
            Fifille f = new Fifille();
            f.Toto(d);
            f.Toto(d.ToString());
            Console.ReadLine();
        }
    }
```

Par contre, ça, ça marche moyen :


```
   class Moman
    {
        public void Toto(int i)
        {
            Console.WriteLine("Moman" + i);
        }
    }

    class Fifille : Moman
    {
        public void Toto(decimal d)
        {
            Console.WriteLine("Fifile " + d);
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            decimal d = 12;
            Fifille f = new Fifille();
            f.Toto(d);
            f.Toto((int)d);
            Console.ReadLine();
        }
    }
```

Ouais parce qu'un int "c'est aussi un decimal quelque-part"  ::P:

----------


## Orhin

> Le mieux c'est d'avoir les bonnes bases, donc oui, HTML et CSS. C'est le contenu et la mise en forme. Tu peux même suivre des tutos qui font que ça pour commencer. 
> 
> Après le JS, honnêtement c'est assez rare de l'utiliser "vanilla" aujourd'hui, je te conseillerai de passer directement sur des tutos de frameworks comme Angular/Reac/Vu et de faire tes armes avec. Voir de passer directement sur du TypeScript (Angular c'est du TS de toutes manières). Framework+TS ça va t'enlever pas mal de conneries que le langage te laisse faire en version vanille et tu pourra aller plus vite sur l'important : arriver à sortir des trucs dynamiques. 
> Une fois que tu sera dans le bain, il sera toujours temps de creuser le langage et googler tout les trucs étranges que tu rencontrera.


Je plussoie ceci.

----------


## Captain_Cowkill

> Le mieux c'est d'avoir les bonnes bases, donc oui, HTML et CSS. C'est le contenu et la mise en forme. Tu peux même suivre des tutos qui font que ça pour commencer. 
> 
> Après le JS, honnêtement c'est assez rare de l'utiliser "vanilla" aujourd'hui, je te conseillerai de passer directement sur des tutos de frameworks comme Angular/Reac/Vu et de faire tes armes avec. Voir de passer directement sur du TypeScript (Angular c'est du TS de toutes manières). Framework+TS ça va t'enlever pas mal de conneries que le langage te laisse faire en version vanille et tu pourra aller plus vite sur l'important : arriver à sortir des trucs dynamiques. 
> Une fois que tu sera dans le bain, il sera toujours temps de creuser le langage et googler tout les trucs étranges que tu rencontrera.
> 
> ps: venant de C++, C# devrai te plaire pas mal, en serveur web tu a notamment ASP.NET Core (C#) qui est de la vrai bombe, si jamais tu cherche un backend.


Merci beaucoup  ::):

----------


## GrandFather

Passer directement à un framework JS, c’est un peu raide, tous ont un présupposé de maîtrise du langage. Par contre, apprendre le JS et parallèlement s’initier à un de ces frameworks, comme un TP en fait, me paraît plus profitable. En répartissant son temps grosso modo en 2/3 language et 1/3 framework. 

Se faire un petit projet, bidouiller du code existant, etc. c’est super intéressant et très enrichissant, mais ça ne doit pas occulter le fait qu’un apprentissage - au sens didactique du terme - long et méthodique est également nécessaire, surtout s’il y a un projet professionnel au bout. Je ne crois pas trop me tromper en disant qu’on en est tous plus ou moins passé par là.  ::):

----------


## Dross

Le problème c'est que commencer le JS en 2020 ça doit être folklorique, ça va être quoi, de la manipulation de DOM ? Attacher des évènements à la main ? Se taper les callbacks ? C'est tellement dépassé que je ne sais pas si ça a aujourd'hui un intérêt réel (autre que curiosité pour les antiquités) et ça sera immédiatement jeté aux ordures quand il passera aux pratiques actuelles (templating, databinding, promises, async/await, etc).

----------


## Getz

> Le problème c'est que commencer le JS en 2020 ça doit être folklorique, ça va être quoi, de la manipulation de DOM ? Attacher des évènements à la main ? Se taper les callbacks ? C'est tellement dépassé que je ne sais pas si ça a aujourd'hui un intérêt réel (autre que curiosité pour les antiquités) et ça sera immédiatement jeté aux ordures quand il passera aux pratiques actuelles (templating, databinding, promises, async/await, etc).


Bien sûr que non, je vois pas pourquoi apprendre les bases du langage aujourd'hui ne te ferait pas apprendre les promises, async await, les arrow function, etc... 
Il suffit de pas prendre un tuto qui date d'il y a plus de 3/4 ans.
Il vaut mieux apprendre un peu du langage que se lancer directement dans un framework selon moi, surtout apprendre ses spécificités (par exemple bien comprendre l'utilisation de this qui est déroutante quand on vient d'un autre langage).

----------


## Captain_Cowkill

Vous m'avez perdu là  ::XD::

----------


## Charmide

J'ai le même avis que Dross perso, j'avais conseillé React/Vue un peu plus haut. Si tu le fais bien, tu apprendras les spécificités du langage en même temps. C'est juste que ça me paraît plus intéressant de le faire en contexte (ie. avec un framework) plutôt que dans le vide. C'est comme le HTML, personne va dire que ça sert à rien de le connaître, la sémantique des balises & co, mais l'apprendre en isolation sans apprendre en même temps une façon de le générer (et le CSS et le JS) ça va pas être très passionnant. 
C'est un style d'apprentissage aussi, perso je sais que j'ai tendance à mieux apprendre, y compris les fondamentaux, en me "jetant dans le grand bain" et en "conditions réelles".

Le plus utile ce serait une ressource (cours/vidéo/tutos) à conseiller à Cowkill si vous avez ça sous la main. J'avoue que j'en connais pas énormément faites pour les noobs, peut-être quelque chose comme ça  (vidéos en anglais, l'instructeur n'est pas mauvais). Tu tomberas sur des "prérequis" de connaissances que tu as peut-être pas, mais ça devrait rouler si tu prends le temps de te renseigner, y'en a pas tant que ça.

----------


## Awake

Je suis d'accord avec GrandFather, déjà que quand on connaît le JS ou TS, s'attaquer à un framework est raide, alors sans connaître les bases  :Splash:  Et c'est tout à fait possible faire des applis sympas même sans React et compagnie.

----------


## Orhin

> Et c'est tout à fait possible faire des applis sympas même sans React et compagnie.


T'es quand même rapidement limité.
Mais surtout on ne parle pas de quelqu'un qui veut apprendre pour un hobby mais d'une reconversion professionnelle.
Hors dans le monde du dev web actuel, connaitre un framework (particulièrement React ou Angular) est un gros plus.

Comme Dross et Charmide je conseillerais d'apprendre d'un côté HTML + CSS et Typescript + React de l'autre.

----------


## Awake

> T'es quand même rapidement limité.
> Mais surtout on ne parle pas de quelqu'un qui veut apprendre pour un hobby mais d'une reconversion professionnelle.
> Hors dans le monde du dev web actuel, connaitre un framework (particulièrement React ou Angular) est un gros plus.
> 
> Comme Dross et Charmide je conseillerais d'apprendre d'un côté HTML + CSS et Typescript + React de l'autre.


Oui, je crois que personne ne dit qu'il ne faut pas qu'il apprenne un framework à terme.

C'est juste que se lancer dedans sans rien connaître à javascript, c'est un coup à ne rien comprendre et à abandonner, ce serait dommage.

----------


## deathdigger

Le mieux, à mon sens, c'est de passer une journée à faire une belle page web avec du jquery basique. T'apprends les bases avec ça (sans tomber dans les bases anciennes plus utilisées, genre les frames, les XMLHttpRequest, etc.), t'as un résultat plaisant, et en une journée, t'en as fait le tour. Après ça, tu peux partir sur un framework.

----------


## war-p

> Le mieux, à mon sens, c'est de passer une journée à faire une belle page web avec du jquery basique. T'apprends les bases avec ça (sans tomber dans les bases anciennes plus utilisées, genre les frames, les XMLHttpRequest, etc.), t'as un résultat plaisant, et en une journée, t'en as fait le tour. Après ça, tu peux partir sur un framework.


Effectivement, pour comprendre comment fonctionne les callback, les promises et toutes les subtilités de scope de js, c'est pas mal de jouer avec jquery et de trucs basique. De toute façon si t'as pas ces bases là en js, tu fais pas grand chose, ou mal, et c'est encore pire avec un framework (et je peux en dire quelque chose...).

Sinon, comme ça, n'essayez pas de faire du wasm pour manipuler des raster avec openlayer. Ça marche pas (ou j'ai pas trouvé)  ::(:

----------


## Getz

Faire une page web oui, mais sans JQuery. Aujourd'hui ça n'a pas trop de sens de passer du temps à apprendre JQuery selon moi, et beaucoup de choses peuvent être faites avec du JS de base et les navigateurs sont largement compatibles (contrairement à l'époque où tout le monde faisait du JQuery  ::P:  )

----------


## GrandFather

> Vous m'avez perdu là


En gros, on veut t'apprendre à manipuler un tournevis sans t'avoir expliqué au préalable ce qu'est une vis. Ca peut marcher, hein, mais y'a risque de blessure.  ::ninja:: 

Pour les technos Web, le MDN (Mozilla Developer Network) est une des références. Ils proposent des tutos très bien foutus pour les débutants : https://developer.mozilla.org/en-US/docs/Web/Tutorials

[EDIT] Et ils proposent même un cursus complet : https://developer.mozilla.org/en-US/..._web_developer

Les durées de chaque section te donnent une indication de ce dans quoi tu t'engages.  :;):

----------


## Captain_Cowkill

Merci beaucoup mes canards, j'y vois beaucoup plus clair. Vos conseils ont vraiment beaucoup de valeur car je n'ai pas le droit à lerreur pour ma reconversion (à 35 ans, si je me loupe ce serait dommage).

----------


## Dross

En gros, il y a deux pratiques de JS : une vanilla et une au travers d'un framework. Mais ça a tellement évolué que c'est presque devenu des langages différents. Dans le cas de TypeScript (qui est un JS amélioré) c'est même justement devenu un autre langage. 

Dans une de mes réponses j'avais rajouté une boutade "vous voulez quand même pas qu'il touche à JQuery ?" mais je l'avais enlevé pour éviter que la discussion ne dévie trop. En gros t'a d'un coté une pratique artisanale et une plus industrielle, une où pour chaque étape tu va devoir choisir les ingrédients, les mixer, etc et l'autre où t'a un set d'outil qui vont te permettre de faire out-of-the-box 100% d'une webapp basique, et 90% d'une webapp complexe. 

J'ai un junior qui se démerde en Angular, je suis pas convaincu qu'il saurait faire du JS à l'ancienne. Il était un peu limité à un moment mais c'était à cause de bases en HTML/CSS qu'il n'avait jamais pris le temps d'apprendre (ça c'était une erreur, je lui ai vite mis des cours dans les mains), du coté JS/TS il ne m'a jamais semblé manquer de connaissances (autre que devoir googler des trucs de temps à autre). Une fois que tu a appris le templating et 2-3 autres liés à Angular (qui eux même dérivent du monde desktop, donc si tu viens du C++/Java/C# t'a limite rien à apprendre) et comme tu n'a plus les insanités du JS avec le TS (plus de "var that = this") quel est l'intérêt de connaître le JS à papa ? 

Personnellement, voici les ressources que je donne à mes stagiaires/juniors : 

Initiation HTML/CSS https://www.udemy.com/course/design-...tml5-and-css3/
Usage avancés (SASS) https://www.udemy.com/course/advanced-css-and-sass/
Apprendre Angular de 0 : https://www.newline.co/ng-book/2/

Avec ça, même des parfaits débutants peuvent se démerder à sortir un petit siteweb qui ira taper des infos sur une API. Bon après il y a un senior dans le coin pour les questions et autre, mais à mon avis même en autodidacte + questions sur forums/udemy/etc y'a moyen de prendre beaucoup de vitesse très vite.

----------


## Kamasa

Depuis Juillet je travaille en Typescript sur des projets React, je ne suis jamais passé par la case Javascript.
J'avais quelques vagues notions, mais sans plus.
De mon point de vue, le passage par la case Javascript est complètement optionnelle.

----------


## Getz

> En gros, il y a deux pratiques de JS : une vanilla et une au travers d'un framework. Mais ça a tellement évolué que c'est presque devenu des langages différents. Dans le cas de TypeScript (qui est un JS amélioré) c'est même justement devenu un autre langage. 
> 
> Dans une de mes réponses j'avais rajouté une boutade "vous voulez quand même pas qu'il touche à JQuery ?" mais je l'avais enlevé pour éviter que la discussion ne dévie trop. En gros t'a d'un coté une pratique artisanale et une plus industrielle, une ou pour chaque étape tu va devoir choisir les ingrédients, les mixer, etc et l'autre où t'a un set d'outil qui vont te permettre de faire out-of-the-box 100% d'une webapp basique, et 90% d'une webapp complexe. 
> 
> J'ai un junior qui se démerde en Angular, je suis pas convaincu qu'il saurait faire du JS à l'ancienne. Il était un peu limité à un moment mais c'était à cause de bases en HTML/CSS qu'il n'avait jamais pris le temps d'apprendre (ça c'était une erreur, je lui ai vite mis des cours dans les mains), du coté JS/TS il ne m'a jamais semblé manquer de connaissances (autre que devoir googler de temps à autre). Une fois que tu a appris le templating et 2-3 autres liés à Angular (qui eux même dérivent du monde desktop, donc si tu viens du C++/Java/C# t'a limite rien à apprendre) et comme tu n'a plus les insanités du JS avec le TS (plus de "var that = this") quel est l'intérêt de connaître le JS à papa ? 
> 
> Personnellement, voici les ressources que je donne à mes stagiaires/juniors : 
> 
> Initiation HTML/CSS https://www.udemy.com/course/design-...tml5-and-css3/
> ...


Mais ton exemple que tu donnes var that = this ce n'est plus quelque chose que l'on fait en JS standard aujourd'hui.
La langage a évolué depuis, les arrow functions ne sont pas une spécificité de Typescript, c'est incorporé au langage depuis ES2015 !

Je te parle pas de connaitre le "JS de papa" d'il y a 10 ans, mais d'apprendre les bases du langage puisque de toute façon même en faisant du Typescript, tu en auras besoin. Quand bien même tu es sur un framework, tu codes en JS (ou en TS pour angular).
Et quand je dis les bases, ce sont les bases récentes évidemment. Va pas apprendre à créer un objet XMLHttpRequest pour faire de l'ajax par exemple.  :^_^: 

Je trouve ça fou de proposer d'apprendre le framework avant de connaitre ne serait que la base de la base du langage sur lequel tu vas dev. C'est comme dire à quelqu'un qui veut faire du Java "autant apprendre spring boot plutôt que Java 5" (puisque tu compares au langage comme il était avant), ça n'a pas de sens. Comme tu proposes les bases du HTML avant d'apprendre le templating Angular, c'est pareil pour le JS.

----------


## TwinBis

Typescript étant un sur-ensemble de Javascript, apprendre Typescript sans apprendre Javascript est un concept qui m'intrigue.  ::P:

----------


## GrandFather

Je suis assez sidéré aussi... N'oubliez pas que c'est pour un quasi-néophyte, pas pour un (élève-)ingénieur dont la formation a essentiellement consisté à être en capacité d'ingurgiter n'importe quelle techno en un minimum de temps.




> De mon point de vue, le passage par la case Javascript est complètement optionnelle.


Oui, tant que tu n'as pas à écrire un algorithme non trivial, pour faire quelque chose qui n'est pas pris en charge par le framework...

C'est un avis tellement répandu - et erroné - que ça a inspiré la série des You Don't Know JS, dont je conseille vivement la lecture.  ::):

----------


## Dross

Je ne dis pas qu'il ne va pas apprendre JS, mais l'apprendre au travers d'un Framework va l'amener à apprendre juste ce qui est nécessaire aujourd'hui. Et je parle d'une vrai formation, via un cookbook de qualité ou un MOOC, pas de sauter sur le site de la doc officielle et partir comme ça. 
Si y'a un truc qui l'étonne/comprends pas, il pourra toujours googler sa question. 

Puis merde, c'est un langage informatique, c'est pas comme les langues vivantes, 90% des concepts sont les mêmes, seul la syntaxe change et 2/3 trucs particulier au langage. C'est pas comme si c'était la mer à boire de sauter dans le bain et regarder comment on fait.

Et comme dit : j'ai eu des stagiaires/débutants complets, la partie difficile c'est le HTML/CSS, ça c'est la partie où tu n'y coupe pas car complètement différent de ce que tu as connu avant. Pour la partie JS/TS, si t'a déjà programmé un peu, et mieux encore, programmé sur desktop dans le cas d'Angular, c'est vraiment pas du tout la même marche. Surtout comme dit dans le cas d'une formation qui va te prendre par la main et commencer avec un Hello World.

----------


## war-p

Le plus marrant avec cette discussion, c'est quand je compare avec projet Angular que j'ai trouvé qui avait été fait par des gens pas forcément très bon et qui était pétri de fuite mémoires (pour ne citer que ça). Les mecs qui avaient codé ça ne connaissaient pas la porté de l’inscription aux événement. Et forcément à la fin c'était n'importe quoi. Donc, oui il faut en connaitre un minimum sur le langage, sur le framework avant de faire de la merde (et Angular fait très bien ça : de la merde)

----------


## Dross

C'est valide pour tout les outils/langages/etc.

Si tu prends une formation je m'attends à ce que justement il soit fait mention de ces aspects là (en général dans les cookbook c'est les passages avec des points d'exclamation). Les apps toutes pété souvent c'est des gens qui DL juste le framework et manipulent ça à l'arrache en jetant juste un œil au site officiel.

----------


## TwinBis

> Le plus marrant avec cette discussion, c'est quand je compare avec projet Angular que j'ai trouvé qui avait été fait par des gens pas forcément très bon et qui était pétri de fuite mémoires (pour ne citer que ça). Les mecs qui avaient codé ça ne connaissaient pas la porté de l’inscription aux événement. Et forcément à la fin c'était n'importe quoi. Donc, oui il faut en connaitre un minimum sur le langage, sur le framework avant de faire de la merde (et Angular fait très bien ça : de la merde)


This: en y allant "YOLO c'est qu'un langage, j'en connais déja d'autres" tu fais de la merde qui peut suffir pour du bricolage ou des projets one-shot à la durée de vie limitée (ce qui est un scénario légitime pour certains projets web), mais qui vont blinder ton appli de problèmes et la rendre non-maintenable assez vite.

A fortiori dans le cadre d'un apprentissage académique, il faut se forcer à creuser un minimum les concepts de base des technos qu'on utilise. Et pour le web, au niveau programmatique c'est le JS, qu'on fasse du TS ou pas.

"You don't know JS", cité plus haut par _GrandFather_, est une excellente série de bouquins pour comprendre le JS. 
C'est peut-être un peu ardu (il descend profond dans les explications) et ça ne suffira pas pour apprendre le JS (il faut du concret aussi), mais si tu arrives à en lire ne serait-ce qu'une partie, tu auras acquis des connaissances précieuse en front.

----------


## Dross

On parle de mettre le pied à l'étrier rapidement. Oui creuser certains aspects est toujours utile. Et ça, ça ne se fait pas "au début" mais tout le long de ta carrière. Il sera toujours temps pour lui de creuser certains aspects avancés/aller voir sous le capot plus tard. 

Et encore une fois, si tu suis un cookbook et pas un/des tutoriel(s) random sur le net, tu as normalement ce genre d'information qui te sera donné. "Attention, pensez bien à faire tel ou tel truc / à ne pas faire ci ou ça". Libre à toi après d'aller creuser le pourquoi du comment.

----------


## GrandFather

> "You don't know JS", cité plus haut par _GrandFather_, est une excellente série de bouquins pour comprendre le JS. 
> C'est peut-être un peu ardu (il descend profond dans les explications) et ça ne suffira pas pour apprendre le JS (il faut du concret aussi), mais si tu arrives à en lire ne serait-ce qu'une partie, tu auras acquis des connaissances précieuse en front.


Tout à fait, le conseil de lecture n'était pas adressé à Captain_Cowkill, du moins pas dans l'immédiat. L'auteur de YDKJS lui-même déconseille ses ouvrages aux complets débutants, il recommande au moins 6 à 9 mois de pratique avant de les aborder. Et même avec - beaucoup - plus que ça, faut quand même s'accrocher un peu. Spoiler alert : JS n'est pas un langage simple, et quelqu'un qui affirme le maîtriser se fourre dans 95% des cas le doigt dans l'oeil.

----------


## Captain_Cowkill

Donc, en gros, il faut que je passe par la case obligatoire du HTML/CSS puis me lancer directement avec un parallèle JS/React (ou autre) ?
Ou il y a d'autre prérequis ? Parce que les MOOC, il y en a un paquet...

----------


## GrandFather

Oui, il y a aussi quelques outils incontournables (Git, plugin de développement des navigateurs, gestion des dépendances). Base-toi sur le cursus de MDN que j'ai linké, franchement il est complet.  ::):

----------


## Dross

C'est ça. HTML/CSS y'a pas d'équivalent (et ça a pris tout le marché, même desktop) et t'y coupera pas. Faut bien bétonner. 

Pour le JS/Framework, trouve une ressource de qualité (cookbook/MOOC etc) et jette toi à l'eau. Pour trouver une ressource de qualité : oubli le Français, les ressources en Anglais du fait de la compétition sont infiniment meilleures, de préférence un cookbook couplé optionnellement à un MOOC (le cookbook aura tendance à mieux te montrer les bases, trucs avancés, le MOOC te permettra de voir les astuces d'IDE/dev/habitudes de devs/etc). Ceux d'Udemy sont bien en général (ne jamais acheter plein prix, c'est en promo tout les mois).

----------


## Hideo

La vache c'est c'est un peu chaud de vous suivre les gars avec tout ces noms de framework/technos qui tombent.

My two cents :

Trouve un cours type Udemy (je propose ca parce que j'aime bien le format video), un truc un peu plus structure qu'une video youtube quoi (meme si y'en a plein des biens), ou autre qui dit "You've never coded ? Lets go HTML/CSS/JS vanilla!" sans framework et va au bout du cours et du projet qu'il va te faire faire.
Pas besoin que ca soit un cours mega complet / long / complexe, idéalement un truc que tu pourras claquer en 2/3 semaines grand max en fonction de ton temps dispo, juste un truc que te mette un pied dans le dev web et te guider pour ton premier contact.
Tu vas pas forcement tout parfaitement comprendre mais c'est normal.
Deja commence par ca et viens régulièrement discuter ici avec toutes les questions que tu auras, et t'en auras.

Une fois que ca c'est fait on discutera de quelles autres technos / formations plus longues que tu pourras suivre et tu comprendras plus facilement ce que les gens ici essaieront d'expliquer et p'tet meme vers quoi tu sens que tu aimerais tendre.

----------


## Getz

> Tout à fait, le conseil de lecture n'était pas adressé à Captain_Cowkill, du moins pas dans l'immédiat. L'auteur de YDKJS lui-même déconseille ses ouvrages aux complets débutants, il recommande au moins 6 à 9 mois de pratique avant de les aborder. Et même avec - beaucoup - plus que ça, faut quand même s'accrocher un peu. Spoiler alert : JS n'est pas un langage simple, et quelqu'un qui affirme le maîtriser se fourre dans 95% des cas le doigt dans l'oeil.


En effet, pas pour les débutants, mais une fois qu'on fait un peu de JS, c'est une super recommandation! 
J'y retourne de temps en temps et me rend compte que je ne connais pas plein de subtilités du langage (que j'utilise tous les jours pourtant coté front et back)  ::): 






> Donc, en gros, il faut que je passe par la case obligatoire du HTML/CSS puis me lancer directement avec un parallèle JS/React (ou autre) ?
> Ou il y a d'autre prérequis ? Parce que les MOOC, il y en a un paquet...


Oui, commence par HTML/CSS, sans essayer de tout apprendre non plus: chopper les principes de base est plus important que de connaitre chaque propriété par coeur.
Ensuite, je te conseille (mais comme tu vois tout le monde n'est pas d'accord) de chopper un tuto de base du JS (mais un tuto récent ou mis à jour), puis d'embrayer assez rapidement sur un framework comme React, Angular ou Vue. 
Pour débuter, je ne conseillerai pas Angular, qui vient avec des notions un peu complexes, mon choix se portrerait sur Vue mais c'est complètement personnel.

Je peux pas trop t'orienter vers un tuto ou un autre car je n'ai pas fait de tutos depuis bien longtemps par contre... Trouve un cours à jour par contre, c'est important, car tout ce petit monde évolue assez vite.

----------


## Captain_Cowkill

> Oui, il y a aussi quelques outils incontournables (Git, plugin de développement des navigateurs, gestion des dépendances). Base-toi sur le cursus de MDN que j'ai linké, franchement il est complet.


Mais ça m'a l'air parfait ça  ::o: 

- - - Mise à jour - - -




> C'est ça. HTML/CSS y'a pas d'équivalent (et ça a pris tout le marché, même desktop) et t'y coupera pas. Faut bien bétonner. 
> 
> Pour le JS/Framework, trouve une ressource de qualité (cookbook/MOOC etc) et jette toi à l'eau. Pour trouver une ressource de qualité : oubli le Français, les ressources en Anglais du fait de la compétition sont infiniment meilleures, de préférence un cookbook couplé optionnellement à un MOOC (le cookbook aura tendance à mieux te montrer les bases, trucs avancés, le MOOC te permettra de voir les astuces d'IDE/dev/habitudes de devs/etc). Ceux d'Udemy sont bien en général (ne jamais acheter plein prix, c'est en promo tout les mois).





> La vache c'est c'est un peu chaud de vous suivre les gars avec tout ces noms de framework/technos qui tombent.
> 
> My two cents :
> 
> Trouve un cours type Udemy (je propose ca parce que j'aime bien le format video), un truc un peu plus structure qu'une video youtube quoi (meme si y'en a plein des biens), ou autre qui dit "You've never coded ? Lets go HTML/CSS/JS vanilla!" sans framework et va au bout du cours et du projet qu'il va te faire faire.
> Pas besoin que ca soit un cours mega complet / long / complexe, idéalement un truc que tu pourras claquer en 2/3 semaines grand max en fonction de ton temps dispo, juste un truc que te mette un pied dans le dev web et te guider pour ton premier contact.
> Tu vas pas forcement tout parfaitement comprendre mais c'est normal.
> Deja commence par ca et viens régulièrement discuter ici avec toutes les questions que tu auras, et t'en auras.
> 
> Une fois que ca c'est fait on discutera de quelles autres technos / formations plus longues que tu pourras suivre et tu comprendras plus facilement ce que les gens ici essaieront d'expliquer et p'tet meme vers quoi tu sens que tu aimerais tendre.


Ok, je retiens Udemy. Ça a une valeur sur le marché du travail ça ?

----------


## Dross

> Ça a une valeur sur le marché du travail ça ?


Ça dépends ce qu'on entends par "valeur sur le marché du travail".
Est-ce que une DRH qui ne jure que par les diplôme d'ing du top 10 FR va sauter au plafond car tu va mettre "formation Udemy suivie le 2020/12", certainement pas. 

Par contre, c'est bien fait, on apprends bien avec, et c'est de loin le plus important. Avec cette connaissance je ne peux que te conseiller de faire des side-projets pour monter un portfolio. Surtout en étant autodidacte.

Et même avec de bon diplômes (ce qui est d'ailleurs mon cas : top 10 ingé FR et top 5 université UK) ça ne dispense pas de monter un portefolio, ça sera toujours un énorme plus. Personnellement, même si je jette toujours un œil au diplôme, entre un gus avec un diplôme canon mais pas de portfolio et un autre sans diplôme mais un portfolio canon, je prends le second. Sans hésiter. 

Honnêtement, la programmation ça doit être une passion, avant de te demander si ça va te servir tu devrai te demander si t'aime ça et que t'a envie d'apprendre. Au pire si tu vois que le manque de diplôme officiel te pose problème tu pourra te rapprocher des instituts qui te permettrons d'avoir le papier magique. Mais ça te dispense pas d'apprendre de ton coté/monter tes propres projets, et ça tombe bien : c'est pas très cher, toute l'info est en ligne, et les professionnels ne sont pas avares en conseils ni inaccessibles comme dans d'autres domaines.

----------


## MrBeaner

Comme je suis en train de suivre le cursus CS50 de HarvardX, j'aime beaucoup ce cours d'intro et, justement, la _lecture_ actuelle présente HTML, CSS et JS :



Une fois ce cours d'intro terminé, je vais partir sur leur cours dédié au développement web avec Python (parce que je veux monter un site avec Django) et terminer leur certificat professionnel  ::):

----------


## Frypolar

> On parle de mettre le pied à l'étrier rapidement.


Et aussi de savoir si c’est le genre de trucs qui le botte. Si ça lui plaît, il peut toujours approfondir par la suite. Si même avec des frameworks qui te permettent d’avoir rapidement quelque chose de concret ça le lourde, au moins il sera fixé.

Par exemple, j’ai dû faire du HTML/CSS/JS/TS pour le taf, y compris de l’Angular. Et j’ai envie de tout cramer à chaque fois. Le résultat est sympa, TypeScript est bien mieux que le JS et ça fait plaisir de voir sa propre GUI. Mais globalement j’accroche pas du tout. Tout l’environnement me sort par les yeux. Je crois que je préférerais me frapper du vieux C tout pété.

----------


## Charmide

Tiens ça me fait penser, pour achever ta reconversion rapidement et passer à autre chose, comme truc avec une developer experience suprême y'a le dev mobile  ::ninja::

----------


## war-p

Tu veux dire suprême avant ou après devoir faire du code natif en C?  ::ninja::

----------


## deathdigger

> Comme je suis en train de suivre le cursus CS50 de HarvardX, j'aime beaucoup ce cours d'intro et, justement, la _lecture_ actuelle présente HTML, CSS et JS :
> 
> https://www.youtube.com/watch?v=xvkHFSNfzyQ
> Une fois ce cours d'intro terminé, je vais partir sur leur cours dédié au développement web avec Python (parce que je veux monter un site avec Django) et terminer leur certificat professionnel


Ça existe encore Django ?

----------


## MrBeaner

Dans le sens où ça a été remplacé par autre chose ? Je souhaitais monter un site web en Python pour développer mes skills en dev web au-delà de mon expérience sur des CMS connus. En cherchant, j'ai vu qu'il existe Flask et Django et que le second est plus compliqué que le premier, donc j'ai pris le premier second. 

Et j'aime bien le nom Django  ::ninja::

----------


## rOut

> Tu veux dire suprême avant ou après devoir faire du code natif en C?


JavaME  :Bave: 

Windows CE  :Bave:   :Bave:

----------


## gros_bidule

> Dans le sens où ça a été remplacé par autre chose ? Je souhaitais monter un site web en Python pour développer mes skills en dev web au-delà de mon expérience sur des CMS connus. En cherchant, j'ai vu qu'il existe Flask et Django et que le second est plus compliqué que le premier, donc j'ai pris le premier.
> 
> Et j'aime bien le nom Django


De toute façon https://coincoinpc.herokuapp.com utilise Flask, donc tu suis la CPC Corp, c'est tout  ::): 
Mais plus sérieusement, c'est un beau projet, tant à utiliser qu'à étudier le code source.

----------


## Captain_Cowkill

> Ça dépends ce qu'on entends par "valeur sur le marché du travail".
> Est-ce que une DRH qui ne jure que par les diplôme d'ing du top 10 FR va sauter au plafond car tu va mettre "formation Udemy suivie le 2020/12", certainement pas. 
> 
> Par contre, c'est bien fait, on apprends bien avec, et c'est de loin le plus important. Avec cette connaissance je ne peux que te conseiller de faire des side-projets pour monter un portfolio. Surtout en étant autodidacte.
> 
> Et même avec de bon diplômes (ce qui est d'ailleurs mon cas : top 10 ingé FR et top 5 université UK) ça ne dispense pas de monter un portefolio, ça sera toujours un énorme plus. Personnellement, même si je jette toujours un œil au diplôme, entre un gus avec un diplôme canon mais pas de portfolio et un autre sans diplôme mais un portfolio canon, je prends le second. Sans hésiter. 
> 
> Honnêtement, la programmation ça doit être une passion, avant de te demander si ça va te servir tu devrai te demander si t'aime ça et que t'a envie d'apprendre. Au pire si tu vois que le manque de diplôme officiel te pose problème tu pourra te rapprocher des instituts qui te permettrons d'avoir le papier magique. Mais ça te dispense pas d'apprendre de ton coté/monter tes propres projets, et ça tombe bien : c'est pas très cher, toute l'info est en ligne, et les professionnels ne sont pas avares en conseils ni inaccessibles comme dans d'autres domaines.


Je cherche surtout à savoir ce que ça vaut en terme de recrutement. Mais comme tu le dis, si il suffit de maîtriser son sujet avec preuve à l'appui...
Et oui j'ai très envie d'apprendre, je suis une vraie éponge quand un truc m'intéresse, c'est pas pour rien que je me reconverti à 35 balais et que je bombarde le topic de question  ::P: 

Mon but est de trouver la combinaison optimale d'apprentissage "pratique" et qui est visible et utile sur un CV sans avoir à repartir pour 3 ans d'études avant d'espérer trouver un job. Le seul truc qui m'a fait dévier du C++ c'est que je sais que je pourrai rien en faire avant un très long moment.

----------


## Dross

Il y a autant de type de recrutements qu'il y a de boites. Dans les grand groupes tu va tomber sur des gens qui veulent se protéger les fesses au maximum et donc demander 36 papiers et passer des entretiens à n'en plus finir, surtout en France. Dans les start-up/PME tu pourra être plus facilement être en contact avec la partie technique et elle, elle ne veux qu'une chose : que tu soit compétent, et si tu ne l'est pas (encore) que tu soit prêt à apprendre. 

Si t'arrive à montrer une capacité à apprendre et une curiosité pour le faire (c'est d'ailleurs ce que représentent la plupart des diplômes du supérieur : c'est pas un gage de compétence, c'est un gage de la capacité à apprendre) le plus dur est fait. 

D'ailleurs pour les juniors il y a souvent des tests techniques (on en vois un peu pour les seniors mais c'est plus rare), donc il vaux mieux avoir pratiqué un peu avant et de préférence sur des projets réels (c'est là qu'on apprends le plus).

----------


## Nattefrost

Tout à fait d'accord avec toi Dross sur la partie capacité d'apprentissage. C'est primordial je trouve, se montrer intéressé et curieux, ça permet aussi de mieux s'intégrer et d'être opérationnel plus rapidement.

Il nous [nous:= éditeur logiciel de ~70 personnes dont ~25 techniques] arrive d'engager des gens qui ont un passif parfois technique mais léger et/ou pas forcément sur la stack que l'on utilise mais on essaie de jauger cette capacité à apprendre et la motivation/curiosité du candidat, pour ça avoir quelques projets (persos ou non) à montrer peut être un +. 
Et puis la période d'essai (assez longue chez nous, c'est vrai) est aussi là pour ça, avec un premier bilan a mi-période d'essai pour voir comment ça se passe. Pour finir, les gens qui bossent directement avec au quotidien pendant plusieurs semaines se rendent bien compte si la personne convient ou non.

----------


## deathdigger

> Dans le sens où ça a été remplacé par autre chose ? Je souhaitais monter un site web en Python pour développer mes skills en dev web au-delà de mon expérience sur des CMS connus. En cherchant, j'ai vu qu'il existe Flask et Django et que le second est plus compliqué que le premier, donc j'ai pris le premier second. 
> 
> Et j'aime bien le nom Django


Moi aussi, c'était même le nom de feu mon chien  :Emo: 

Mais je te conseille de te pencher plutôt sur Node et sur tous ses dérivés (et le Typescript). https://www.jesuisundev.com/comprend...-en-5-minutes/

----------


## MrBeaner

Merci pour le conseil, je me penche sur Flask en ce moment de toute manière, comme c'est ce qui est abordé à la fin du cours d'intro  ::): 

Ils utilisent encore jQuery, parce que Bootstrap, mais ils signalent bien que la librairie pert en popularité. 

Pour mon projet final, je vais monter un questionnaire en ligne sous forme de chat (à la Survey Sparrow)  ::happy2::  J'ai vu quelques tutos en ligne.

Autre possibilité sûrement plus simple : développer une app de labellisation pour qu'une équipe qui gère des tickets de support puisse dire si les questions posées sont similaires ou non (pour entraîner un modèle de machine learning par la suite basé sur le traitement de language naturel).

----------


## ducon

> Merci pour le conseil, je me penche sur Flask


Ce n’est pas trop dur ?  :Drum:

----------


## MrBeaner

Haha, j'allais dire que ça pique un peu, mais en fait le logo c'est une corne, pas un piment  :^_^:

----------


## TwinBis

On peut même dire que le logo est une flasque en fait.  ::P:

----------


## ducon

:jelb:

----------


## Nilsou

Gros bug dans mon cerveau aujourd'hui. 
J'ai eu un doute sur un vieux cours de C++ aujourd'hui qui affirme que les méthodes sont publiques par défaut. 

Je test le code dans le doute, et j'obtiens que c'est bien private par défaut. Mais j'ai un doute dans mon cerveau car j'ai vaguement souvenir de test que je faisais il y a quelque temps sur le PC d'un élève dans lesquels les méthodes étaient accessible en publique par défaut contrairement aux membres. 

Alors : 

- Option 1 : Il faut que j’arrête la drogue
- Option 2 : Nelson Mandela
- Option 3 : C'était le cas dans une certaine version de C++ ou sur certains compilo et par sur d'autres ?  ::unsure::

----------


## Cwningen

Option 4 : ça dépend du mot-clé que tu utilises

struct → public
class → private

Même règle pour les données, les méthodes ou l'héritage.

----------


## Nilsou

Je parlais des classes évidemment, je sais que pour struct tout est public par défaut. 

Option 1 du coups ? 

Pourtant j'ai la certitude quasi certaine d'avoir fait un test à l'époque et d'avoir été surpris de voir les méthodes en publiques par défaut. Qu'est-ce que j'ai bien pu fumer ...  ::wacko::

----------


## Lazyjoe

Il me semble que ça a toujours été dans les fondements même du langage le fait que tout le contenu d'une classe soit privé par défaut.

----------


## Cwningen

Option 5 : #define class struct

Je suis sûr que quelqu'un l'a fait (et je ne serai pas étonné si c'est Microsoft).

----------


## Lazyjoe

> Option 5 : #define class struct
> 
> Je suis sûr que quelqu'un l'a fait (et je ne serai pas étonné si c'est Microsoft).


 :Boom:  :tuezleavecdufeu:

----------


## Nilsou

> Il me semble que ça a toujours été dans les fondements même du langage le fait que tout le contenu d'une classe soit privé par défaut.


Nan mais j'ai du fumer. Ou plus précisément j'ai fumé quand j'ai repris le cours du collègue en ne trouvant pas ça choquant.
Faut dire que moi je met toujours private et public partout dans mes codes de façon explicite, donc je ne m'était jamais posé la question ...

----------


## MrBeaner

Hello les canards !

J'ai fini la première partie de mon cours et j'ai réalisé mon projet final avec Flask, Bootstrap et FlaskSQLAlchemy.

Pour moi qui ai d'abord fait des formations en Data Science, mes impressions jusqu'ici :

 Programmer en C, c'est chiant. Mais je comprends mieux maintenant pourquoi les obsédés des perfs crachent sur tout le reste  ::ninja::  Apprendre le développement web est moins ardu que d'apprendre le machine learning. Mais c'est plus vaste (et plus le bordel aussi j'ai l'impression  :^_^:  ). Maintenant, j'ai pas mal pythonné avant, donc j'ai forcément des facilités pour ces nouveaux frameworks. Je regrette vraiment pas d'avoir appris tout ça, je m'amuse à fond. Je vois le potentiel énorme pour mes missions  ::): 

Je fais la spécialisation avec Django en ce moment et *j'aimerais bien changer de Bootstrap* et explorer une autre librairie front-end. Vous recommandez quelque chose en particulier ? Google me renvoie vers Fundation, mais il y a peut-être une transition plus douce.

----------


## Nilsou

C'est cool, par contre petite nuance : L'apprentissage machine c'est très vaste aussi, c'est juste l'apprentissage machine qui est fourni clé en main qui est dans un domaine très restreint.

----------


## MrBeaner

Je ne voulais pas dire que le ML n'était pas vaste bien sûr  ::happy2::  Simplement, ma première impression est que y a plus d'embranchements dans le dev web (ce qui vient peut-être de mon préjugé qu'il y a plus de praticiens en dev web qu'en ML dans le monde).

----------


## Dross

> Je fais la spécialisation avec Django en ce moment et *j'aimerais bien changer de Bootstrap* et explorer une autre librairie front-end. Vous recommandez quelque chose en particulier ? Google me renvoie vers Fundation, mais il y a peut-être une transition plus douce.


Quitte à apprendre un truc de nouveau, je te conseillerai un framework JS plutôt que de reprendre un framework CSS, donc plutôt Angular2+/React/Vu.js/etc. C'est un peu plus raide, mais ça me semble plus pertinent que de multiplier les framework CSS qui font tous plus ou moins la même chose de la même manière.

----------


## Calys

> Je fais la spécialisation avec Django en ce moment et *j'aimerais bien changer de Bootstrap* et explorer une autre librairie front-end. Vous recommandez quelque chose en particulier ? Google me renvoie vers Fundation, mais il y a peut-être une transition plus douce.


Complétement d'accord avec Dross, perso j'aime beaucoup Bulma qui contrairement aux autres est un framework pur CSS, qui te permet quand même d'avoir une jolie app sans trop te prendre la tête, et de coupler ça avec un framework JS, comme Vue.js qui est sûrement le plus simple à prendre en main pour un débutant  :;):

----------


## deathdigger

> Option 5 : #define class struct
> 
> Je suis sûr que quelqu'un l'a fait (et je ne serai pas étonné si c'est Microsoft).


Je n'y crois pas trop, en C#, les classes sont private par défaut.




> Quitte à apprendre un truc de nouveau, je te conseillerai un framework JS plutôt que de reprendre un framework CSS, donc plutôt Angular2+/React/Vu.js/etc. C'est un peu plus raide, mais ça me semble plus pertinent que de multiplier les framework CSS qui font tous plus ou moins la même chose de la même manière.


Je me suis mis un peu sur Typescript + Angular, et c'est pas mal. Du coup, je crache un peu moins sur le JS et les frameworks JS  ::ninja:: 

Bon après, il a quand même fallu qu'un mec invente un langage objet typé pour que ça me plaise. Et il faut compiler ce code pour avoir du code JS qui n'est pas compilé. Narmol.

----------


## MrBeaner

> Quitte à apprendre un truc de nouveau, je te conseillerai un framework JS plutôt que de reprendre un framework CSS, donc plutôt Angular2+/React/Vu.js/etc. C'est un peu plus raide, mais ça me semble plus pertinent que de multiplier les framework CSS qui font tous plus ou moins la même chose de la même manière.


Merci ! Je vise à apprendre le JavaScript et ses frameworks, mais dans un deuxième temps, parce que (et je sais pas pourquoi), ça me donne pas envie. Là, comme je suis encore en train de me familiariser avec Django, c'était juste pour varier de Bootstrap.

Par contre, Bootstrap n'est pas qu'un framework CSS de ce que je comprends (ils sont passé de JQuery à JSdelivr d'après ce que je lis).

- - - Mise à jour - - -




> Complétement d'accord avec Dross, perso j'aime beaucoup Bulma qui contrairement aux autres est un framework pur CSS, qui te permet quand même d'avoir une jolie app sans trop te prendre la tête, et de coupler ça avec un framework JS, comme Vue.js qui est sûrement le plus simple à prendre en main pour un débutant


Merci pour Bulma, je vais tester alors. J'esquive le JS pour le moment, donc ça me permettra d'ajouter un framework JS les semaines suivantes  ::):

----------


## Cwningen

> Je n'y crois pas trop, en C#, les classes sont private par défaut.


Je parlais de C/C++, j'espère que Microsoft n'a pas refait les mêmes erreurs avec le C#. Les headers C de windows sont remplis de macros qui ont parfois des noms gênant. Le problème le plus courant ce sont les "min" et "max" de windef.h (peut être éviter en définissant NOMINMAX). Il y a également un "#define interface struct" dans objbase.h qui ressemble plus à l'horreur que j'avais suggérée. Normalement ils ne redéfinissent pas les mots-clés standards, mais leur tendance à ajouter des faux mots-clés à base de macros est suffisamment chiante pour mériter une petite insulte de temps en temps.

----------


## Dross

> Merci ! Je vise à apprendre le JavaScript et ses frameworks, mais dans un deuxième temps, parce que (et je sais pas pourquoi), ça me donne pas envie. Là, comme je suis encore en train de me familiariser avec Django, c'était juste pour varier de Bootstrap.
> 
> Par contre, Bootstrap n'est pas qu'un framework CSS de ce que je comprends (ils sont passé de JQuery à JSdelivr d'après ce que je lis).


Oui y'a un poil de JS mais ça n'est pas ce qu'on appelle un framework JS. 

En gros le JS dans Bootstrap et les autres c'est souvent que du cosmétique, des animations, ce genre de trucs. C'est du JS tel qu'il était utilisé en 2000, s'il est désactivé, le site marche quand même.

Les Framework JS au contraire inversent la situation, ce n'est plus le HTML qui sers le JS mais le JS qui sers le HTML généré à la volée. Donc si je JS est désactivé, rien ne s'affiche (c'est son point faible). Par contre son point fort c'est que ça se comporte comme une application desktop : tu charge tout au départ et après ça ne fait plus que des appels REST sur des API. Et comme c'est le JS qui génère le HTML tu a tout ce qui est templating, databinding, etc qui sont tous compris de base et fonctionnel. 

L'avantage évident est que si tu veux un site web et une application desktop/tierces, les API sont déjà faites pour l'un et seront utilisées pour les autres. 

Si tu veux absolument rester sur la mise en forme, regarde donc alors du coté du SASS/SCSS : c'est beaucoup plus puissant que CSS et avec on peut presque se passer de frameworks CSS. Et rien n’empêche d'utiliser le SASS avec un framework pour avoir le meilleur des deux mondes.

----------


## Cwningen

> C'est du JS tel qu'il était utilisé en 2000, s'il est désactivé, le site marche quand même.


C'était le bon temps.  :Fouras:

----------


## deathdigger

Un petit jeune m'avait montré un site que tu pouvais utiliser en mode déconnecté. En gros, la BDD se chargeait sur le poste client, du coup, les accès étaient super rapides (passé le premier chargement), et surtout, tu pouvais faire des démos au client sans avoir besoin de Connexion web. Bien sûr, c'est géré automatiquement, si le site n'est pas accessible, c'est la version en cache qui s'affiche, sinon, la version en ligne.

C'est assez fou ce qu'on fait maintenant avec js et autres.

----------


## Dross

C'est ce qu'on appelle les PWA (Progressive Web App) ça s'installe via un service worker (un truc du navigateur) automatiquement au premier chargement et c'est toujours la version en cache qui est chargée (instantanée donc), si le site est mis à jour, la mise à jour est téléchargée en parallèle et sera montrée à la prochaine visite ou via un refresh (si vous avez déjà vu un site qui vous a dis qu'il y avait une mise à jour, c'est ce truc là). 

Le pire ? Ça s'active en 3 lignes de code sur les framework JS. 

Encore plus marrant ? Certains navigateurs (Chrome) proposent une "installation" quand ils détectent une PWA et alors ça te créer : une icône sur le bureau, et un wrapper de type Electron en utilisant juste le moteur du navigateur. Ça deviens vraiment indiscernable pour le néophyte d'une véritable application desktop.

----------


## Teocali

et certain peuvent même le faire sur les portables. Ce qui est nickel... quand les devs se sont un minimum cassé la n’entête à faire du responsive... Je te vois Atlassian. Je te vois et je te juge.

----------


## FB74

> C'est ce qu'on appelle les PWA (Progressive Web App) ça s'installe via un service worker (un truc du navigateur) automatiquement au premier chargement et c'est toujours la version en cache qui est chargée (instantanée donc), si le site est mis à jour, la mise à jour est téléchargée en parallèle et sera montrée à la prochaine visite ou via un refresh (si vous avez déjà vu un site qui vous a dis qu'il y avait une mise à jour, c'est ce truc là). 
> 
> Le pire ? Ça s'active en 3 lignes de code sur les framework JS. 
> 
> Encore plus marrant ? Certains navigateurs (Chrome) proposent une "installation" quand ils détectent une PWA et alors ça te créer : une icône sur le bureau, et un wrapper de type Electron en utilisant juste le moteur du navigateur. Ça deviens vraiment indiscernable pour le néophyte d'une véritable application desktop.


Ca me fait penser au lanceur d'Office de Windows.  ::P: 

Il fonctionne comme ça (et c'est pour ça qu'il y a parfois des messages d'erreurs).
Il lance une instance et s'il y a mise à jour, il la fait dans un espace virtualisé pour le prochain lancement.

----------


## MrBeaner

Merci pour vos lumières, ça me donne davantage envie de me pencher dessus  ::):  J'avais déjà vu le potentiel des opérations "client side" quand j'ai utilisé la librairie Bokeh pour la visualisation des données : il était possible de produire des graphiques interactifs en quelques lignes Python et de les exporter entièrement dans un fichier HTML (ce qui devient une option intéressante si on veut transmettre des données à quelqu'un qu'il peut facilement consulter au-delà du format .xlsx ou .csv).

----------


## Orhin

> Le pire ? Ça s'active en 3 lignes de code sur les framework JS.


Alors pour la partie purement technique oui.
Par contre pour la gestion des données ça peut être un poil plus complexe en fonction de ce que tu fais.

Mais ouais c'est quand même vachement pratique comme techno.

----------


## C4nard

> C'est ce qu'on appelle les PWA (Progressive Web App) ça s'installe via un service worker (un truc du navigateur) automatiquement au premier chargement et c'est toujours la version en cache qui est chargée (instantanée donc), si le site est mis à jour, la mise à jour est téléchargée en parallèle et sera montrée à la prochaine visite ou via un refresh (si vous avez déjà vu un site qui vous a dis qu'il y avait une mise à jour, c'est ce truc là). 
> 
> Le pire ? Ça s'active en 3 lignes de code sur les framework JS. 
> 
> Encore plus marrant ? Certains navigateurs (Chrome) proposent une "installation" quand ils détectent une PWA et alors ça te créer : une icône sur le bureau, et un wrapper de type Electron en utilisant juste le moteur du navigateur. Ça deviens vraiment indiscernable pour le néophyte d'une véritable application desktop.


Et tu peux encore aller à l'étape d'après, qui est de faire une TWA (Trusted Web App). Dans ce cas, ça permet carrément d'uploader une application Android (pas encore iOS a priori par contre) sur le store, et idem ça nécessite juste 2 fichiers de plus qu'une PWA  ::): .

----------


## deathdigger

Après, une TWA, je me méfierai, notamment au moment de traverser l'Atlantique.

----------


## FB74

Bundle d'ebooks:
https://www.humblebundle.com/books/m...ications-books

----------


## Sariyah

Hello les Canards,

J'ai cette année repris des études en LP. (dev multi-supports) Une UE comporte un projet collectif (groupe de 4)

Le thème étant la découverte du patrimoine de la ville, on a choisi de faire un mini RPG (type Secret of mana, toute proportion gardée évidemment...) à destination des plus jeunes.

Globalement l'idée c'est d'avoir une quête qui donne une ligne directrice et qui incite le joueur à se déplacer IRL sur certains sites (monuments etc) de la ville pour achever certaines quêtes et /ou débloquer une nouvelle zone. (donc géolocalisation sur mobile)
Pour le reste ce sera un RPG "classique" avec des quêtes ludiques qui renseignent sur le patrimoine et des combats simples au tour par tour.
On a choisi d'utiliser Unity. Les semaines passent et on va devoir rapidement avancer.

Est-ce que des canards sont connus pour connaître Unity ? Mon idée c'est simplement de pouvoir échanger et de prendre quelques conseils car j'ai le sentiment qu'on a sous estimé la complexité du projet et ça m'inquiète un peu. (et qu'il s'agit au passage d'un coeff 10 qui potentiellement peut planter mon diplôme  ::ninja:: )

J'aimerais bien également savoir ce que vous pensez du choix du moteur.

_(j'ai hésité à créer un topic puis finalement ça me semble pas mal ici dans un premier temps)_

----------


## Patate

Il existe un topic sur unity dans la section des créateurs de jeu vidéo. Tu auras peut-être plus de réponses là bas.

----------


## Thamior

Salut les canards,

Est-ce que certains d'entre vous ont déjà eu l'occasion de bidouiller LLVM (frontend C++, backend peu importe) : je souhaite notamment attacher des métadonnées à certaines variables et balader les métadonnées jusqu'à la génération de code (pour choisir une instruction plutôt qu'une autre). C'est un peu le même esprit que balader "volatile" pour savoir si je garde mon truc dans un registre ou non. Je suis 100% ignorant et la base de code a l'air plutôt énorme et bien abstraite. Si quelqu'un a des pointeurs sur par où commencer et surtout sur quoi éviter, ça m'intéresse. Si il faut lire un bouquin, pas de soucis.

----------


## Sariyah

> Il existe un topic sur unity dans la section des créateurs de jeu vidéo. Tu auras peut-être plus de réponses là bas.


Merci j'ai posté sur ce topic du coup.  :;):

----------


## Kamikaze

> Salut les canards,
> 
> Est-ce que certains d'entre vous ont déjà eu l'occasion de bidouiller LLVM (frontend C++, backend peu importe) : je souhaite notamment attacher des métadonnées à certaines variables et balader les métadonnées jusqu'à la génération de code (pour choisir une instruction plutôt qu'une autre). C'est un peu le même esprit que balader "volatile" pour savoir si je garde mon truc dans un registre ou non. Je suis 100% ignorant et la base de code a l'air plutôt énorme et bien abstraite. Si quelqu'un a des pointeurs sur par où commencer et surtout sur quoi éviter, ça m'intéresse. Si il faut lire un bouquin, pas de soucis.


Non je n'ai pas encore touché à LLVM, mais juste au cas où ça t'intéresse (si tu ne connais pas déjà) tu as ces attributs en C++ qui font un boulot similaire: 
https://en.cppreference.com/w/cpp/language/attributes (likely/unlikely/maybe unused)

Sans oublier les classiques: https://en.cppreference.com/w/cpp/language/declarations genre constexpr etc.

----------


## Thamior

C'est en effet ce genre de chose qui m'intéresse, mais à un moment, il semblerait que certaines informations disparaissent de l'IR et que la génération de code ne puisse donc pas en faire grand chose. Notamment, certains attributs standards de ton premier lien sont surtout utiles au frontend et on a donc pas de raisons de les propager.

Il y a fort à parier qu'en suivant la façon dont "volatile" est traité j'arrive à quelque chose (puisque "volatile" impacte l'allocation d'un registre vs. non) mais n'étant pas encore familier de l'infrastructure, partir là dessus est peut-être un contresens.

----------


## ook4mi

> Bundle d'ebooks:
> https://www.humblebundle.com/books/m...ications-books


C'est moi ou les titres des bouquins veulent pas dire grand chose ?  ::P:

----------


## gros_bidule

Yeah, certains bouquins inspirent aussi confiance qu'un jeune disant être formé au Cloud parce qu'il a eu 2 heures de cours sur le sujet à son école d'ingé  :^_^: .
Bon, on dira que dans le lot il y a sûrement de bons bouquins, et d'autres qui finiront en presse-papier. Les bundles quoi. Mais ça doit valoir le coup pour qui le sujet l'intéresse, pas de soucis.

----------


## FB74

> C'est moi ou les titres des bouquins veulent pas dire grand chose ?


Faut ramener ça au prix proposé.  ::P:

----------


## vectra

Ben ce sont des IA qui rédigent le livre, choisissent la couv' dans un pool aléatoire de gravures libres de droits, et ben pareil pour le titre.
 ::siffle::

----------


## GrandFather

> Ben ce sont des IA qui rédigent le livre, choisissent la couv' dans un pool aléatoire de gravures libres de droits, et ben pareil pour le titre.


...et des IA balaises, elles arrivent même à générer des oxymores :




> Modern Fortran


 ::ninja::

----------


## gros_bidule

Ca manque quand même de nich.... heu de bouquins sur WinDev. Nan ? D'ailleurs, pourquoi ne trouve t-on pas de bouquins sur ce formidable L5G ?

----------


## vectra

Ils sont classés X à cause des illustrations.

----------


## GrandFather

> Ca manque quand même de nich.... heu de bouquins sur WinDev. Nan ? D'ailleurs, pourquoi ne trouve t-on pas (ou très très peu) de bouquins sur ce sujet ?


Ah oui, tiens, bonne question... T'as regardé dans la pile de revues mise à disposition dans ton salon de coiffure ?  ::ninja::

----------


## gros_bidule

Héhé, n'empêche, la dernière fois que j'ai reçu un courrier promotionnel de PCSoft, j'ai eu l'impression qu'ils avaient coupé toute une forêt tellement il y avait de papier. Et vidé l'Erika pour le plastifié.

Mais yeah, on pourrait évaluer en partie la popularité d'un langage ou d'une techno par rapport au nombre de bouquins qu'il y a dessus. Et pour WinDev, soit c'est une techno franco-française que même les français s'en fichent, soit cet outil est tellement génial qu'il n'y a simplement pas besoin de bouquin.
Blague à part, leur manuel d'utilisation est le meilleur que j'ai jamais vu. Dommage que le reste soit.... spécial disons, et bcp trop cher. Je viens de faire un tour sur leur boutique pour le fun : 1600€ l'ide (pardon, le "rad"), ou seulement 990€ si tu dits que tu utilises un autre langage de prog ou bdd. Puuuurééééééée.

----------


## GrandFather

Leur secret, c'est qu'ils ne ciblent pas les développeurs, mais plutôt les « amateurs éclairés », ceux qui ont quelques notions de SQL et qui font l'admiration de leur hiérarchie en bidouillant des macros Excel récupérées sur le net. Et ça marche, du moins au début leur RAD permet d'arriver avec peu d'efforts à un résultat correct et fonctionnel. Là où ça va coincer, c'est sur la maintenabilité et sur l'évolutivité, et surtout sur la montée en charge, mais ce sont tous de vilains mots inventés par ces développeurs élitistes pour dénigrer le travail des autres...  ::rolleyes:: 

Un exemple typique : un des projets sur lesquels travaille mon équipe en ce moment est le remplacement d'un site intranet développé avec WebDev par un DBA, en marge de son activité principale, et qui vient de partir à la retraite. On balance tout et on le remplace par du Symfony/Vue.js.

----------


## FB74

> Merci j'ai posté sur ce topic du coup.


Bundle Unity sur Humble Bundle:
https://www.humblebundle.com/softwar...-2021-software

----------


## Came Yon

> ...et des IA balaises, elles arrivent même à générer des oxymores :
> 
> 
> 
> 
> 			
> 				Modern Fortran


 :tired: C'est pas bien de dire du mal des languages anciens vénérables 



Spoiler Alert! 






 ::ninja::

----------


## rOut

> Salut les canards,
> 
> Est-ce que certains d'entre vous ont déjà eu l'occasion de bidouiller LLVM (frontend C++, backend peu importe) : je souhaite notamment attacher des métadonnées à certaines variables et balader les métadonnées jusqu'à la génération de code (pour choisir une instruction plutôt qu'une autre). C'est un peu le même esprit que balader "volatile" pour savoir si je garde mon truc dans un registre ou non. Je suis 100% ignorant et la base de code a l'air plutôt énorme et bien abstraite. Si quelqu'un a des pointeurs sur par où commencer et surtout sur quoi éviter, ça m'intéresse. Si il faut lire un bouquin, pas de soucis.


J'ai un peu tripoté dedans il y a un moment, et même si c'est toufu c'est plutôt bien organisé j'ai trouvé. Mais pour ton truc, si c'est ajouter un attribut pour l'utiliser au codegen alors il va sans doute falloir taper dans toutes les couches.

Après niveau conseils je ne sais pas trop, mais perso j'ai trouvé qu'en cherchant des trucs similaires à ce que je voulais faire j'arrivais quand même bien à tirer sur les bouts et à voir ou ça menait. Le code est complètement documenté en doxygen aussi, qui est pas mal pour naviguer ou rechercher, même si c'est aussi assez gros. Pas sûr du tout qu'un bouquin soit adapté, surtout vu la vitesse d'évolution du code. A mon avis la seule méthode c'est de prendre sa respiration et mettre les mains dedans un bon coup, quitte à tout réécrire plus tard quand on a compris comment ça marche.

- - - Mise à jour - - -

Pour la vue d'ensemble, en gros t'as Clang pour la partie parsing C/C++ (dont le code est dans un répertoire clang/ dédié avec son organisation propre), qui génère ensuite de l'IR LLVM dont le code est en gros dans llvm/lib/IR, puis MC qui s'occupe de la génération du code machine générique, dans llvm/lib/MC, et les éléments spécifiques à l'architecture dans llvm/lib/Target.

Le reste ça sert à rien :3

Et normalement à tous les niveaux tu as moyen de dump la représentation intérmédiare ou interne. Par exemple clang -ast-dump ou -S -emit-llvm, llvm aussi a plein d'outils en ligne de commande pour manipuler et repartir du bitcode ou de l'IR texte au besoin.

----------


## Thamior

> J'ai un peu tripoté dedans il y a un moment, et même si c'est toufu c'est plutôt bien organisé j'ai trouvé. Mais pour ton truc, si c'est ajouter un attribut pour l'utiliser au codegen alors il va sans doute falloir taper dans toutes les couches.
> 
> Après niveau conseils je ne sais pas trop, mais perso j'ai trouvé qu'en cherchant des trucs similaires à ce que je voulais faire j'arrivais quand même bien à tirer sur les bouts et à voir ou ça menait. Le code est complètement documenté en doxygen aussi, qui est pas mal pour naviguer ou rechercher, même si c'est aussi assez gros. Pas sûr du tout qu'un bouquin soit adapté, surtout vu la vitesse d'évolution du code. A mon avis la seule méthode c'est de prendre sa respiration et mettre les mains dedans un bon coup, quitte à tout réécrire plus tard quand on a compris comment ça marche.
> 
> - - - Mise à jour - - -
> 
> Pour la vue d'ensemble, en gros t'as Clang pour la partie parsing C/C++ (dont le code est dans un répertoire clang/ dédié avec son organisation propre), qui génère ensuite de l'IR LLVM dont le code est en gros dans llvm/lib/IR, puis MC qui s'occupe de la génération du code machine générique, dans llvm/lib/MC, et les éléments spécifiques à l'architecture dans llvm/lib/Target.
> 
> Le reste ça sert à rien :3
> ...


Merci pour les pointeurs, je crois que j'ai juste à me motiver et à m'y mettre...Sauf si je trouve un volontaire  ::ninja::

----------


## Captain_Cowkill

Salut à tous !

Je reviens donc après mes moults questions/recherches ici même concernant ma reconversion pro dans le dév web.

Je tiens une nouvelle fois à remercier la personne (j'ai oublié son pseudo) m'ayant orienté vers le programme MDN dév web front end. C'est vraiment complet (on apprend pas simplement à coder, on nous explique bien tous les tenants et aboutissants) et bien expliqué. Hormis quelques mots parfois dur à "traduire" vu que tout est en anglais, je navigue tranquillement.
Je me suis collé dessus depuis le 04 janvier et ça avance gentiment (1h30 à 2h00 d'apprentissage tous les soirs après le boulot, et aussi le weekend sauf break histoire de ne pas me dégoûter).

Je commence à entrevoir le premier projet que je pourrai faire, ce qui risque bien sûr de changer au cours du temps.

Voilà, c'était la tranche de vie  ::):

----------


## MrBeaner

> Salut à tous !
> 
> Je reviens donc après mes moults questions/recherches ici même concernant ma reconversion pro dans le dév web.
> 
> Je tiens une nouvelle fois à remercier la personne (j'ai oublié son pseudo) m'ayant orienté vers le programme MDN dév web front end. C'est vraiment complet (on apprend pas simplement à coder, on nous explique bien tous les tenants et aboutissants) et bien expliqué. Hormis quelques mots parfois dur à "traduire" vu que tout est en anglais, je navigue tranquillement.
> Je me suis collé dessus depuis le 04 janvier et ça avance gentiment (1h30 à 2h00 d'apprentissage tous les soirs après le boulot, et aussi le weekend sauf break histoire de ne pas me dégoûter).
> 
> Je commence à entrevoir le premier projet que je pourrai faire, ce qui risque bien sûr de changer au cours du temps.
> 
> Voilà, c'était la tranche de vie


Bravo et keep it up ! Je viens de me pencher sur la partie Javascript pour compléter les cours que je suis (et parce que je suis pas très à l'aise avec ce langage encore). C'est cool, même si je suis plus attaché au format vidéo.

Il me semble par contre que tous les textes offrent une version française dans le menu select en haut à droite des pages  ::): 

Si tu souhaites compléter les textes que tu lis avec une ou deux heures de cours (en anglais seulement par contre, mais tu les sous-titres anglais sont peaufinés) : https://youtu.be/zFZrkCIc2Oc
Les vidéos de ce cours ne sont pas référencées sur YouTube, tu peux les trouver ici : https://cs50.harvard.edu/web/2020/

----------


## Orhin

Cool que vous restiez tous les deux motivés !
Hésitez pas si vous avez des questions, y'aura du monde pour y répondre.  :;):

----------


## Captain_Cowkill

Pour les trads ça varie, le français n'est pas toujours dispo. Et puis je préfère en anglais, ça me permet de bosser la langue (une habitude) et je m'y retrouve plus facilement en terme de recherches.

Merci pour le lien, c'est toujours une bonne idée pour compléter  ::): 

- - - Mise à jour - - -




> Cool que vous restiez tous les deux motivés !
> Hésitez pas si vous avez des questions, y'aura du monde pour y répondre.


Merci  ::): 

Et sinon, je suis remonté un peu dans le topic et c'est GrandFather qui m'avait conseillé MDN. Du coup cœur avec les doigts pour lui.
Pour les autres aussi, évidemment  ::P:

----------


## MrBeaner

> Cool que vous restiez tous les deux motivés !
> Hésitez pas si vous avez des questions, y'aura du monde pour y répondre.


Merci  ::):  J'en ai toujours tout un tas, mais c'est souvent plus facile de googler que d'essayer d'expliquer mon problème ici  ::ninja::  Mais je n'hésite pas oui  ::):  Comme je tiens deux sites en PHP (Wordpress et Prestashop), j'ai des raisons de m'y mettre. Mais le langage m'attire pas trop. Flask et Django, ça me parle beaucoup en tout cas !

Pour mon site perso, je pense que je vais le faire avec Git Pages. Comme tout sera en statique. Et j'utiliserai GCP pour mes petites app en Django.

@Cowkill : Je fais également tout en anglais, c'est plus cohérent avec le code  ::):

----------


## Captain_Cowkill

Dites, j'aurai une question pour les gens travaillant dans le milieu du développement Web et, si possible, ayant un œil sur le recrutement (ou avec un contact dans le milieu).

Je suis en train de me former actuellement en "autodidacte" mais sans passer par une formation diplômante (genre Openclassrooms ou équivalent). Je me tâte à payer une formation de ce genre, mais je risque d'avoir du mal à suivre le rythme en plus de mon boulot. Pas possible non plus de faire de l'alternance vu que ça demande d'avoir 29 piges ou moins et que de toute façon je ne pourrai pas me permettre de toucher 900€ par mois.

Du coup, à votre sens, est-ce que je vais droit dans le mur ? Ou est-ce que mon projet de formation avec pratique perso (plus création d'un portfolio) est toujours jouable ? Des éléments à ajouter peut-être ? Stéphanie de Monaco ? Il me semble avoir lu dans les pages précédente que j'étais sur la bonne voie (comte tenu de mon parcours et de ma situation actuelle), mais ma conseillère APEC m'a encore foutu le doute (comme à chaque entretien avec elle).

Merci les canards  ::):

----------


## Kamikaze

Ce qui t'aidera plus que quoique ce soit c'est d'avoir un portfolio, héberge quelques exemples de création webs (sites, apps, ce que tu veux) que tu peux linker lorsque tu postules et même montrer en entretien.

Je suis pas sûr que l'aspect "diplome" aide plus que ça.

Pour le recrutement le schéma type c'est un RH qui va filtrer simplement basé sur les mots clefs entre l'annonce et ton CV, ça c'est la partie facile. Ensuite tu rencontres les gens avec qui tu vas travailler, et si t'as déjà des exemples prêts de ce que tu sais faire, c'est très très apprécié.

----------


## vv221

> Je suis pas sûr que l'aspect "diplome" aide plus que ça.


Pour ma part ça avait pas mal débloqué la situation. Après, de manière amusante, il me fallait juste _un_ diplôme, pas forcément celui correspondant au poste que je vise. Ma certification de "développeur logiciel" m'a par exemple surtout ouvert des postes en administration système  :;): 

À mon avis le diplôme sert seulement à atteindre l'entretien, ensuite c'est surtout les compétences réelles qui jouent pour l'embauche.

Il y a un biais quand même : ma formation (même si pas fameuse) m'a permis de connaître pas mal de monde bossant dans l'informatique autour de chez moi, « l'effet réseau » a sûrement joué un rôle important en plus du diplôme.

----------


## Dross

Le problème c'est que les boites ne sont pas homogènes de ce coté là. 
Si tu tombe sur une secrétaire/RH qui filtre tout sur des critères à la con "pas de diplôme => poubelle" tu n'atteindra pas l'entretien. Mais c'est aussi pour ça qu'il ne faut pas hésiter à essayer de remonter sur un poste interne techno pour essayer de postuler auprès de la bonne personne, le fameux "tu ferme la porte, je passe par la fenêtre". C'est aussi un excellent moyen de montrer sa motivation. 

Perso je pense que le portfolio fait encore beaucoup dans notre domaine, et si tu bloque sur des cons qui ne jurent pas par ça, bah honnêtement t'a pas envie de bosser pour eux donc c'est pas tellement un problème. 

Mon premier emploi je l'ai eu alors que : j'étais débutant et ils voulaient un senior, n'avais pas encore fini les démarches pour travailler dans le pays. Mais mes projets pro et perso les ont convaincu que j'étais celui à prendre (alors qu'il y avais d'autre candidats qui auraient mieux correspondu sur le papier). Pareil pour mes stages d'école d'ing. Et c'est toujours le cas aujourd'hui (en entretiens j'ai juste à parler de mes réalisations, ça suffit souvent largement).

----------


## Kamikaze

Voilà, le truc c'est que tout n'est pas uniforme/égal, et de mon point de vue la pondération penche fortement du côté du portfolio (vs. diplôme).

Comme dis au-dessus, certes une certaine proportion de boites feront une fixette sur les diplômes, mais c'est précisément le genre de boite que tu seras heureux d'éviter.

Perso j'ai les deux, j'ai les gros diplômes qui font jolis et j'ai le portfolio qu'il faut, mais quand je suis côté recrutement, les candidats qui très clairement s'en sortent le mieux à tous les niveaux, et je parle pas du recrutement seul, mais de l'évolution future dans la boite, de l'aisance générale, de la lucidité vis à vis du monde du travail et du domaine en particulier, etc. etc. c'est plus ceux qui savent s'exprimer au delà de leur diplôme, que ce soit via un portfolio (idéal) ou simplement en expliquant leurs expériences concrètes.

Ce que dis Dross au-dessus n'est pas surprenant, avec de vrais atouts les boites vont faire des efforts pour t'avoir, ça paye vraiment et ça paye solide.

Et j'ai la sensation que les mentalités changent et que les C.V.s pertinents l'emportent de plus en plus face aux labels dénués de sens, mais c'est p'têt mon côté idéaliste qui me fait dire ça.

J'veux dire quand tu t'es fait mordre à plusieurs reprise par des "seniors" "diplômés" qui coûtent chers et puent la merde, tu finis par sérieusement considérer les jeunes loubards motivés, passionnés, qui pigent ce qu'ils font.

----------


## William Vaurien

Perso je bosse dans le dev depuis 2004 et j'ai jamais vu de recrutement se faire hors diplôme, même si c'est complétement débile.

Première période: 2004-2011 -> SSII -> uniquement du bac+5 côté SSII et côté client (secteur bancaire)
seconde période: 2011-2016 -> fonctionnaire international -> minimum équivalent bac+3 et master privilégié. La grosse blague c'est que les collègues avec un niveau bac+3 faisaient le même job que les autres avec un salaire 20% moindre... 
période en cours -> fonctionnaire au pays du gruyère -> recrutement avec filtre sur diplôme bac+5 aussi pour les français (mais équivalent bac+3 min pour les suisses pour des raisons politiques). 

J'ai vu très peu d'autodidacte et de 'techniciens'  (au sens IUT) au cours de ma carrière, et seulement les plus anciens.

J'ai entendu des fois dire que bidule avec son 'petit' diplôme il ne sera jamais aussi bon que nous autres avec notre diplôme de génie. C'est drôle à entendre quand bidule à 55 piges et qu'il gère parfaitement son domaine.

J'imagine qu'avec un bon porte folio tu peux aller taper aux portes et te trouver une startup et/ou une boite dirigé par quelqu'un de visionnaire et/ou dans un pays anglo-saxon (un certain Elon M. aurait dit "I “don’t care if you even graduated high school,”) 
Mais en France ça va resté malheureusement un peu compliqué.

Mais j'ai vu aussi des gens issus des recrutements de la bulle internet de 2000 sans diplôme d'info faire vraiment de la grosse merde... donc le diplôme (et la formation derrière surtout) joue un peu des fois quand même.

----------


## Dross

Il faut aussi avouer que même si le diplôme n'est pas nécessaire et encore moins suffisant, ça n’empêche pas d'avoir des bons profiles chez leurs détenteurs aussi. 

Je suis le premier à dire que je pense que c'est secondaire... mais je suis sur-diplômé (prépa, école d'ing bien classée, MSc d'université étrangère, on m'a même proposé un double-Phd mais j'ai dis stop). C'est facile pour moi de dire ça et j'en ai bien conscience. 
J'ai aussi remarqué dans nos stagiaires deux types de profils dans ceux qui suivaient un cursus ingénieur : ceux qui avaient fait prépa (classique ou intégrée) et ceux qui venaient de DUT, les premiers étaient plus curieux/créatifs/débrouillard en général que les seconds (qui visiblement voyaient l'ingénieur que comme un technicien mieux payé). 

(je parle de tendance, je sais que des exceptions existent - et j'en connais aussi). 

Donc oui, forcément, les formations que tu a suivi te définissent un peu aussi et ça a son importance. 

Mais on a aussi tous connu ces rigolos qui ne voulaient pas toucher à la technique et devenir des "managers", des "chefs d'équipes" sorti d'école, et ça je pense que c'est le fond du problème, au moins un autodidacte il aime ça, il a envie d'apprendre, il veux en faire tout les jours. C'est pour ça qu'un portfolio pour moi c'est le top du top : ça me montre que tu aime ça (réellement) et que tu sait déjà livrer quelque-chose (maturité/pragmatisme). 

Sur deux candidats, un qui a un portfolio canon et pas de diplôme et un autre ou c'est l'inverse, je prends le premier sans hésiter. 
Mais s'ils ont tout les deux un portfolio canon je prendrais le plus diplômé.

Dans le cas d'une reconversion, de toutes manières t'est déjà fiché, t'a pas fait la voie royale à tes 20 ans, ça ne se rattrape pas dans la tête de ceux qui réfléchissent comme ça. Et c'est pas les formations du soir qui te donnerons le même lustre. 
Donc faut se focaliser sur ce qui a réellement de la valeur pour ceux qui ne se limitent pas à la surface : tes capacités, et comme se vanter ça tout le monde sait faire, le faire en montrant des réalisations concrètes via un portfolio.

Et après faudra dénicher les boites qui ne raisonnent pas avec des abaques d'école pour les postes recherché, et ça existe, j'ai même l'impression qu'on s'américanise de ce coté là et que ça existe de plus en plus.

De toutes manières, le diplôme c'est pour trouver le premier poste, après... ça sert quand même plus à grand chose.

----------


## gros_bidule

Yeah, le facteur chance a quand même une sacrée importance ^^. Des personnes font face à des boites qui ne voient que le diplôme, d'autres c'est l'xp ou le feeling... bref, je pense qu'il faut garder à l'esprit qu'il y a bcp d'entreprises en France et dans le monde, et qu'il ne faut donc pas désespérer si tu as vécu des déceptions ou des échecs. Il y a de la diversité dans les PME, les grosses boites, les startups, l'institutionnel (pour celui-ci j'ai un doute, jamais connu), etc, et même dans le sadisme chez les ESN. 
Et ne pas hésiter à changer sa façon de chercher des boites, car si tu te contentes d'attendre que des chasseurs de tête te trouvent sur Linkedin, tu auras un taux élevé d'entreprise pourraves. Mais bon, tu n'apprends pas ça à l’école, donc c'est parfois compliqay.

[HS] C'est drôle, sur le  topic de la programmation on parle un peu carrière alors qu'au même moment on parle un peu logiciels (AD, Windows...) sur le topic des carrières.
 ::trollface::

----------


## Kamikaze

C'est logique, AD et Windows n'ont rien à faire sur le topic de la sainte programmation, on mélange pas les torchons et serviettes et les chèvres sont bien gardées

----------


## GrandFather

Pour l'institutionnel, pas le choix, il faut un diplôme. C'est inscrit dans leur process de recrutement, et ça les rassure. Après, il n'est pas obligatoire que le diplôme soit nécessairement en phase avec le poste visé, ils cherchent plutôt à s'assurer d'un niveau plus que des compétences (qu'ils sont bien en mal d'évaluer correctement, de toute façon).

----------


## Captain_Cowkill

Merci pour vos retours  ::): 

Je sais que j'aurai dû viser tout ça il y a des années, j'aurai été dans une situation plus "confortable" qui m'aurait permis de suivre de vraies formations (sans forcément passer par la case école).
Là c'est totalement mort, et je m'en veux terriblement.

Mais bon, la motivation est là, j'espère que ça fera la différence.

Et puis je pourrai toujours essayer de me faire pistonner  ::P:

----------


## William Vaurien

Alors je ne voulais pas te démoraliser, par contre il faut être un peu réaliste: avec un parcours atypique il va falloir peut être chercher des jobs et/ou des patrons atypiques au moins au démarrage. 
Avec le risque aussi de commencer avec un salaire au ras des pâquerettes même si tu te débrouille aussi bien qu'un mec sorti d'école.

Et effectivement c'est encore plus important pour toi d'avoir des projets à montrer. Et le portefolio c'est parfois à double tranchant: si ce que tu montres n'est pas 'parfait' ça peut aussi donner une impression négative.

----------


## GrandFather

> Et le portefolio c'est parfois à double tranchant: si ce que tu montres n'est pas 'parfait' ça peut aussi donner une impression négative.


Ca, je relativiserais un peu. La démarche de montrer quelque chose a autant d'importance que ce que tu montres, du moins à mes yeux de recruteur occasionnel, et surtout face à quelqu'un qui débute.

----------


## Robix66

Personnellement je pense que c'est assez accessible d'avoir le pied à l'étrier pour du web sans diplôme (même si ça dépend d'où on est). Pour moi, le point important qui peut être vu en cours et zappé en autoformation, c'est l'aspect sécurité.


Bon, petite bouteille à la mer, j'ai des gros problèmes de comm' en ModbusTCP depuis Windows 10 1809, je sèche un peu sur le sujet. Par moments je me retrouve avec la connexion coupée et l'obligation de la rouvrir, j'arrive pas à trouver ce qui a pu changer.

----------


## vv221

> De toutes manières, le diplôme c'est pour trouver le premier poste, après... ça sert quand même plus à grand chose.


Bah ouais, mais sans premier poste, pas de deuxième poste  ::ninja::

----------


## Dross

En effet, mais c'est aussi pour rassurer sur le coté carrière : un autodidacte va probablement galérer un peu pour trouver son premier poste, mais dès qu'il sera en poste il obtiendra +200pts de charisme auprès des recruteurs. 
C'est un peu comme les femmes de ce coté là, c'est dès que tu as une copine que tout d'un coup elles sont toutes intéressées.  ::ninja::

----------


## gros_bidule

Yeah, ce n'est pas bloquant d'être en reconversion. En tous cas je peux témoigner de cas où ça s'est bien passé. Ex, dans une des dernières ESN que j'ai fait (Atos Worldline), on avait qqun en reconversion, qui venait de bio. Je ne sais pas comment s'est passé le recrutement, ni ce que pensait les RH et le manager, juste que dans l'équipe (ce qu'on se disait entre nous), cette personne n'a eu aucun soucis pour s'intégrer, se mettre au niveau (pour être productive, pas besoin d'être experte), et contrairement aux débutants, elle, elle avait déjà bossé et avait une maturité franchement appréciable ^^. Elle a fait sa mission puis est partie dans une autre boite, j'imagine pour un poste + intéressant.

----------


## Captain_Cowkill

> Alors je ne voulais pas te démoraliser, par contre il faut être un peu réaliste: avec un parcours atypique il va falloir peut être chercher des jobs et/ou des patrons atypiques au moins au démarrage. 
> Avec le risque aussi de commencer avec un salaire au ras des pâquerettes même si tu te débrouille aussi bien qu'un mec sorti d'école.
> 
> Et effectivement c'est encore plus important pour toi d'avoir des projets à montrer. Et le portefolio c'est parfois à double tranchant: si ce que tu montres n'est pas 'parfait' ça peut aussi donner une impression négative.


Alors le salaire n'est pas mon critère principale. Vu le salaire de merde que je touche maintenant ça ne me fait pas peur (tu parles à un "jeune" fonctionnaire).
Pour le recruteur atypique, j'ai bien conscience que je ne pourrai pas me faire débaucher tout de suite dans une grosse boite : elles ont tendance à recruter encore "à la française", à savoir qu'il faut 5 ans d'études, des diplômes et 5 ans d'expérience  ::P:

----------


## deathdigger

Pas forcément. En grosse SSII, tu peux te faire recruter quelques-soient tes diplômes, et si tu fais tes preuves, tu peux être augmenté rapidement.

----------


## Foksadure

> Vu le salaire de merde que je touche maintenant ça ne me fait pas peur (tu parles à un "jeune" fonctionnaire).


J'imagine qu'il y a une contrainte géographique, mais il n'y a pas de services informatiques dans ton administration ?
Parce qu'il existe des concours et examens professionnels de programmeur, souvent accessibles en interne et pour lesquels il y a des préparations.

----------


## Captain_Cowkill

> J'imagine qu'il y a une contrainte géographique, mais il n'y a pas de services informatiques dans ton administration ?
> Parce qu'il existe des concours et examens professionnels de programmeur, souvent accessibles en interne et pour lesquels il y a des préparations.


Je travaille pour une commune (territorial) et il y a bien un service IT mais ils ne font pas de dév.
Par contre je n'ai pas regardé pour les concours, c'est une idée en effet !

Après, j'ai un peu envie de partir de la fonction publique. Ce que j'en ai vu m'a écœuré (bon, c'est peut-être propre au boulot dans une commune aussi...).

----------


## vectra

Je viens de signaler le message précédent, pas la peine de vous exciter dessus.

Dites les gens,

On vient de me refiler une DLL/.h qui exporte du code C avec tout en vracos, à savoir définition de fonctions, de constantes, et même des tableaux globaux.
C'est juste dégueulasse et j'aimerais encapsuler cela pour que l'utilisateur de mon programme C++ n'ait pas à voir ces saletés dans le namespace global.

J'ai fait une classe qui inclut dans son .cpp le fichier .h, et je propose dans le .hpp mes propres accesseurs pour les méthodes publiques. Ainsi, pas de pollution, et les fonctions utiles sont bien disponibles et documentées dans un namespace dédié.
Je me demandais par contre s'il n'y avait pas moyen de faire plus simple, sans créer et compiler une classe d'encapsulation?  

Par exemple, pouvait-on modifier le .h qui m'a été donné pour tout encapsuler dans un namespace? J'ai essayé mais l'édition de lien s'est mal passée, vu qu'il aurait fallu récupérer le code source et préfixer les fonctions par namespace::...

----------


## Cwningen

Les noms de symboles en C++ sont différents du C. Ajouter un namespace change encore plus le symbole.

Tu peux tenter une bibliothèque header-only, ça fait un truc en moins à compiler.

----------


## Tramb

> Les noms de symboles en C++ sont différents du C. Ajouter un namespace change encore plus le symbole.
> 
> Tu peux tenter une bibliothèque header-only, ça fait un truc en moins à compiler.


Ca fait surtout un truc que tout le monde compile tout le temps :D

----------


## vectra

Rah, donc on garde le .cpp/.h et l'entrée dans le CMake...
Ca fait du code copy-pasta pour pas grand-chose, mais je n'ai pas d'autre alternative on dirait...

----------


## Gillete

> Pas forcément. En grosse SSII, tu peux te faire recruter quelques-soient tes diplômes, et si tu fais tes preuves, tu peux être augmenté rapidement.


Mon ancienne SSII, de taille moyenne/petite, travaillait énormément avec des juniors/reconversions. Si tu ne tombes pas sur une mission trop nulle, tu te fais la main correctement et ensuite on ne regardera souvent plus que tes expériences pro.

----------


## sosoran

J'ai toujours du mal à me motiver à faire de gros projet moi-même. Souvent la motivation est là les quelques premiers jours puis ca retombe invariablement. Du coup je m'amuse sur des projets de bien plus petite envergure comme "tremplin" motivationnels.

Là du coup j'ai fait deux bots simplistes pour discord et telegram. Le premier qui donne à intervalle régulier des avis random sur des jeux connus et réponds à quelques mots-clés avec une certaine probabilité. Le second consiste en un bot "Hagrid" qui se contente de dire "Tu es un [nom random], Harry!" à un certain intervalle aussi  ::P: 

Oui c'est vraiment la base de la base de la base, mais ça a vraiment l'avantage de me faire remettre la main à la pâte et me ressentir le plaisir d'avoir un truc qui fonctionne vite et ca donne de la motivation pour me lancer sur des trucs plus gros  ::):  . Je pense que mon prochain projet est de faire une page/site portfolio que je pourrai ensuite remplir au fur et à mesure.

----------


## gros_bidule

Si tu veux te faire un portefolio en dev, je te conseillerais de faire des choses modestes et surtout qui t'amusent. Parce qu'un gros projet ça demande trop de temps, et l'amusement c'est pour trouver un intérêt. 

On parle souvent de motivation comme si c'était un effort, tu te forces à être motivé comme tu peux te motiver pour rester jusqu'à 22h au bureau. Seulement, dans la majorité des cas, ce qu'on appelle "motivation" ce n'est rien d'autre qu'un "intérêt".
- Un gus a pondu une lib JS super connue et utilisée ? -> c'est parce que ça a démarré comme petit projet, le sujet le faisait kiffer et il trouvait ça utile. Le projet était potable, des gens ont commencé à l'utiliser, puis effet boule de neige (modulo un peu de chance) .... ça devient un beau succès.
- Ton chef de projet reste jusqu'à 22h pour faire de la facturation ? -> il essaie juste d'en faire + pour être bien vu de la hiérarchie en vue de passer un jour manager. Une fois manager, il sera incapable de faire ne serait-ce qu'1h de facturation, trop chiant (true story).
La motivation pour la motivation, ça tient 1 semaine puis tu en as marre, et c'est normal.

Après, honnêtement, l'intérêt d'un portfolio dépend bcp des technos. Portefolio pour un dev web, graphiste ou animateur 3D, ouaip, ça a peut être une utilité. Je ne pourrais pas confirmer, mais on voit pas mal de tels portefolios sur la toile.
Alors que des portefolio sur du dev de logiciel, de backend ou de trucs scientifiques, humpf, déjà ça ne court pas les rues, et je doute de l'intérêt. Perso, et ça vaut ce que ça vaut, j'ai beau avoir un github pour le plaisir qui se trouve être devenu un portefolio  (projets qui ont leur petite popularité), et une seule personne l'a remarqué en plus de 10 ans, et encore, c'est juste qu'elle a vu que je faisais parti du top 100 des devs Java sur github. Les projets en eux-même on n'en a même pas parlé. Vraiment, d'autres canards auront peut être une expérience différente sur le sujet, mais j'ai l'impression qu'un portefolio en dev (et je dis bien en dev), c'est au mieux has-been, sinon inutile.

Bref, fais toi plaisir sur tes projets. Tu apprendras des choses et tu verras ce qui te plaît. C'est déjà pas mal. Tu arriveras peut être à "placer" ton portefolio en entretien, mais si tu es entretien c'est que tu as déjà quasiment gagné ^^. Le plus dur c'est d'arriver jusqu'à l'entretien, passer les barrières à la con à base de RH incultes en dev et de stagiaires ou juniors chargés de trier les CV, et de gros cons racistes, homophobes ou sexistes.
Vois plutôt si tu peux faire jouer ton réseau, tes potes, anciens profs, ou privilégie les candidatures spontanées. Et surtout ne t'interdit de contacter des boites prestigieuses : bcp de monde n'ose pas franchir le pas et rate de sacrées opportunités. Google, Facebook, Gradle, Dell, Zalando (grosse surprise en Java), MisterAuto (PHP !), Renault Trucks (NoSQL !), Zenika, les banques, etc, tout ça, ils embauchent des experts mais aussi des juniors. Et vue la variété des origines dans ces boites, tu risqueras moins d'être recalé parce que tu n'es pas un mec blanc catho ^^.
Tu peux aussi voir chez Atos / Atos Worldline (et toutes leurs filiales/rachats genre Bull, Equens), ils embauchent à tour de bras et ce ne sont pas les plus mauvaises ESN. A moins de tomber dans LE service pourri, ça ira, les gens sont cool et y'a plein de projets. Et Atos se porte très bien, ça joue.

----------


## Captain_Cowkill

Merci pour tous ces bons conseils  ::):

----------


## sosoran

Oui merci bcp  ::):  j'ai pas trop le temps de répondre là maintenant mais je vais prendre le temps de digérer mentalement toutes ces infos et conseils extrêmement intéressantes !

----------


## William Vaurien

Le portefolio pour les devs backend c'est bien à double tranchant: j'ai fais un peu de recrutement récemment et les projets persos ne rentraient pas en critère premier de la sélection. 
Nous avons été voir les sites/github des candidats qui en donnait un dans leur CV mais pas un seul n'a fait pencher la balance dans le bon sens, car en fait assez souvent le portfolio sonne 'creux' (un github très peu utilisé), ou ne donne pas envie (avec un fatras de code farfelu ou avec un front vraiment horrible), ou envoie le message: en fait ma passion c'est mon projet perso, du coup votre projet d'entreprise c'est du pur alimentaire. (c'est finalement un peu le cas de tout le monde, mais quand tu recrutes t'as pas envie t'entendre ça).

Il y a peut être le cas du JD qui serait à part, pour un un recrutement type JD nous avions donné plus d'importance aux projets: participation à des hackatons, projets persos car il y a en effet moins d'expérience pro à prendre en compte pour faire la sélection.
Mais encore une fois on a jamais choisi de rencontrer quelqu'un en regardant son github. Par contre quelqu'un qui vient avec une démarche, qui explique pourquoi il a fait tel hackaton, pourquoi ce projet lui tient à coeur, et pourquoi c'est en relation avec le fait qu'il postule pour ce poste, on a envie de le rencontrer.

@Sosoran j'ai toujours pas compris ce que tu voulais vraiment faire (j'ai lu ton vieux CV) mais si tu veux jouer la carte du portefolio soit stratégique et ne t'éparpilles pas trop. 

Je ne sais pas trop comment ça se passe pour les autres au niveau recrutement, mon expérience récente de recrutement (5 postes en CDI en 2 ans) a été la suivante:
D'abord un épluchage d'une première liste d'environ 100CV avec mon autre collègue dev. Généralement on bloque deux sessions de 2 ou 3 heures dans une salle de réunion et on prend la liste dans l'ordre d'arrivée. Les RH filtrent très grossièrement les CV (un CV de cuisinier avait réussi à passer ce premier filtre c'est dire). Cette phase est longue et pénible: au bout d'un moment les CV se ressemblent et c'est dur d'être objectif: la décision devient de plus en plus au 'feeling'. Un CV mal construit, ou avec des trous pas expliqués va vite être rejeté, les autres sont mis en attente avec un score pour un deuxième tri plus approfondi. 
La lettre de motivation est également lue avec attention car c'est souvent ce qui différencie deux CV similaires. On prête attention à l'effort mis dans cette lettre pour filtrer. Un truc copié/collé d'internet se voit tout de suite, un truc écrit en anglais style startup qui ne colle pas avec notre boite institutionnelle aussi (autre version du copié/collé), un texte qui ne correspond pas à l'annonce ne donne pas envie non plus... Par contre une lettre qui donne l'impression que la personne a passé plus de 10 mn à réfléchir à pourquoi elle envoyait sa candidature donne un sacré paquet de points bonus. 
L'objectif en tant que candidat c'est de passer cet épluchage pour faire partie du top 10 et d'être convoqué en entretien, et il faut tout faire pour sortir un minimum du lot avec des arguments (le CV ne fait pas tout, mais c'est bien le premier truc qu'on regarde. La lettre de motivation ne doit pas faire 10 pages, mais elle sert aussi à voir en filigrane la personnalité du candidat, elle ne doit pas faire 3 lignes non plus.
Ensuite on convoque les candidats et là c'est un mélange d'évaluation technique (nous présentons un cas d'étude et on fait un jeu de rôle avec le candidat pour voir comment il réagit, pas d'énigmes ou de QCM pour nous), et d'évaluation de la personnalité (est-ce que j'ai envie de travailler avec cette personne pour les prochaines années à venir). Parfois on a un super CV et une lettre géniale, mais la personne en face fait vraiment peur ou se révèle incompétente au premier abord (mention spécial aux "experts", qui ne tiennent pas 5 mn de discussion technique niveau "pause des devs à la machine à café".

Dans les exemples de profils que nous avons retenus, et engagés: 
- JD en sortie d'école avec une passion pour le dev exprimée avec des projets persos et des participations à des hackatons --> seul cas ou le 'portfolio' a été décisif mais c'est surtout l'engagement du candidat et sa réflexion sur ce qui le motive qui nous a donnée envie de le rencontrer puis de l'engager.
- senior avec expérience juste ce qu'il faut par rapport au projet et très pro lors des entretiens
- senior avec expérience différente, mais avec véritable déclaration d'amour dans sa lettre aux technos que nous employions (pas super sexy pourtant!). Ce gars nous remonte le moral car il est content que nous l'ayons sorti de son projet chiant et il est heureux dans notre équipe et le fait savoir régulièrement. 

Donc il n'y a pas de recette magique mais il faut vraiment penser à qui tu envoies ta candidature (gros groupe --> cabinet externe et/ou robot et/ou des rh pas forcément très compétent, puis chef de projet et/ou des devs senior; petite startup --> le CTO de 23 ans) et comment tu tu pourrais faire pour donner envier de te rencontrer.

----------


## sosoran

Juste pour répondre que de mon côté je cherche un poste en dev (back ou front m'importe peu mais le peu d'expérience que j'ai est en back). Ma difficulté étant d'avoir les connaissances qui pourraient me manquer et convaincre les rh que je peux apprendre rapidement et faire ce métier même en ne sortant pas d'une faculté d'ingénierie computationnelle.

Mais j'ai plusieurs trucs qui me donnent bon espoir ces derniers jours, j'espère que ca va déboucher sur quelque chose.

En tout cas avoir ton expérience en tant que rh pour le recrutement est très intéressante !

----------


## William Vaurien

c'est plutôt 'rh sur le tas'  ::):  Donc je ne sais pas comment ça doit se faire théoriquement un recrutement...

----------


## Getz

Tiens William c'est marrant que tu parles de lettre de motivation, car ces huit dernières années je n'en ai pas écrit une seule lors de mes changements de poste !
Je pensais vraiment que dans le dev c'était quelque chose d'un autre temps, que les recruteurs de toute façon ne prenaient pas la peine de lire.
On ne m'en a jamais demandé non plus d'ailleurs.
C'est une demande de votre part d'avoir des lettres de motivation ou ce sont les candidats qui en envoient spontanément ?

----------


## William Vaurien

Je suis dans un domaine type grande administration public, donc oui la lettre fait partie des demandes institutionnelles du candidat.
Après je ne comprends pas très bien comment font les autres pour recruter avec un CV et un mail 'Yo je suis dev et je cherche du taf'. 
Ou alors c'est uniquement du recrutement par 'réseau' ?

Quand tu dois éplucher 100 CV c'est quand même difficile de faire le tri si tu n'as que ça.

Mais par contre ça rejoint le point 'postuler sur mesure': comprendre ce qu'il faut pour postuler et y consacrer du temps. Faire une version du CV avec les bonnes rubriques et mettre en avant des parties spécifiques, utiliser la bonne langue (l'anglais n'est pas toujours un atout), envoyer la bonne 'lettre de motivation' (lettre formelle ?, accroche dans le CV à l'anglo-saxonne ?, email direct au CTO de la startup ?).

Avant je bossais en SSII et en tant qu'expert avec 2 années d'XP' (à peine exagéré) je participais au recrutement du point de vue technique: donc là je regardais que le CV du candidat et je faisais les entretiens techniques (téléphoniques pour filtrer puis en face à face). C'était vraiment de l'écrémage pour dire si la potentielle recrue n'était une affabulatrice...

Maintenant, je bosse dans des gros groupes publics depuis 10 ans et c'est différents: on recrute des CDI qui peuvent rester potentiellement à vie dans la même équipe. J'ai pour la première fois de ma vie fêter le départ en retraite d'un dev et j'ai du faire mes preuves comme un jeune diplômé face à des 'vieillards' de 50 ans alors que j'allais sur mes 40 ans. Le recrutement est très différent pour le coup.

Mais à chaque fois que j'ai postulé j'ai toujours envoyer une lettre de motivation sous une forme ou une autre et ça a pour le moment toujours fonctionné (même pour des startups que j'avais sollicité dans un moment de doute)...

----------


## Robix66

> Après je ne comprends pas très bien comment font les autres pour recruter avec un CV et un mail 'Yo je suis dev et je cherche du taf'. 
> Ou alors c'est uniquement du recrutement par 'réseau' ?


C'est plutôt "Yo t'es dev' ? J'ai du taf, passe-moi ton cv".  ::ninja::

----------


## deathdigger

> Tiens William c'est marrant que tu parles de lettre de motivation, car ces huit dernières années je n'en ai pas écrit une seule lors de mes changements de poste !
> Je pensais vraiment que dans le dev c'était quelque chose d'un autre temps, que les recruteurs de toute façon ne prenaient pas la peine de lire.
> On ne m'en a jamais demandé non plus d'ailleurs.
> C'est une demande de votre part d'avoir des lettres de motivation ou ce sont les candidats qui en envoient spontanément ?


Depuis que je suis "officiellement" dev, je n'ai jamais envoyé de lettre de motivation, ni même postulé à une annonce  ::ninja::

----------


## sosoran

Après je tiens également à dire que quand tu as facilement une bonne centaine d'autres candidats qui postulent en même temps que toi (pour reprendre ton exemple), faut vraiment bien être sûr de son coup pour faire une postulation aussi personnalisée. D'un point de vue effort investi / chances d'un entretien, ça monte vraiment pas bien haut et ça devient très compliqué comme stratégie à suivre pour peu que t'ai pas une énergie débordante te permettant de passer des heures et des heures sur chaque postulation chaque jour pendant des semaines ou des mois (parce qu'il faut de base statistiquement beaucoup de postulation avant de décrocher un entretien).
J'ai eu plusieurs entretien également en envoyant mon CV seul, généralement avec des boites de recrutement par contre, et ça me semble beaucoup plus pratique : Si le cv semble convenir, mini appel de 5 min pour confirmer l'intérêt réciproque et on organise un appel plus long dans les jours qui suivent pour vraiment faire le point.
Ça prends moins de temps pour le postulant, moins de temps pour le recruteur, et on peut les deux consacrer notre temps à des choses plus intéressantes. 

Mais bon, ça reste un avis personnel, et je conçois (même si difficilement) qu'on puisse préférer écrire des lettres de motivations.

----------


## William Vaurien

Alors c'est pas forcément optimum comme manière de faire, je suis bien d'accord, et ça ressemble plus à une pratique du XXeme siècle...

Mais j'ai l'impression que de nombreux groupes fonctionnent encore comme ça, surtout ceux qui doivent ouvrir des postes et faire un recrutement suivant un processus encadré légalement. 
Alors pour l'investissement je te laisse juger: tu es au chômage, tu cherches du travail. Tu devrais donc consacrer au moins 8h par jour à te trouver un poste.

Donc passer 2h ou 3h à préparer un CV sur mesure, à préparer un paragraphe qui explique pourquoi toi et pas les autres, ça ne me parait pas être du gâchis. 
Sinon ton CV risque de finir dans la pile des mecs qui ont envoyé le CV moche, avec une lettre lambda, ou qui sont cuisinier et qui ont cliqué sur le mauvais bouton...

Après si tu es une star mondialement connue, comme deathdigger, tu n'as pas besoin de ça, ou si tu as un bon réseau, ce n'est en effet pas utile. 
Après il y a aussi l'effet géographique qui compte:
postuler pour une SSII à Paris n'est pas pareil que postuler dans une grosse entreprise familiale à Lausanne, qui est encore différent que postuler dans l'administration Genevoise, qui sera encore différent que postuler pour un groupe financier à Londres...

----------


## Kamikaze

La lettre de motivation est toujours là, sous une forme ou une autre. Généralement c'est simplement le mail dans lequel tu joins ton CV, plutôt que de répondre "Ok, voilà mon CV", tu expliques pourquoi ce poste correspond et tu peux rentrer dans le détail d'une expérience passée qui montre que ça colle, etc.

J'ai vu effectivement des cas où absolument tous les documents, mis à part le CV, sont ignorés, mais c'est généralement des mecs que je considère "pas bon" (je parle des recruteurs qui ne regardent que le CV). 

Quelques lignes pour expliquer que tu as commencé à te documenter sur le domaine en question, etc. montrer un intérêt sincère ça prend peu de temps et ça peut faire la différence.

Bon, je me rends compte qu'on est sur le topic de la prog' donc complètement hors sujet, mais tu peux préparer ça à l'avance. Tu fais une liste d'atomes crochus (biologie, dev, etc.) et si un truc colle dans l'annonce, paf, tu sors le morceau de texte "atomes crochus, biologie". C'est pas un effort si énorme honnêtement et y'a que de l'upside

----------


## Dross

> Le portefolio pour les devs backend c'est bien à double tranchant: j'ai fais un peu de recrutement récemment et les projets persos ne rentraient pas en critère premier de la sélection. 
> Nous avons été voir les sites/github des candidats qui en donnait un dans leur CV mais pas un seul n'a fait pencher la balance dans le bon sens, car en fait assez souvent le portfolio sonne 'creux' (un github très peu utilisé), ou ne donne pas envie (avec un fatras de code farfelu ou avec un front vraiment horrible), ou envoie le message: en fait ma passion c'est mon projet perso, du coup votre projet d'entreprise c'est du pur alimentaire.


Le portfolio c'est comme tout, il faut savoir le présenter/l'utiliser correctement.
De mon coté ça m'a permis de choper des stages, des formations et des postes où il y avait beaucoup de compétition, avoir des trucs (vidéos/sites/code/etc) en ligne ça permet aussi de montrer rapidement du concret en fin d'entretien pour "prouver" tes dires.

Quand tu dis que tu a fait une application pour déformer une surface NURBS au travers d'un volume BSpline, les gens t'écoutent poliment mais c'est tout, quand tu montre la vidéo là t'a un effet "wahou" et tu marque plein de points (j'ai choppé mon premier job avec cette vidéo). Et ce n'était ni la première ni la dernière fois que j'ai fais ça avec mes différentes réalisations. 

Après ça n'enlève en effet pas le besoin d'un CV et surtout une lettre de motiv (+ relance/résumé après rencontre, etc, bref l'usage quoi).

D'ailleurs ça me fait remarquer un truc : je ne met pas mon portfolio sur le CV, je le garde comme ressource pendant les entretiens si j'en trouve le besoin, c'est peut-être aussi là la différence avec ton expérience. Si tu avais eu un candidat qui aurai fait comme moi, soit sortir des projets lié à la tournure de l'entretien, t'aurai apprécié ou pas ?




> (c'est finalement un peu le cas de tout le monde, mais quand tu recrutes t'as pas envie t'entendre ça).


Je ne comprendrais jamais ce blocage qu'on a en France, voir même _obstination_ à vouloir faire semblant qu'on fait ça pour autre chose que l'argent. Moi j'adore programmer, même si j'étais rentier je programmerai, mais ça serai uniquement sur *mes* projets, pas celui d'un autre. Si je programme pour un autre c'est pour l'argent, rien de plus. Je ne comprends pas que ça pose encore problème d'être honnête par rapport à ça et je trouve ça même limite hypocrite (je ne te vise pas en particulier, juste la tendance générale). 

J'ai des compétences et je les vends au plus offrant qui aura un projet sympa et une équipe compétente (donc je reste intéressé par ton entreprise, sinon je serai pas en train de te parler ; mais je fais bien ça uniquement pour l'argent).
Le plus drôle c'est que je suis ultra exigeant sur la qualité du projet et de l'équipe en plus, marrant de penser que ça puisse être exclusif. 

Bon pour les débutants fraîchement sorti d'école c'est bien de pas trop la ramener là dessus, mais après franchement... je comprends vraiment pas pourquoi c'est un problème.

----------


## gros_bidule

Ha mais clairement, le mythe du dev qui s'investit corps et âme dans le projet, c'est souvent de l'hypocrisie. Ca l'est encore plus quand l'employeur, lui, ne fait pas l'effort d'investir dans l'employé  ::P: 

Mais il y a des boites qui attendent vraiment ça, sincèrement. A tord ou à raison, y'a les deux cas.
Je prendrais l'exemple d'une boite qui a aujourd'hui un gros site web dans le e-commerce : ça a commencé avec deux fondateurs (un commercial et un dev) + une bande de devs embauchés. Ils ont monté le projet ensemble, conquis des parts de marché, se sont donnés à fond (il paraît). Un des types me raconte même qu'ils partaient en vacances ensemble, la boite organisait des soirées de folie (j'en ai vécu une : digne des clips de rappeurs US avec piscine, DJ, jacuzzi dans une villa de luxe dans un coin très huppé à la montagne), ce genre de trucs. Qques années plus tard, il ne reste que 2 devs de l'équipe initiale, et le patron veut recruter. Lors de l'entretien d'embauche, il veut "des killers, comme avant". Je comprends qu'il souhaite monter une équipe de rêve v2, mais soyons honnête :
- sa boite n'est plus une startup (qqes années + 40 employés) et elle a un business stable
- il propose un salaire mi-na-ble aux devs (les commerciaux parcontre ça va, y'a du pognon)
Il n'a jamais eu ses killers. Des déceptions, des CDI qui restent 2 ans, des prestas qui ne passent même pas la période d'essai, ça oui  ::P: . Le seul qui semble faire l'affaire, c'est un type un peu malsain qui joue au fils spirituel du patron, et d'après les retours que j'ai d'anciens collègues, c'est gerbant. Mais ce type, là, il pourrait bien faire son trou.
En tous cas le patron semble sincère quand il veut de l'engagement : il a beau être un sale type, sa sincérité est le seul truc qui me semble vrai. C'est juste qu'il y a goûté, dans un contexte très particulier. Sa société a évolué mais pas lui.

Une grosse ESN ou même une PME, ouaip, lol, tu vends un service puis c'est tout hein ^^. Tu es professionnel, comme l'artisan qui va monter ta salle de bain. Ne pas le dire c'est de la politesse, mais il faut être réaliste. Sinon investir dans l'employé, pour de vrai. Investir avec des moyens (vrai bon PC, licences logiciels, vrai bureau, etc), du pognon, de la disponibilité, de la flexibilité, du confort, pas juste "on pense à toi mais heu pas trop quand même". Pour autant ça n'empêche pas de se poser pour faire son trou.
Ca me fait toujours rire quand un RH d'ESN me dit (ou à un proche) après une démission "mais on a investi sur toi !". Mes fesses tiens. C'est juste le délire d'un commercial 2.0 qui pense que mettre sa photo de profil sur Linkedin avec un pistolet Nerf c'est cool.

----------


## William Vaurien

Je vois de quoi vous parlez, mais je ne parle pas tout à fait de ça. Si lors d'un recrutement un gus se pointe avec son github avec des commits journaliers, qu'il me parle de son projet comme son fils, sa merveille, je vais peut être pas l'engager... Premièrement parcequ'il risque de travailler 1 an en mettant de côté et ensuite se mettre au chômage pour continuer son précieux. Ou deuxièmement, plus pernicieux, il va grignoter sur son temps de travail pour faire son projet... et se casser aussi dans 1 an... 
Alors pour ceux qui bossent avec des prestas qui restent 6 mois sur un projet ça semble peut être naturel, mais quand tu investi (formation, temps des seniors de l'équipe) pour faire monter un dev en compétences techniques et métier, c'est pas vraiment l'idée de le voir se barrer au bout de 12 mois... 

Autre cas, un gars nous a montré une espèce d'usine à gaz pour faire de la "méta-programmation sur les connections au base de données en Java" (ou un truc du genre). 1) on a absolument pas compris ce qu'il voulait faire avec son "oeuvre" ni même à quoi ça pouvait servir, 2) le gars avait l'air dément quand il en parlait, 3) il bossait dessus depuis des années sans avoir regarder à côté si des librairies tierces auraient pu au moins l'aider.
Au final on lui a dit "merci, bonne continuation": on avait eu peur qu'il nous foute son truc dans notre projet et qu'il soit ingérable (le côté savant fou). 

Alors pour un truc ponctuel c'est peut être une bonne idée. Tu fais une démo d'un truc en 3D, c'est cool. Tu veux faire de l'imagerie ou du jeu vidéo, c'est génial. 
Maintenant si tu postules sur un poste de dev backend pour des services administratifs, ben, bof: je (en tant que recruteur) vais me dire que tu es très doué, et que faire des services pour des CRUD avec 3 règles métiers en Java, ba en fait ça va pas le faire pour toi. Tu vas te faire chier comme un rat mort et te barrer à la première occasion... 
Si en face j'ai un dev un peu plus lambda mais fort sympathique, qui connait bien le jdk et qui suit un peu les évolution des frameworks les plus courant, je vais peut être choisir le dev lambda, même si au fond j'ai été super épaté par ta présentation et que je suis jaloux parque j'ai toujours été une brèle en 3D...

Donc double tranchant: ça ne rend pas toujours service.
Par contre je réitère: pour un JD qui n'a pas beaucoup d'XP ça peut être utile, mais encore une fois c'est pas toujours adapté: c'est très contextuel !

----------


## Dross

Je comprends mieux ton point, mais pour moi c'est vrai pour tout les documents/informations que tu donne en entretien. 

Par exemple j'ai un diplôme d'ingénieur en conception mécanique, c'est certain qu'en fonction de la boite où je postule (pour du dev) je vais le cacher ou le mettre en avant, si la boite fait du soft pour le bureau d'étude, ils vont adorer, si ce qu'ils font n'a rien à voir je ne vais certainement pas le mettre en avant (et il faut que je me prépare à répondre aux questions à la con qui seront posées sur le sujet).

En un sens, là les portfolios t'on donné l'heure juste sur l'incompatibilité de certains de tes candidats, mais si tu était tombé sur un type qui t'avais montré les illustrations idéales pour le poste ton avis serai probablement très différent.

----------


## vv221

> Alors que des portefolio sur du dev de logiciel, de backend ou de trucs scientifiques, humpf, déjà ça ne court pas les rues, et je doute de l'intérêt. Perso, et ça vaut ce que ça vaut, j'ai beau avoir un github pour le plaisir qui se trouve être devenu un portefolio  (projets qui ont leur petite popularité), et une seule personne l'a remarqué en plus de 10 ans, et encore, c'est juste qu'elle a vu que je faisais parti du top 100 des devs Java sur github. Les projets en eux-même on n'en a même pas parlé. Vraiment, d'autres canards auront peut être une expérience différente sur le sujet, mais j'ai l'impression qu'un portefolio en dev (et je dis bien en dev), c'est au mieux has-been, sinon inutile.


Jʼai lʼexpérience inverse ici : jʼai toujours été recruté suite au partage de mon "pet project". Mais il faut dire que cʼest un cas un poil extrême : il sʼagit dʼun projet logiciel que je dirige activement depuis 2013, sur une forge logicielle dédiée que je maintiens, intégré dans plusieurs distributions Linux…

Alors clairement en entretien dʼembauche ça claque, les profils un peu tech en face sont toujours impressionnés (le fait que ça tourne autour du jeu vidéo est aussi un atout). Mais il y a une contrepartie _majeure_ : lʼimplication que ça me demande mʼempêche dʼavoir un emploi à temps plein en parallèle, ce qui limite fortement les possibilités de postes que je peux prendre.

Et surtout ce genre de chose ne se planifie pas vraiment. Il sʼagit à lʼorigine dʼun tout bête exercice que je mʼétais improvisé pour apprendre les bases du développement logiciel. Et qui mʼa un peu ( ::ninja:: ) dépassé au bout dʼun moment…

---




> envoie le message: en fait ma passion c'est mon projet perso, du coup votre projet d'entreprise c'est du pur alimentaire. (c'est finalement un peu le cas de tout le monde, mais quand tu recrutes t'as pas envie t'entendre ça).


Ça je le dis cash en entretien dʼembauche. Bon, sans aller qualifier lʼentreprise de pur choix alimentaire, mais je dis bien dès le début que la priorité reste mon projet personnel et quʼen cas de conflit entre les deux cʼest lʼentreprise que je lâcherai, pas le projet auquel jʼai déjà donné des années de ma vie.

Jusquʼici cette honnêteté ne mʼa jamais fait manquer une embauche.

----------


## sosoran



----------


## Nattefrost

Tant que c'est honnête, si les deux parties sont au clair sur leurs attentes et leur investissement mutuel y a pas de raison que ça foire.
La difficulté c'est d'arriver à ce "point de clarté" entre les deux parties.

----------


## vv221

> Tant que c'est honnête, si les deux parties sont au clair sur leurs attentes et leur investissement mutuel y a pas de raison que ça foire.
> La difficulté c'est d'arriver à ce "point de clarté" entre les deux parties.


Pour moi ça fait même partie des critères au moment de choisir une entreprise.
Quand je signe un contrat cʼest généralement dans lʼidée de passer au moins quelques années dans une même boîte, alors si on nʼest pas capable de se causer franchement sur ce  genre de sujet dès le début, je préfère passer mon chemin.

----------


## gros_bidule

C'est pas évident. Parfois, les personnes (même des devs ou managers) que tu vois en entretien, tu ne les verras jamais une fois en poste. Leur discours peut ne pas correspondre à ce que tu vivras là-bas, en bien ou en mal.
Je ne dis pas qu'il faut mentir et jouer le jeu du bon employé, mais je n'accorde pas grande importance aux "valeurs" discutées lors d'un entretien. C'est juste du blabla  ::P:

----------


## Kamasa

Je sors d'un projet TypeScript-React-Recoil et je passe sur un projet javascript-React-Redux.

'tain c'est dur.
La gestion des états dans React par Recoil est tellement simplifiée, j'ai passé la journée à essayer de comprendre comment les états sont mis à jour par Redux. En l'occurrence dans le projet sur lequel j'ai atterrit.

Un conseil si vous avez l'occasion de partir sur un nouveau projet React et qu'on vous parle de Redux : proposez Recoil ! C'est encore parmi les "experimental features" de Facebook, mais c'est très avancé et très stable.

----------


## Sangoon

> Je sors d'un projet TypeScript-React-Recoil et je passe sur un projet javascript-React-Redux.
> 
> 'tain c'est dur.
> La gestion des états dans React par Recoil est tellement simplifiée, j'ai passé la journée à essayer de comprendre comment les états sont mis à jour par Redux. En l'occurrence dans le projet sur lequel j'ai atterrit.
> 
> Un conseil si vous avez l'occasion de partir sur un nouveau projet React et qu'on vous parle de Redux : proposez Recoil ! C'est encore parmi les "experimental features" de Facebook, mais c'est très avancé et très stable.


Je n'ai pas assez d'xp en recoil pour te contredire , mais je ne trouve pas complexe le système de mise à jour du state dans redux, c'est simplement des résolutions d'actions assurées par les reducers.

Par contre, dans ta nouvelle stack, c'est plutôt le retour à du js qui me parait la plus grosse perte, une fois qu'on a gouter au typescript, c'est dur de revenir en js dans des projets un peu gros je trouve.

Edit :  Ceci dit, recoil à l'air bien cool à utiliser aussi

----------


## Orhin

Assez d'accord.
Ceci-dit, Redux ça fait quand même pas mal de boiler-blate si tu l'utilises sans aucun autre outils/librairies.
Alors qu'avec du https://redux-toolkit.js.org/ ou autre, c'est quand même nettement plus plaisant à utiliser.

----------


## Kamasa

Diantre, en voyant ce que propose Redux Toolkit, je retrouve des trucs qu'il me semble avoir vu.
Peut être était-ce là la subtilité  :^_^:  J'ai suivi rigoureusement la doc Redux mais s'il y a cet outil en place sur le code, ca expliquerai pourquoi j'ai eu l'impression de rater une marche.
Je vais jeter un oeil  :;):

----------


## Kamikaze

Y'a des canards qui font du networking en c++ avec support ssl/tls?

Jusqu'à maintenant j'utilisais openssl directement, mais cette librairie me dégoute, la documentation est très mauvaise et la librairie est extrêmement maladroite dans sa présentation, ça a pas l'air de s'améliorer pour la 3.0. Bref je me suis fait un petit wrapper maison comme tout le monde j'imagine mais j'aimerais bien passer vers quelque chose de plus standard/éviter de réinventer la roue.

Je vois que Boost.Asio propose son propre wrapper pour openSSL, ça a l'air correct, j'ai pas l'impression que y'ait la moindre alternative de toute façon.

Qu'est ce que vous faites de votre côté? D'ailleurs même si c'est pas c++ curieux de savoir comment vous gérez cet aspect.

Sinon un peu la même remarque pour ffmpeg, certes la librairie est surpuissante, mais niveau documentation y'a de petits couacs, pour certains détails c'est vraiment la surprise au runtime, faut tester et voir. Ou alors aller vérifier le code source directement pour savoir ce qui se passe vraiment.

----------


## rOut

ffmpeg et openssl sont bien connus pour être dégueulasses ouais. Wine utilise gnutls pour faire ça, je n'y ai pas trop touché mais je crois que c'est plutôt propre et la doc m'a paru bonne.

----------


## Tramb

> Sinon un peu la même remarque pour ffmpeg, certes la librairie est surpuissante, mais niveau documentation y'a de petits couacs, pour certains détails c'est vraiment la surprise au runtime, faut tester et voir.


Oh oui. Oh que oui.

----------


## Cwningen

Bientôt* : D1861R0 Secure Connections in Networking TS

*Au moins 3 ans, mais pas garanti

----------


## Garrluk

Je n'ai jamais testé boost.asio directement mais mes collègues qui ont testé en parle souvent en mal.
A priori ça marche assez bien pour faire des trucs simples mais dès qu'on sort un peu de ce qui a été prévu on se retrouve à faire des bidouilles de métaprog dans tous les sens pour que ça marche comme on veut, avec l'explosion de la complexité du code et les temps de compile qui vont avec.
Mais ils sont assez "anti-boost" en général avec l'argument que ce qui est dans boost aujourd'hui c'est ce qui n'a pas été inclue en C++11 et que si ça n'a pas été inclue dans le standard c'est qu'il y a une raison. Et d'ailleurs leurs 2 exemples favori pour dire qu'il n'y a plus rien de bien dans boost aujourd'hui, c'est boost.Hana et boost.Asio.
Donc c'est pas forcément un avis super objectif.

----------


## Kamikaze

Wében jamais entendu parler de GNU TLS je vais jeter un oeil du coup, peut être un peu trop bas niveau concernant les abstractions mais la doc a l'air déjà bien plus réussie.

Ok je vais tester Boost.Asio et GNU TLS ou alors faire un truc un peu définitif pour mon wrapper openSSL et je reviendrai sur le topac si j'arrive à un truc qui me plait.

Concernant boost j'utilise un peu boost filesystem (iostreams) en attendant son intégration finale dans la lib standard (on y est presque selon les compilos) et de temps en temps quelques algos tout fait par soucis de confort. Genre récemment boost range parce que j'étais limité sur une certaine version de C++. Mais pas grand chose d'autre. Toujours été plutôt satisfait de ce qu'ils proposent (ah ouais sauf boost command line arguments, assez laid pour un problème aussi simple).

----------


## Cwningen

> Mais ils sont assez "anti-boost" en général avec l'argument que ce qui est dans boost aujourd'hui c'est ce qui n'a pas été inclue en C++11 et que si ça n'a pas été inclue dans le standard c'est qu'il y a une raison. Et d'ailleurs leurs 2 exemples favori pour dire qu'il n'y a plus rien de bien dans boost aujourd'hui, c'est boost.Hana et boost.Asio.


Non, boost c'est ce qui n'a pas été inclus dans le C++20. Mais bientôt*, ce ne sera plus que ce qui n'a pas été inclus dans le C++23**. Je n'ai jamais utilisé ASIO mais il semble que ce soit compatible avec le futur standard.

*voir post précédent
**ou C++26 ou C++29...

----------


## Nilsou

> Sinon un peu la même remarque pour ffmpeg, certes la librairie est surpuissante, mais niveau documentation y'a de petits couacs, pour certains détails c'est vraiment la surprise au runtime, faut tester et voir. Ou alors aller vérifier le code source directement pour savoir ce qui se passe vraiment.


fffmpeg de notre coté on faisait souvent ctrl-c ctrl-v du code source de mémoire, et après on allait voir dans le code. Ça prends pas tant de temps que ça tant que tu reste sur des applications classiques et que tu n'en change pas tout les 15 du mois.

----------


## ducon

Pourtant, ffmpeg est utilisé sur Mars.

----------


## rOut

Ben après y'a une différence entre utiliser un programme et une librairie, je pense que pour ffmpeg comme pour openssl, ça a d'abord été pensé comme des programmes opaques, dont l'interface en ligne de commande est à peu près claire et documentée. Le fait de vouloir tout embarquer comme des librairies c'est assez récent finalement, et changer un code avec autant d'historique pour en faire une librairie, c'est juste pas évident du tout.

----------


## vectra

> Je n'ai jamais testé boost.asio directement mais mes collègues qui ont testé en parle souvent en mal.
> A priori ça marche assez bien pour faire des trucs simples mais dès qu'on sort un peu de ce qui a été prévu on se retrouve à faire des bidouilles de métaprog dans tous les sens pour que ça marche comme on veut, avec l'explosion de la complexité du code et les temps de compile qui vont avec.
> Mais ils sont assez "anti-boost" en général avec l'argument que ce qui est dans boost aujourd'hui c'est ce qui n'a pas été inclue en C++11 et que si ça n'a pas été inclue dans le standard c'est qu'il y a une raison. Et d'ailleurs leurs 2 exemples favori pour dire qu'il n'y a plus rien de bien dans boost aujourd'hui, c'est boost.Hana et boost.Asio.
> Donc c'est pas forcément un avis super objectif.


Je comprends pas ce boost-bashing.
En 2014, tu faisais comment sans filesystem, thread, mutex? Tu passais sous Qt?

(Et program-options, c'est quand que ça rentre dans std?)

Si leur politique consiste à basher ce qui est sur boost mais à la fermer quand ça passe dans std...  ::rolleyes::

----------


## Le poussin

> Je n'ai jamais utilisé ASIO mais il semble que ce soit compatible avec le futur standard.


C'est Boost.Asio qui a servi de base au networking TS, ce qui assurait déjà une bonne base.  :;):  Il y a eu quelques ajustements après revue par le standard, et Boost.Asio a en quelque sorte "backporté" ces ajustements.

----------


## Kamikaze

> Ben après y'a une différence entre utiliser un programme et une librairie, je pense que pour ffmpeg comme pour openssl, ça a d'abord été pensé comme des programmes opaques, dont l'interface en ligne de commande est à peu près claire et documentée. Le fait de vouloir tout embarquer comme des librairies c'est assez récent finalement, et changer un code avec autant d'historique pour en faire une librairie, c'est juste pas évident du tout.


Yep exact, la ligne de commande est géniale. La librairie demeure cool mais quelques faux pas dans la doc'

----------


## Garrluk

> Je comprends pas ce boost-bashing.
> En 2014, tu faisais comment sans filesystem, thread, mutex? Tu passais sous Qt?
> 
> (Et program-options, c'est quand que ça rentre dans std?)
> 
> Si leur politique consiste à basher ce qui est sur boost mais à la fermer quand ça passe dans std...


Alors perso j'en sais rien, je fais surtout du très bas niveau, de l'embarqué et du GPU, donc boost j'y touche pas trop et quand je fais du C++ ça se limite souvent à du C avec des méthodes de classes et des namespaces.
Après ils sont du genre à réinventer la roue si un truc leur plait pas dans l'API, donc c'est pas forcément un exemple à suivre, je me contente de répéter ce que j'ai entendu.
Mais pour le coup, ils sont vraiment véhément envers boost.Asio.

Et non, ils bashent bien la stl aussi. Genre tout l'ancien filesystem (fstream et compagnie), l'absence de fonctions "utils" pour les strings (toUpper(), trim(), ...), les size_t pour les containers qui font des warnings dans tous les sens...

Le truc c'est pas de dire que ce qui est dans la stl c'est bien et dans boost c'est de la merde, c'est plutôt que avant c++11, boost servait de test pour ce qu'il était possible de mettre dans la stl (en gros quand quelqu'un proposait à un comité de rajouter quelque chose à la stl, la réponse était "met ça dans boost et après on verra"). Les trucs qui étaient prêt ont été rajoutés en 11, ceux pour lesquels il y avait 2/3 modifs à faire ont été rajoutés en 14, mais maintenant il ne reste que les trucs pas super utiles ou inutilement compliqués (encore une fois j'en sais rien, je ne fais que répéter).

----------


## Lazyjoe

> Le truc c'est pas de dire que ce qui est dans la stl c'est bien et dans boost c'est de la merde, c'est plutôt que avant c++11, boost servait de test pour ce qu'il était possible de mettre dans la stl (en gros quand quelqu'un proposait à un comité de rajouter quelque chose à la stl, la réponse était "met ça dans boost et après on verra"). Les trucs qui étaient prêt ont été rajoutés en 11, ceux pour lesquels il y avait 2/3 modifs à faire ont été rajoutés en 14, mais maintenant il ne reste que les trucs pas super utiles ou inutilement compliqués (encore une fois j'en sais rien, je ne fais que répéter).


C'est pas "avant C+11", c'est toujours plus ou moins le cas. Il y a des nouvelles libs qui arrivent à presque chaque release de Boost (et il y en a plusieurs par an), ce n'est asbolument pas un bloc monolithique mais plutôt un catalogue dans lequel on va cherry-pick ce dont on a besoin. Il faut faire le tri mais il y a de tout : les anciennes libs à succès rendues plus ou moins caduques par le standard (mais le standard n'intègre pas forcément tout, ça peut arriver qu'on ait besoin d'une fonctionnalité qui est restée dans Boost), des libs un peu oubliées qui végètent, mais aussi les nouveautés qui feront peut-être partie un jour du standard.

----------


## Captain_Cowkill

Dites les canards, est-ce que vous connaissez des sites ou autres ressources avec de bons exos pour s'entraîner en dév web ? Genre par thème ou langage.
Parce que les cours MDN avec quelques exos de temps en temps c'est chouette, mais 2 heures d'affilée avec 2 pauvres exos réglés en 3 lignes de code ça devient compliqué le soir après le taf par moment.

----------


## deathdigger

> Dites les canards, est-ce que vous connaissez des sites ou autres ressources avec de bons exos pour s'entraîner en dév web ? Genre par thème ou langage.
> Parce que les cours MDN avec quelques exos de temps en temps c'est chouette, mais 2 heures d'affilée avec 2 pauvres exos réglés en 3 lignes de code ça devient compliqué le soir après le taf par moment.


Si t'es prêt à payer et que tu parles anglais, Pluralsight est très bien.

----------


## Captain_Cowkill

Yup, je suis prêt à mettre des sous.

Les cours de MDN sont assez bons dans l'ensemble, mais ça manque d'exos pratiques. Et les exos c'est vraiment le truc qui me permet de casser le rythme un peu monotone du "j'apprends tout seul devant mon écran après une journée de taf".
Et c'est surtout le truc qui m'amuse.

Merci pour le tip.

----------


## gros_bidule

Les bouquins de Ninja Squad sont franchement pas mal. Enfin si le tutoiement ne te gène pas.
Etant nul en frontend et peu motivé, c'est un miracle qu'ils arrivent à retenir un peu mon attention ^^.
Ex : https://books.ninja-squad.com/vue

Après, on apprécie ou on apprécie pas le style, c'est un peu spécial.

----------


## Dross

Y'a pas mal de cours sur Udemy qui sont basés sur des projets complets, c'est pas mal car ça permet de les faire en même temps que le formateur (learning by doing) et on vois aussi le formateur travailler (pour découvrir les petit tricks de seniors). 
Comme toujours sur Udemy, ne pas acheter plein pot, c'est -90% plusieurs fois par mois.

----------


## MrBeaner

Les cours de CS50 sont gratuits et tu as des projets à réaliser pour la plupart (il y a aussi des corrections).

----------


## Captain_Cowkill

Merci mes canards  ::):

----------


## vectra

Je suis sous Visual Studio (VS) en ce moment.

Je travaillais sur un projet C++ dans ma nouvelle boîte, j'ai fait un essai viteuf sur VS. Ben je suis retourné rapidement sur CLion pour lequel j'ai une licence active...
Par chance, le fait de passer le projet sur CMake (pré-requis pour CLion) n'a pas eu d'impact sur le projet, d'autant que VS accepte d'importer le projet CMake et que ce dernier offre des perspectives de déploiement meilleures, il me semble.

Là, je passe pour un temps sur un projet C#, le temps d'une POC. On m'encourage à refaire un essai sur VS, mais je trouve que c'est juste imbitable.
Même pas possible de réassigner librement des raccourcis clavier... J'ai réussi, je ne sais comment, à faire fonctionner C-a pour début de ligne, mais tous les autres ont foiré lamentablement. Il faudrait que je purge totalement les raccourcis de VS pour avoir une chance de m'en sortir. Est-ce qu'au moins on peut appeler une fonction par son nom?

Quand je vais sur le marketplace pour chercher des plugins qui m'aideraient, eh ben je tombe direct sur Resharper  ::trollface:: 

Questions:
C'est normal que VS me semble être si nul? Je rate quelque chose ou bien y'a rien à retirer de cette aberration en .exe?
Même Microsoft semble avoir abandonné la partie, vu que VScode semble, lui, un peu plus moderne.
Ca me fait suer de retaper un abonnement Jetbrains en plus de CLion honnêtement. J'aurais aimé savoir me débrouiller avec le logiciel de référence de chez MS, mais y'a des limites à pas franchir.
Et quitte à rester chez Jetbrains, vaut-il mieux VS+Resharper ou bien passer directement sur un environnement 100% Jetbrains?


Je suis en plein mode rant, là. Sur la même machine, le passage de CLion à VS est une catastrophe. Même avec une jvm, CLion est agile et rapide en comparaison de VS, qui rame et parfois plante... Je suis sincèrement choqué; c'est pas juste du rant de linuxien.

Resharper fait planter mon VS... Wéé. Il plantait déjà avant mais c'était pas systématique.

----------


## Nattefrost

@vectra
Dans ton cas je resterai sur du full jetbrains, si ton équipe/environnement ne t'impose pas VS.

Ca va aller...

----------


## vectra

Il en faut bien peu pour briser un homme  :Emo:

----------


## Kamikaze

VS c'est de la merde.

A la limite si tu utilises les produits jetbrains qui se pluggent dans VS c'est mieux (Resharper, etc.) effectivement.

Mais oui VS est une daube, de la même manière que Windows et une bonne partie de leurs produits c'est de la daube mais domine le marché néanmoins.

- - - Mise à jour - - -

D'ailleurs truc marrant mais genre une bonne partie des devs "connus" que je suis sur les réseaux en tout genre on finit par poster un jour ou l'autre "VS c'est nul, vous me recommandez quoi?"

- - - Mise à jour - - -

Le dernier en date étant Noel Berry (le dev de Celeste le jeu)

Après des gens diront "pour programmer suffit de vi, donc VS fera l'affaire" mais bon...

- - - Mise à jour - - -

"VS plante" est d'ailleurs un meme très à la mode, ce truc est connu pour planter non stop

- - - Mise à jour - - -




- - - Mise à jour - - -

Le dev de "Braid" et autres jeux

----------


## Dross

Tu peux changer tout tes raccourcis, mais oui, remapper tout un IDE t'est pas sorti de l'auberge. 
En installant Resharper il te proposera 3 set de remapping de raccourcis, s'il y en a un qui te plaît dans le lot ça te fera gagner du temps. 

VS c'est excellent pour les techno MS : C#, WPF et cie, j'en fais sur VS, jamais de la vie j'en ferai sur VSCode et autre. 
A contrario du web (TypeScript compris, même si c'est du MS) c'est sur VSCode, VS est pas adapté pour ça. 

J'ai aussi l'impression que tu fait l'erreur que font beaucoup de linuxiens : veulent absolument mapper leur workflow vim sur l'IDE, s'y cassent les dents et pleurent après que c'est pas bien. Essayez de comprendre l'outil et de vous y adapter d'abord.

----------


## Kamikaze

Si Visual Studio était un produit correct Resharper ne serait pas présent dans 100% des boites ou j'ai vu du C#

----------


## Dross

Le niveau de cet argument.  ::rolleyes:: 
VS est une plateforme, c'est normal et bénéfique qu'il y ai des plugins. VSCode sans plugin tu va pas loin non plus. 

De plus, VS reprends de plus en plus de fonctionnalités de Resharper, je continue de payer ma souscription mais à chaque itération je me pose de plus en plus la question d'arrêter. 

Après oui, l'écosystème idéal aujourd'hui pour faire du C# c'est VS + Resharper + Linqpad. C'est tout. Avec ça tu fait du web (backend), du desktop, du mobile, etc. C'est pas la mort quand je vois certaines stack...

----------


## TwinBis

Heureusement maintenant il y a Rider pour le C# !

----------


## Dross

Justement je l'ai testé (vu qu'il est fourni avec Resharper Ultimate), pas convaincu. Mais si ça peux aider certains qui viennent d'un autre IDE de Jetbrains c'est tant mieux.

----------


## vectra

La question n'est pas de bencher tel ou tel IDE contre un autre. Je suis sûr que chaque IDE est conçu pour faire mieux que tous les autres un set de tâches bien déterminé.
Le problème n°1 avec VS, si je passe les plantages à répétition bien entendu, c'est de pas pouvoir, dans la pratique, remapper des touches. Ni (semble-t-il) appeler des fonctions sans passer par un raccourci-clavier. 

Si une chose aussi simple et élémentaire n'est pas disponible sur VS, je n'utiliserai pas VS et ça n'ira pas plus loin. Le débat qui consiste à s'interroger sur pourquoi VS est le seul éditeur du marché à ne pas permettre ça alors que les autres (dont VScode je crois bien) font de gros efforts pour rendre cela facile et clair ne m'intéresse pas.

Si je ne connais pas le raccourci, de toute manière je n'utiliserai pas la fonction. Donc purger la totalité des raccourcis et les mapper un à un selon sa découverte de l'IDE, je ne vois pas où est le mal. A contrario, c'est un effort important que d'apprendre et d'utiliser une keymap assez fournie. Si tu dois multiplier cet effort par le nombre d'IDE psychorigides, c'est juste pas possible ou pas raisonnable. 

Pour info, j'ai juste copié à la main ma keymap Clion vers Rider et tout a marché de suite. Je regrette qu'il n'y ait pas de fonction pour synchroniser les IDEs Jetbrains entre eux, c'est peut-être parce que j'utilise CLion avec une licence et Rider en mode évaluation sans compte.

----------


## deathdigger

En C#, je n'ai jamais utilisé Resharper ou autres, j'ai toujours eu un VS Studio vanilla. Et jamais eu de plantage de mémoire. Par contre, je ne l'ai jamais utilisé pour faire du C++.

----------


## Dross

Tu peux remapper des touches : https://docs.microsoft.com/en-us/vis...o?view=vs-2019
Qu'entends tu par "appeler des fonctions" ?

ps: les plantages c'est pas normal, j'ai toujours 3-5 instances de VS ouverte 5j/7 et aucuns soucis.

----------


## vectra

> Tu peux remapper des touches : https://docs.microsoft.com/en-us/vis...o?view=vs-2019
> Qu'entends tu par "appeler des fonctions" ?


La fonction, ben c'est par exemple Edit.LineEnd. Je voudrais, par exemple, l'assigner à Ctrl-E dans l'éditeur. Outre l'ergonomie douteuse du menu comparé à celui de Jetbrains, le problème est que je ne peux pas démapper les autres fonctions qui sont appelées, contextuellement ou non, par Ctrl-E. Surtout, au final, quand je fais C-e dans l'éditeur, ça "marche pas".

J'avais bien vu la page, c'est juste que je ne suis pas parvenu à faire ce que je voulais avec.
C'est simple de basculer d'une keymap à l'autre, donc je ne comprends pas pourquoi empêcher une keymap custom, même si transitoire. Et la restriction sur les touches suivantes, à 80%, c'est pas trop justifié: 

Insert, Home, End, Page Up, Page Down
The Windows logo key, the Application key, any of the Arrow keys
Num Lock, Delete, or Clear on the numeric keypad

----------


## Dross

C'est visiblement un soucis de priorisation : https://stackoverflow.com/questions/...-the-ctrle-key

Surtout que Ctrl+E est utilisé dans plein de raccourcis dans VS : ctrl+E-ctrl+D etc. T'est pas en train de démapper un truc anodin dans ton cas. 

Après chez MS, si c'est rigide c'est (très souvent) pour des raisons de rétrocompatibilité ou autre.

----------


## vectra

Au bout de la deuxième fois, je suis parvenu à lui faire manger C-e pour Line.End en mode TextEditor, parce qu'effectivement j'étais en mode global avant: merci de l'info  :Emo:  
Pareil pour C-a. 

Par contre, un essai de C-a a encore fait replanter VS. Depuis l'installation et le retrait de Resharper, c'est la cata; ironiquement, Resharper n'addressait pas les fonctions qui m'intéressaient. Heureusement que la partie C++ semble épargnée.

Y'a quand même un gouffre entre la GUI VS et la GUI Jetbrains sur les keymaps, même si le gap fonctionnel semble moins grave qu'escompté.
L'enchainement des comboBoxes n'est pas ce que j'appellerais 'intuitif'; par contre on peut effectivement remapper les fonctions sur les touches autorisées et virer les fonctions qui sont dessus une par une: c'est déjà un bon début.

Je n'arrive pas encore à voir comment créer mon keymap 'tchoupi découvre VS', mais je suppose que ça viendra.

----------


## Dross

Non on va pas se mentir, VS c'est vieux et je ne pense pas qu'ils aient fait un revamp des settings (ou très peu) depuis la première version. 

Petite astuce d'ailleurs : utilise la recherche (en haut) pour accéder aux settings, elle est efficace et on a vite fait de l'utiliser pour un oui ou pour un non (pour activer certaines fenêtres, etc).

----------


## Dr.Kant

Salut,

Je cherche à monter en compétence en développement informatique pour application aéronautique. J'ai commencé à lire la DO-178 et le form 8110.49A, mais je me demandais si vous aviez d'autres ressources à conseiller.

Plus précisément je cherche à en savoir plus sur les concepts suivants dans le contexte des RTOS: use of interrupts,  multitasking, software reentrancy, 
input/output schemes,  memory  organization et multiport access communication bus protocols.

Merci!

----------


## Whiskey

> Salut,
> 
> Je cherche à monter en compétence en développement informatique pour application aéronautique. J'ai commencé à lire la DO-178 et le form 8110.49A, mais je me demandais si vous aviez d'autres ressources à conseiller.
> 
> Plus précisément je cherche à en savoir plus sur les concepts suivants dans le contexte des RTOS: use of interrupts,  multitasking, software reentrancy, 
> input/output schemes,  memory  organization et multiport access communication bus protocols.
> 
> Merci!


Je connais pas trop ton domaine cependant a tu regarder de udemy ?

https://www.udemy.com/topic/rtos/ (peut etre rien a voir, mais au cas ou)

----------


## Dr.Kant

Je vais regarder ça, merci.

----------


## Captain_Cowkill

Petit BMDJ, mais qui a sa place sur ce topic : j'ai terminé la partie sur le CSS du programme MDN. J'ai commencé le 04 janvier et ça avance gentiment, je comprends tout (quand je ne comprends pas je m'acharne) et du coup je suis super content.
J'attaque le JS lundi.

Voilà, c'était ma vie  :^_^:

----------


## deathdigger

Perso, j'ai fini les formations/introductions d'Angular sur PluralSight, ainsi qu'Angular Materials. C'est assez sympa, et ça permet d'avoir un résultat présentable assez rapidement. Me reste à comprendre les bonnes pratiques (sur les routes, les modules, etc.) pour que le code soit le plus maintenable possible.

----------


## Captain_Cowkill

Il te reste des cours ou c'est que de la pratique ?

----------


## deathdigger

Ce sont des cours à suivre en vidéo (il y'en a aussi en texte). Si je veux, je peux suivre d'autres cours avec un niveau plus avancé.
Si je veux suivre tout le "path" Angular (de begginer à advanced), par exemple, c'est 64 heures de cours.

Pour ce que tu suis (HTML, JS et CSS), t'as un path de 35 heures de cours  ::):

----------


## gros_bidule

> Pour info, j'ai juste copié à la main ma keymap Clion vers Rider et tout a marché de suite. Je regrette qu'il n'y ait pas de fonction pour synchroniser les IDEs Jetbrains entre eux, c'est peut-être parce que j'utilise CLion avec une licence et Rider en mode évaluation sans compte.


Je réagis un peu tard, mais pour la prochaine fois si tu veux copier une keymap custom d'un produit jetbrains vers un autre produit jetbrains, tu peux au choix :
- exporter ta keymap, puis l'importer dans ton autre ide (File > Manage IDE settings > export/imports settings > tu coches juste "keymap")
- sinon à la main : dans le dossier de ton profil utilisateur, tu as un dossier keymap, avec un fichier xml par profil de keymap. Soit le copier coller fonctionne, soit tu l'édites (et tu fais le merge). Ca restera plus rapide que se farcir la copie de chaque raccourci à la main via l'interface.

----------


## Captain_Cowkill

> Ce sont des cours à suivre en vidéo (il y'en a aussi en texte). Si je veux, je peux suivre d'autres cours avec un niveau plus avancé.
> Si je veux suivre tout le "path" Angular (de begginer à advanced), par exemple, c'est 64 heures de cours.
> 
> Pour ce que tu suis (HTML, JS et CSS), t'as un path de 35 heures de cours


Ah cool ça, je prends aussi. Ça me fera toujours une bonne occasion de réviser quand j'aurai terminé mon programme actuel.

----------


## MrBeaner

Il ne me reste plus que le projet final pour la certification professionnelle HarvardX, mais j'ai fait une pause et je bloque à m'y remettre  ::P:

----------


## Orhin

*Code With Me*, l'outil de dévellopement collaboratif de Jetbrains est disponible avec les versions 2021 des IDE.
Je l'utilise de temps en temps pour du pair-programming avec des collègues en télétravail et c'est rudement bien foutu.

----------


## Nilsou

Dites, quelles est la raison qui vous vient à l'esprit pour expliquer qu'une boucle d'ouverture/fermetures (ou création/suppression) de fichiers finisse par foirer quand elle va suffisamment vite ?

Je corrige certains codes d’élèves qui ont cette structure : 



```
       fichier1 = fopen("FICHIER1", "w");
       fichier2 = fopen("FICHIER2", "w");
       fprintf(FICHIER2, "%d\n", TRUC);
       fprintf(FICHIER2, "%d\n", TRUC2);
       fclose(FICHIER2);
       fclose(FICHIER1);
       remove("FICHIER1");
```

Ça s’exécute dans une boucle très rapide. Et de temps en temps, segfault parce que le fopen foire ou le fclose ou le remove. 
Alors oui c'est évidemment une bonne pratique de toujours vérifier si les choses se déroule bien sur ces fonctions, mais je me suis rendu compte à la réflexion que je ne saisit pas bien ce qui peut faire foirer ce genre de chose sur le système, d'un point de vue bas niveau ...  ::unsure::  . La vitesse du DD ? L'OS ? Autre chose ?

----------


## Robix66

Quand tu supprimes un fichier, tu lui mets un flag "à supprimer", donc si tu le recréé derrière, il n'est peut-être pas encore supprimé.
(Enfin j'avais eu le problème pour des dossiers, je suppose que c'est similaire pour des fichiers).

----------


## Nilsou

Hooo, intéressant ...

Donc c'est dépendant de la nature de l'OS et de ses boucles interne ainsi que du DD j'imagine ?  ::unsure:: 

Donc au final si on veut utiliser un fichier comme l’indicateur d'un verrou pour un accès concurrents de deux programmes (l'un en écriture l'autre en lecture par exemple) à un autre fichier (voir code ci-dessous, FICHIER1 est le verrou et FICHIER2 le fichier de donnée) impossible que ça fonctionne à haute vitesse ... ? 

Du coups ça serait quoi la bonne pratique dans ce cas là ? Mémoire partagée ?

----------


## Cwningen

Un sémaphore nommé peut-être (sem_open) ?

----------


## Robix66

> Hooo, intéressant ...
> 
> Donc c'est dépendant de la nature de l'OS et de ses boucles interne ainsi que du DD j'imagine ? 
> 
> Donc au final si on veut utiliser un fichier comme l’indicateur d'un verrou pour un accès concurrents de deux programmes (l'un en écriture l'autre en lecture par exemple) à un autre fichier (voir code ci-dessous, FICHIER1 est le verrou et FICHIER2 le fichier de donnée) impossible que ça fonctionne à haute vitesse ... ? 
> 
> Du coups ça serait quoi la bonne pratique dans ce cas là ? Mémoire partagée ?


Tu veux lire ton fichier pendant qu'il est écrit ? Ou juste le lire pendant que l'autre n'écrit pas ?

Si c'est le deuxième cas, un sémaphore ou un mutex nommé.

----------


## Nilsou

Mais une sémaphore, j'ai plutôt l'habitude d'utiliser ça en interne dans un programme, pour les threads etc... ça fonctionne entre deux programme qui ne se connaissent ni d’Ève ni d’Adam ?  ::unsure:: 
Question sans doute con, mais ça fait un bout de temps que je n'ai pas manipulé tout ça. J'imagine que si il y a un nom on peut se la retrouver entre programme, un truc comme ça...

edit : 

ha oui : 



> A named semaphore is identified by a name of the form
>               /somename; that is, a null-terminated string of up to
>               NAME_MAX-4 (i.e., 251) characters consisting of an initial
>               slash, followed by one or more characters, none of which
>               are slashes.  Two processes can operate on the same named
>               semaphore by passing the same name to sem_open(3).



Bon maintenant, la question c'est à quel point c'est une norme qui fonctionne sur tout les systèmes ... je crois me souvenir que Windows n'est pas tout à fait Posix si ?

----------


## Robix66

C'est ça, le nom permet de le retrouve entre programmes.
Ex : https://www.boost.org/doc/libs/1_42_...med_mutex.html

Edit : sinon, en fonction de ce que tu veux faire, un pipe.  ::ninja::

----------


## Nilsou

Ok merci, maintenant est-ce que ça fonctionne bien en multi-plateforme ? Windows il aime ce genre de truc ?

----------


## Robix66

Si tu utilises .Net, oui.  ::ninja:: 

(Ca dépend de ta bibliothèque j'imagine)

----------


## vectra

Si on parle bien de C++, je rappelle à l'occasion qu'on est en 2021 et que C++20 est déjà largement supporté.
Dans C++17, on a a priori tout le contenu de boost::filesystem qui est passé dans std. 
Mais je suppose que c'est juste un cours de C.

Et C++17 supporte une palanquée de fonctionnalités sur les threads, mutex, sémaphores et autres. De ce côté, alignement large sur QT5.

- - - Mise à jour - - -




> Je réagis un peu tard, mais pour la prochaine fois si tu veux copier une keymap custom d'un produit jetbrains vers un autre produit jetbrains, tu peux au choix :
> - exporter ta keymap, puis l'importer dans ton autre ide (File > Manage IDE settings > export/imports settings > tu coches juste "keymap")
> - sinon à la main : dans le dossier de ton profil utilisateur, tu as un dossier keymap, avec un fichier xml par profil de keymap. Soit le copier coller fonctionne, soit tu l'édites (et tu fais le merge). Ca restera plus rapide que se farcir la copie de chaque raccourci à la main via l'interface.


Désolé pour le lag.
J'ai juste eu à recopier la keymap et en fait je l'avais déjà fait au moment de poster, mais merci du coup de main  :Beer: 
En fait, je m'étonnais que la keymap ne puisse pas être passée de CLion vers Rider autrement qu'en bidouillant à la main. Je sais faire depuis que je masterise CLion vu que je suis maniaque des keymaps custom, mais c'est relou.

PS: comme j'ai un vrai boulot maintenant, j'en ai profité pour me payer le pack complet Jetbrains, au moins pour une année. Ca me fera une licence perpétuelle de Rider; on verra si ça vaut le coup de renouveller.
J'ai pris le pack 3 mois avant la fin de la licence annuelle de CLion, et ça ne m'a coûté "que" 115 euros vu qu'ils ont pris en compte mon ancienneté chez CLion et qu'ils l'ont appliquée au full-pack.

Visiblement, un projet Rider passe directement sous Visual Studio, bon à prendre. Ca marche aussi avec CLion, mais pour cela il faut que le CMake du projet soit bien carré comme il faut; j'ai eu du ramp-up à faire avant d'obtenir un projet directement importable sur Visual, mais puisque CMake est notre nouveau standard (même Qt s'y met -mal), autant investir.

----------


## Cwningen

> Et C++17 supporte une palanquée de fonctionnalités sur les threads, mutex, sémaphores et autres. De ce côté, alignement large sur QT5.


Il n'y a pas de mutex/sémaphore nommés ou inter-processus dans la bibliothèque standard.

----------


## vectra

Mea culpa pour le "nommé", mais par contre je vois bien des mutex et j'ai joué avec (ceux de Qt sont un peu plus faciles).
Si tu tiens absolument à nommer un mutex, tu peux pas les enquiller dans une map à clé string? :con:

PS: ils ont visiblement intégré les sémaphores dans la révision 20: bon à savoir!
https://en.cppreference.com/w/cpp/th...ting_semaphore

----------


## gros_bidule

Au pire tu installes le plugin Izual Studio  ::ninja::

----------


## Cwningen

> Mea culpa pour le "nommé", mais par contre je vois bien des mutex et j'ai joué avec (ceux de Qt sont un peu plus faciles).
> Si tu tiens absolument à nommer un mutex, tu peux pas les enquiller dans une map à clé string? :con:
> 
> PS: ils ont visiblement intégré les sémaphores dans la révision 20: bon à savoir!
> https://en.cppreference.com/w/cpp/th...ting_semaphore


Nommé, c'est au niveau du noyau, pour que plusieurs processus puissent récupérer le même objet. POSIX gère ça pour les sémaphores (sem_open), et la mémoire partagée (shm_open), mais pas pour les mutex (mais Windows si). Mais Robix66 a déjà cité boost pour avoir une bibliothèque qui en propose de façon portable.

----------


## vectra

Oui OK, c'est beaucoup plus clair là.

En plus je suis doublement teubé parce que j'ai bossé sur des QLocalsocket lors de mon ancien job, qui sont implémentés par des named pipes sous Windows (pour récupérer le même tuyau à partir de process différents, et pas seulement de threads). Effectivement c'est très pratique et efficace avec l'interface proposée par Qt.
Rien sur std pour implémenter ça a priori, mais y'a encore et toujours une lib boost pour faire le job...

- - - Mise à jour - - -




> *Code With Me*, l'outil de dévellopement collaboratif de Jetbrains est disponible avec les versions 2021 des IDE.
> Je l'utilise de temps en temps pour du pair-programming avec des collègues en télétravail et c'est rudement bien foutu.


Manque de bol, je suis le seul à avoir une licence Jetbrains semble-t-il.

----------


## Taro

Aujourd'hui au taff j'ai pu constater qu'en Python y'a pas que les membres qui sont dynamiques. Les méthodes aussi.
J'aurais dû m'y attendre, et c'est écrit un peu partout sur le net, mais quand même, ça fait mal.
Bordel de merde, je maudis les concepteurs de ce mécanisme sur 99 générations.

----------


## Orhin

> Manque de bol, je suis le seul à avoir une licence Jetbrains semble-t-il.


Mais c'est ça qui est bien justement avec Code With Me, seule la personne qui invite a besoin d'avoir une licence.

----------


## Cwningen

> Aujourd'hui au taff j'ai pu constater qu'en Python y'a pas que les membres qui sont dynamiques. Les méthodes aussi.
> J'aurais dû m'y attendre, et c'est écrit un peu partout sur le net, mais quand même, ça fait mal.
> Bordel de merde, je maudis les concepteurs de ce mécanisme sur 99 générations.


Les méthodes ne sont que des fonctions assignés à des membres, non ? Il me semble que c'est pareil dans tous les langages à objets dynamiques : javascript, lua, ...

----------


## Nilsou

> Mais c'est ça qui est bien justement avec Code With Me, seule la personne qui invite a besoin d'avoir une licence.


Sinon codetogether c'est simple, multi IDE, et gratuit  ::ninja::

----------


## TwinBis

Gratuit ?  :haha: 
https://www.codetogether.com/pricing/

Le truc bien avec CodeWithMe c'est que tu peux très simplement installer un serveur local, donc tu n'as pas à passer par des serveurs externes (ce qui est problématique dans certaines entreprises).

----------


## Lazyjoe

> Hooo, intéressant ...
> 
> Donc c'est dépendant de la nature de l'OS et de ses boucles interne ainsi que du DD j'imagine ? 
> 
> Donc au final si on veut utiliser un fichier comme l’indicateur d'un verrou pour un accès concurrents de deux programmes (l'un en écriture l'autre en lecture par exemple) à un autre fichier (voir code ci-dessous, FICHIER1 est le verrou et FICHIER2 le fichier de donnée) impossible que ça fonctionne à haute vitesse ... ? 
> 
> Du coups ça serait quoi la bonne pratique dans ce cas là ? Mémoire partagée ?


Tu as un vrai cas d'usage, ou c'est purement rhétorique ?

Parceque dans le principe, utiliser des fichiers (un truc lent, imprévisible, potentiellement bufferisé et avec un comportement à la fois lié à l'OS et l'implémentation de ton compilateur) pour synchroniser des processus (un truc rapide) c'est fondamentalement idiot.

Mais bon admettons. Dans ce cas, ça reste toujours idiot d'utiliser un fichier verrou car il n'apporte strictement rien de plus, il n'est pas plus synchronisé que le second fichier. C'est même potentiellement pire car tu as plusieurs appels système qui peuvent s'intercaler.

Typiquement : rien n'empêche ce déroulé de se produire


```
(F1 n'existe pas)
Producteur   |    Consommateur
             |    test = Ouvrir(F1)   
             |    test == faux => ouvrir(f2)
ouvrir(f2)   |
créer(f1)    |
ecrire(f2)   |   lire(f2)
...
```

Bref, F1 ne sert à rien, il faut un élément externe pour contrôler l'accès...
Le sémaphore nommé ça peut le faire, sinon en environnement posix tu as aussi fcntl qui permet de mettre en place directement des locks sur les fichiers.
https://pubs.opengroup.org/onlinepub...ons/fcntl.html


Mais bon dans le fond on en revient à ma question de base : pourquoi transmettre des données à travers un fichier ?
Tu dis "communiquer entre deux processus totalement indépendants" conceptuellement.... c'est impossible.

Si ton processus consommateur par exemple est un binaire "boîte noire" dont tu ne sais rien, il faut bien que l'auteur ait défini d'une manière ou d'une autre un _protocole de communication_ ie une spécification de où et comment il s'attend à ce qu'on lui fournisse les données qu'il va lire. Et dans ce cas il n'y a pas de question en fait, tu ne peux qu'implémenter ce qu'il attend (ce qui peut être un sémaphore nommé et un fichier... mais je n'aurais pas très envie d'utiliser un processus qui utilise ça  ::siffle::  ).

Si maintenant vu ce que tu décris tu es plutôt dans un exercice où les étudiants écrivent le code de tout... le plus simple et logique (et performant) serait de leur faire écrire un seul programme qui fork deux processus, avec un pipe pour communiquer entre les deux processus.

Si le but c'est de faire écrire le producteur et le consommateur par des étudiants différents, on en revient au point plus haut où il faut qu'ils définissent un protocole de communication... Là encore le pipe reste très facile à mettre en place (mais implique de lancer les processus en même temps   ./producteur | ./consommateur  ).

Si le but est d'avoir des processus qui pissent être lancés et tourner totalement indépendamment là ça devient un peu plus complexe... mais le problème reste le même : il faut définir par quel canal ils ont communiquer. Mémoire partagée, sockets... là encore il y a du choix, mais tout ça reste strictement OS-dependant.

Si tu veux un code portable, il faut passer par du middleware portable qui va abstraire tout ce qui est au niveau système.

----------


## vectra

Qt/QLocalsocket fait pile ça, testé entre programmes de langages aussi.
Sinon, la solution courante serait de passer par des sockets, non?
Ca fait partie des autres leçons de programmation système que j'ai un peu oubliées avec le temps.

----------


## Nilsou

> ...


Ouais, mais tu vois vite que ça devient compliqué pour des étudiants à faible niveau.

Alors qu'un code qui vérifie la réussite des fopen, des remove, des fprintf et autres fclose, ça fait très bien le taf sans aucune erreur, ça fonctionne partout et sur tout système. C'est lent, mais fonctionnel. Pour passer une valeur toutes les 5 secondes, ça fait parfaitement le taf par exemple. (en tout cas on a une plateforme de test qui stress test leurs code dans tout les sens, et avec des sécurités sur les fopen et autres, ça passe dans tout les cas)

L'exemple que tu donne n'est pas très correct puisque le producteur test aussi l'existence de F1. Je ne suis pas certains que fopen fait sur un fichier qui n'existe pas puisse te renvoyer OK si le fichier est encore en attente de création, ça me parait improbable non ? Après tout, si c'était le cas, une écriture du même processus juste après la création d'un fichier poserait problème de temps en temps ! 

Le système de fichier de verrou pour les accès concurrent, c'est quand même un truc qui est assez courant il me semble... (même si en général c'est pas pour les ouvrir toutes les secondes ni pour écrire dans un autre fichier ...)

----------


## Lazyjoe

> L'exemple que tu donne n'est pas très correct puisque le producteur test aussi l'existence de F1. Je ne suis pas certains que fopen fait sur un fichier qui n'existe pas puisse te renvoyer OK si le fichier est encore en attente de création, ça me parait improbable non ? Après tout, si c'était le cas, une écriture du même processus juste après la création d'un fichier poserait problème de temps en temps !


Ok effectivement mon exemple était un peu mal fichu.
Prenons plus basique : si les deux processus effectuent le test d'existence de F1 "en même temps"



```
Producteur                    |     Consommateur
test = fopen(F1,'r')          | test = fopen(F1,'r')
test == vrai => fopen(F1,'w') | test == vrai => fopen(F1,'w')
ecrire(F2)                    |    lire(F2)                        => résultats incohérents
fclose(F1)                    |  fclose(F1)
remove(F1)                    |   remove(F1)                => système pas content car un des deux va vouloir effacer un fichier qui n'existe déjà plus
```

Et ça je suis à peu près certain que ça marche sous unix, rien n'empêche d'ouvrir plusieurs fois un fichier en écriture, on peut même vouloir le faire volontairement (plutôt en mode "append" pour que les données restent cohérentes ligne par ligne même si l'ordre est pas garanti). Par contre sous Windows il va criser il me semble.

Bref sur des processus volontairement ralenti pour un exercice, il y a de bonnes chances que ça marche la plupart du temps, mais il y a aussi 100% de chances que ça crashe si tu laisse les processus tourner suffisamment longtemps.  ::P:  
Surtout qu'avec des fichiers, tu as une latence assez importante dûe aux appels systèmes... donc le "en même temps" ça peut être large avec des milliers (millions ?) de cycle CPU d'intervalle.

Pour moi ça reste quand même un des aspects fondamentaux en programmation concurrente : si tu veux accéder à une ressource partagée quelle qu'elle soit, tu dois obligatoirement avoir un mécanisme permettant de t'assurer de son lock, et t'assurer d'avoir bien obtenu le lock avant de t'en servir.

Et l'exemple avec les fichiers est un parfait démonstrateur de pourquoi ça ne fonctionnera pas de manière garantie si tu n'as pas de lock, donc pédagogiquement c'est intéressant aussi.  ::P:

----------


## Cwningen

> Ouais, mais tu vois vite que ça devient compliqué pour des étudiants à faible niveau.


C'est la synchronisation inter-processus/thread qui est compliqué aussi. Le plus simple c'est de ne rien partager et se contenter de se passer des messages par socket/pipe quand c'est possible.




> Le système de fichier de verrou pour les accès concurrent, c'est quand même un truc qui est assez courant il me semble... (même si en général c'est pas pour les ouvrir toutes les secondes ni pour écrire dans un autre fichier ...)


Je n'ai jamais utilisé ce genre de synchronisation, j'y connais pas grand chose, mais est-ce que ça n'utilise pas les appels à fcntl cités par Lazyjoe ?

Edit: j'ai été voir l'implémentation de dnf (gestionnaire de paquets de redhat), il utilise flock, ce n'est pas un simple open.

----------


## vectra

Inter-process oui, inter-threads moins.
La std17 a rattrapé le gros de son retard sur Qt5 sur plein de points; il devient dès lors standard et concis d'instancier des threads et de les synchroniser avec les éléments les plus courants.

Je plussoie pour les sockets et pipe, c'est ce qu'on m'a toujours rabâché et que j'ai vu utilisés intensivement.

Par contre, j'entends bien les arguments de Nilsou: les étudiants peuvent être désespérants de crasse avec des choses simples, donc pour amener ce genre de choses il faut quand-même bien organiser le TP. Sachant que certains élèves risquent de ne pas décoller des premières questions...

----------


## Nilsou

Ouais ici on est pas au niveau des sockets avec nos élèves, déjà ouvrir des fichiers voila, mais d'un autre coté on veut quand même leur faire toucher un peu aux quelques problématiques types « mutex/semaphores » de la vrai vie. Même avec un truc aussi simple que les fichiers, honnêtement, beaucoup d’élève n'y arrive pas alors bon ...

----------


## Captain_Cowkill

Je rêve du jour où je comprendrai ce que vous dites  ::wub::

----------


## Robix66

> Je rêve du jour où je comprendrai ce que vous dites


Là c'est des mots compliqués alors que c'est simplement réguler l'accès (exclusif, ou pas) à une ressource. Pour éviter que tout se mélange, sinon c'est la cata assurée.

----------


## Taro

Je me suis plains récemment du Python qui permet d'ajouter des méthodes au runtime sur un objet.
Bon déjà, comme l'a à juste titre mentionné un collègue, on peut faire plus vicieux, aussi : on peut remplacer une méthode par une autre implémentation.

Mais surtout, on peut faire pire...


Je suis tombé sur ça :




Ma réaction : 




Donc le jour où A n'hérite plus de B, ça se foire.
Le mec qui a codé ça a réussi à créer un couplage fort entre la classe C et... et les liens d'héritage de la classe A.
 :Facepalm: 

C'est la pire des magouilles "objet" que j'ai jamais vue.
Et croyez-moi j'en ai vu des trucs crades.
 :Emo:

----------


## ducon

:haha:

----------


## GrandFather

Mais... Pourquoi ?  ::O:

----------


## TwinBis

Mais pourquoi faire des classes et de l'héritage dans un langage de script ?  ::trollface::

----------


## FB74

Pour tromper l'ennemi.  ::ninja::

----------


## Dross

> Mais pourquoi faire des classes et de l'héritage dans un langage de script ?


Parce qu'ils sont jaloux des vrai langages qui se débarrassent de leur boilerplate tout en gardant toutes leurs forces.  ::ninja::

----------


## ducon

Tout ça pour qu’on ne se foute pas de la gueule de leur _Hello world_…  :^_^:

----------


## Taro

> 


 :Emo: 

Pourquoi c'est moi qui hérite de ce tas d'immondices ?  :Emo: 




> Mais... Pourquoi ?


Pour me pousser à ouvrir cette sandwicherie dont je parle chaque fois que je mets à déprimer devant ce vieux pipeline tout pourri.  :Emo: 




> Mais pourquoi faire des classes et de l'héritage dans un langage de script ?


Hého hein. Monsieur le troll. Le python, typé "script" ou pas, interprété ou pas, c'est vendu comme un langage objet.
Mais t'inquiète pas, j'ai grillé dès le départ que c'était un langage objet de merde.
A l'instant précis où j'ai vu qu'il fallait passer le thi... pardon, le self en premier paramètre de chaque métho... euh fonction.

Comme en ADA ou en C quoi. Putain. Et c'est vendu comme un langage objet et moderne.

----------


## Nilsou

Le python, c'est vraiment le truc dont je ne comprends pas l'engouement. J'admets que comme il pardonne plus d'erreur on code plus facilement en python pour un débutant, mais j'ai l'impression que c'est pas vraiment le cas pour quelqu'un de formé dans un autre langage et en python... et au final c'est a peu prés son seul avantage ...

Nan vraiment, c'est incompréhensible.

----------


## ducon

Rien ne t’empêche de transformer ton code écrit en Python en C, par exemple.

----------


## Taro

J'ai trouvé le Python très confortable pour faire de petits scripts utilitaires pour usage perso.
De mémoire il m'a servi à faire du renommage par lot un peu chiadé, à créer un tool de backup qui rameute des fichiers via SCP et les conserve en local, ce genre de trucs.
Il est très complet pour les manipulations de fichiers et, surtout, de chaînes de caractères.

En comparaison, je ne comprends d'ailleurs toujours pas pourquoi la STD est si avare en services sur les std::string en C++.

Par contre, ça m'a l'air d'être un choix vraiment naze pour bâtir un gros pipeline sur lequel vont bosser un large panel de personnes dans le temps.
Comme tu peux faire n'importe quoi avec, bah... les gens font n'importe quoi avec.
Et puis bordel... le typage faible et le typage dynamique c'est vraiment un fléau tu ne sais jamais ce que tu manipules.

La raison pour laquelle on fait surtout du Python dans mon taf actuel, c'est je pense parce que la plupart des applis avec lesquelles on interagit supportent surtout/uniquement le Python.

----------


## Dross

De notre coté (start-up avec un bon pied dans le coté recherche/université) on vois surtout Python chez les chercheurs : car le on-boarding est simple (un éditeur text et tu peux te lancer) et probablement aussi que quand tu ne viens pas du domaine, un aspect "script" est moins intimidant qu'un aspect "application". 

Le problème c'est que ça s’entretient ensuite : les académiciens font des libs Python, donc les académiciens vont sur Python à cause ça. On a commencé à utiliser des algos avancés pour certains de nos besoins (pas de l'IA mais plus très loin) et.. on a commencé à mettre du Python dans notre stack à cause de ça.  ::|:

----------


## Nilsou

> J'ai trouvé le Python très confortable pour faire de petits scripts utilitaires pour usage perso.
> De mémoire il m'a servi à faire du renommage par lot un peu chiadé, à créer un tool de backup qui rameute des fichiers via SCP et les conserve en local, ce genre de trucs.
> Il est très complet pour les manipulations de fichiers et, surtout, de chaînes de caractères.
> 
> En comparaison, je ne comprends d'ailleurs toujours pas pourquoi la STD est si avare en services sur les std::string en C++.


Pour les scripts sur les fichiers je suis tout à fait d'accord. 
Une autre utilité c'est en science en alternative à Matlab avec matplotlib. 

Mais c'est plus un remplacement de script et d'affichage qu'un véritable usage en tant que "langage" pour faire des applications dans ces deux cas.

- - - Mise à jour - - -




> La raison pour laquelle on fait surtout du Python dans mon taf actuel, c'est je pense parce que la plupart des applis avec lesquelles on interagit supportent surtout/uniquement le Python.


Ouais mais c'est aussi la raison pour laquelle on l'enseigne. Et au final c'est quand même une sacré mauvaise raison  ::P: 

- - - Mise à jour - - -




> Le problème c'est que ça s’entretient ensuite : les académiciens font des libs Python, donc les académiciens vont sur Python à cause ça. On a commencé à utiliser des algos avancés pour certains de nos besoins (pas de l'IA mais plus très loin) et.. on a commencé à mettre du Python dans notre stack à cause de ça.


Dans mon domaine c'est particulièrement drôle : toutes les librairies pour réseaux de neurones sont dispo principalement en ... Python mais écrites surtout ... en C... 
Et c'est un héritage d'autant plus stupide que dans ce domaine on est tous informaticien  :^_^:  .

----------


## gros_bidule

Dans le réseau aussi y'a plein de libs (cisco, junos, ipsec, etc) qui sont super en Python, et parfois uniquement dispo/maintenues sur cette plateforme. Et les libs sont très matures (tout l'inverse de certaines libs en JS/Node ou Kotlin par ex (même si Kotlin c'est la JVM et donc compatible Java, y'a plein de projets Kotlin qui sont encore trop limite, je trouve)).
Puis, pour avoir participé à la migration d'un gros applicatif (réseau de FAI et plein de microservices) de Kotlin vers Python, l'équipe est unanime : Python > Kotlin. Python a des défauts, mais il est aussi souple, rapide à prendre en main, et même s'il permet de faire des conneries (comme TOUS les langages), rien n'empêche d'apprendre les bonnes pratiques et de verrouiller ça avec les bons linters et revues de code.
Kotlin (et son écosystème) reste super, mais là, sur notre projet et dans notre environnement, Python a certains avantages et on en est très contents. Un an plus tôt, quand on s'est mis à Python, j'aurais jamais imaginé dire ça ^^.

Si l'on reproche la mocheté du Python pondu par des chercheurs c'est, j'imagine, parce que l'on parle de matheux pour qui coder est une torture. Math != Informatique.

----------


## Taro

Oui c'est sur que tu peux toujours trouver moyen de faire n'importe quoi. Après tout en C/C++ avec des manips à base de pointeurs de fonctions on peut reproduire la méthode bar() qui appelle foo() comme sur mon schéma.

Mais bon, quel que soit le langage, je ne peux revenir en arrière pour demander au type de ne pas faire ce genre de truc crade.
Ni discipliner mes collègues.
 ::P: 

Vu la tronche du pipeline dont j'ai hérité, il est clair que les concepts SOLID n'entraient pas en ligne de compte dans sa conception.  :Emo:

----------


## gros_bidule

Haha, c'est certain  :^_^: 

Du coup si vous avez laissé le type pondre cet étron, c'est qu'il n'y a pas d'étape de relecture ou validation ? Le soucis est peut être plutôt là.
Si tu hérites du truc et qu'on ne te donne pas du temps pour le remettre dans un état convenable, c'est aussi un autre soucis.

----------


## vectra

J'ai une très mauvaise impression de Python, mais je l'utiliserais sans mal pour éviter de coder à nouveau en Matlab voire en bash (j'aimais bien, mais non, sérieux, c'est plus possible).
Pour le reste, Python est massivement poussé par des gens qui ne peuvent travailler qu'avec ça, et ouais ça comprend de plus en plus de chercheurs. Raison pour laquelle on ne me reverra sans-doute plus jamais dans un labo.

----------


## Cwningen

> Je me suis plains récemment du Python qui permet d'ajouter des méthodes au runtime sur un objet.
> Bon déjà, comme l'a à juste titre mentionné un collègue, on peut faire plus vicieux, aussi : on peut remplacer une méthode par une autre implémentation.
> 
> Mais surtout, on peut faire pire...
> 
> 
> Je suis tombé sur ça :
> 
> https://i.ibb.co/RQPQYzw/tcprinh.png
> ...


Tu découvres le duck typing ?

----------


## Nilsou

> Dans le réseau aussi y'a plein de libs (cisco, junos, ipsec, etc) qui sont super en Python, et parfois uniquement dispo/maintenues sur cette plateforme. Et les libs sont très matures (tout l'inverse de certaines libs en JS/Node ou Kotlin par ex (même si Kotlin c'est la JVM et donc compatible Java, y'a plein de projets Kotlin qui sont encore trop limite, je trouve)).
> Puis, pour avoir participé à la migration d'un gros applicatif (réseau de FAI et plein de microservices) de Kotlin vers Python, l'équipe est unanime : Python > Kotlin. Python a des défauts, mais il est aussi souple, rapide à prendre en main, et même s'il permet de faire des conneries (comme TOUS les langages), rien n'empêche d'apprendre les bonnes pratiques et de verrouiller ça avec les bons linters et revues de code.
> Kotlin (et son écosystème) reste super, mais là, sur notre projet et dans notre environnement, Python a certains avantages et on en est très contents. Un an plus tôt, quand on s'est mis à Python, j'aurais jamais imaginé dire ça ^^.
> 
> Si l'on reproche la mocheté du Python pondu par des chercheurs c'est, j'imagine, parce que l'on parle de matheux pour qui coder est une torture. Math != Informatique.


Nan mais on peut toujours trouver un langage plus pourris, c'est pas un vrai argument ça  :^_^: 

- - - Mise à jour - - -




> J'ai une très mauvaise impression de Python, mais je l'utiliserais sans mal pour éviter de coder à nouveau en Matlab voire en bash (j'aimais bien, mais non, sérieux, c'est plus possible).
> Pour le reste, Python est massivement poussé par des gens qui ne peuvent travailler qu'avec ça, et ouais ça comprend de plus en plus de chercheurs. Raison pour laquelle on ne me reverra sans-doute plus jamais dans un labo.


Perso ça me sort par les trous de nez, la plupart des chercheurs ont amplement les capacités pour apprendre d'autres langage bien plus sympa.

----------


## Lazyjoe

Concrètement quand je vois l'usage dans mon labo de physiciens je comprends l'engouement.

En python pur c'est toute la partie lecture/Traitement de paramètres, préparation des données, enregistrement et post-proc. Pour le gros des calculs, tout est enfourné dans des grosses libs de calcul performantes.

Du coup c'est rapide à mettre en place, pas trop foireux à maintenir et performant malgré tout... Si on tombe dans le cas d'usage c'est assez parfait.

----------


## TarteAuxFleurs

Je fais du python en ce moment, pour du dev web et bah c'est franchement pas mal.
J'utilise le framework Django, tu as vraiment une manière très logique d'organiser les choses. L'absence de type est gênante, mais moins que ce que j'imaginais. Notamment parce que avec le framework certaines codifications sont en place, et les arguments nommés aident pas mal aussi.

----------


## Nilsou

> Concrètement quand je vois l'usage dans mon labo de physiciens je comprends l'engouement.
> 
> En python pur c'est toute la partie lecture/Traitement de paramètres, préparation des données, enregistrement et post-proc. Pour le gros des calculs, tout est enfourné dans des grosses libs de calcul performantes.
> 
> Du coup c'est rapide à mettre en place, pas trop foireux à maintenir et performant malgré tout... Si on tombe dans le cas d'usage c'est assez parfait.


Perso je trouve que, dans mon domaine du moins, ça fait de la mauvaise recherche : tu n'ira jamais mettre la main dans les-dites libs, et tu ne codera jamais vraiment tes calculs expérimentaux en python pur (souvent parce que tu a perdu l'habitude ou que ce serait moche et lent), le résultat c'est que tout le monde converge vers ... l'usage prévu par les libs.

C'est très visible en recherche en IA par exemple : tout le monde utilise des libs déjà toutes faites, et tout les papiers se ressemblent.

C'est bien simple : je venais d'un labo qui codait tout en C avec une API IA maison, c'était dur à prendre en main, mais le labo publiait sans arrêt des nouvelles IA ou tout était testé, tripatouillé, des nouveaux paradigmes était mis au banc d'essai très souvent. Puis je suis passé dans un labo ou tout le monde fait Python + librairie : et en gros ce n'est plus que de l'application de chose déjà faites, avec application sur un autre cas d'usage. (soit 99.9% des papiers d'IA moderne).

Et pour moi, la méthode de travail est directement responsable : mes collègues actuel n'ont juste jamais vraiment codé un réseau de neurone eux même, leur connaissance du fonctionnement de la chose est de fait assez théorique... parce qu'ils se reposent sur un langage qui ne pousse pas à ça et qui utilise des bibliothèques ou personne ne va mettre les mains dedans.

Donc oui, quand tu tombe dans le cas d'usage prévu par les libs, c'est OK, mais pour le reste ...

----------


## vectra

Vu à un autre niveau dans un autre domaine cette fois-ci utilisateur, effectivement les mecs rapportent qu'ils sont juste là pour pousser leurs données perso dans des moulinettes existantes qu'ils ne cherchent pas à comprendre.
Retouche les scripts récupérés ci et là et papier.

Vive la recherche (enfin, c'est pas partout pareil heureusement).

----------


## William Vaurien

J'ai bossé dans un grand labo c'était C/C++/Python pour la "science" et Java pour la partie administrative.
Un de mes collègues Java s'est fait débaucher pour 'industrialiser' le python des scientifiques: en effet chaque nouvel arrivant scientifique repartait de zéro car il ne comprenait pas (ou ne voulait pas comprendre) le travail fait par son prédécesseur. 
Ce collègue qui était bien content de quitter le monde Java était quand même déprimé par l'ampleur de la tâche: c'était un peu ses écuries d'Augias.

Pour le Python j'ai quand même l'impression qu'il y a au moins deux usages très différents: le scientifique (avec les travers cité plus haut) et les développeurs en informatique administrative de "base". Ce créneau a été le royaume du Java pendant une vingtaine d'année, 
avec des trucs heureux et d'autres moins (EJB2?) et l'envie pour certains dev d'aller voir ailleurs (C#, Ruby, Python, Node, ...). 

J'ai l'impression qu'aujourd'hui Python devient LE langage des études d'informatique et remplace Java, et comme il est particulièrement bien taillé pour ce rôle, les étudiants doivent trouver ce langage génial et ne voient pas pourquoi ils auraient besoin d'apprendre autre chose. 
Du coup quand ils arrivent en entreprise et qu'on leur sert un vieux projet en Java ils doivent trouver ça bien merdique. Et ils vont rejoindre le troupeau des haters, font des blogs pour dire combien Java c'est de la merde... et finissent par trouver/démarrer un projet en Python. 
Avec un nouveau cycle d'imprévus à résoudre qui font voir les limites du langage.

J'ai vécu ça avec Groovy: après 2 ans de maintenance d'un projet bancaire en EJB2/Swing qui m'avait amené aux portes de l'enfer, j'avais trouvé un nouveau poste (dans le labo cité plus haut), avec de la maintenance d'un vieux truc en Java web (bof) et surtout un nouveau gros projet en Groovy/Grails  (groovy c'est une sorte de Ruby compatible Java à 100% et grails bha c'est rails avec Groovy). Au début c'est génial, et au bout de deux ans c'était horrible: le projet était infernal à maintenir car il y avait trop d'incertitudes à cause du manque de typage, il y avait des trucs de meta-programming (comme dans l'exemple de Taro) partout qui rendait très opaque la visibilité... En gros dès que nous sommes parti en prod ça a été le début des gros problèmes: faire un POC à 2 personnes c'est très grisant avec un langage dynamique; corriger les bugs en prod et faire évoluer le code avec une plus grande équipe ça à de grandes chances de devenir un gros cauchemar.

----------


## TwinBis

This.
Des outils différents pour des cas d'usage différents.

----------


## Orhin

> rien n'empêche d'apprendre les bonnes pratiques et de verrouiller ça avec les bons linters et revues de code.


Clairement.
La qualité d'un projet vient très peu de la "qualité" (hautement subjective) du langage mais bien plus de l'environnement et des process de dev.




> Si l'on reproche la mocheté du Python pondu par des chercheurs c'est, j'imagine, parce que l'on parle de matheux pour qui coder est une torture.


Du code moche pondu par des chercheurs j'en ai vu dans tous les langages.
Reprendre des algos dev au CEA ou DGA pour les optimiser et les intégrer dans des vraies applis c'est d'ailleurs un des créneau de ma boite actuelle.  ::P: 




> Tu découvres le duck typing ?


Pas besoin de duck typing pour faire ce genre d’horreur.

----------


## Nilsou

> Clairement.
> La qualité d'un projet vient très peu de la "qualité" (hautement subjective) du langage mais bien plus de l'environnement et des process de dev.


L'absence de typage c'est quand même un point critique. Entre autre. 
L'outil contraint les usages.

----------


## Orhin

> L'absence de typage c'est quand même un point critique. Entre autre. 
> L'outil contraint les usages.


C'est outil très utile mais pas nécessaire.
Si tu me demandes de choisir entre :
- un projet avec relecture croisée de code en JS ou Python 
- un projet développé sans méthodologie dans un langage avec typage fort

Je choisis le premier sans hésiter.

----------


## ducon

Python est fortement typé… mais il peut changer en cours de route, c’est donc un typage dynamique.

----------


## vectra

L'absence de typage, ça me semble absolument rédhibitoire. 

Je veux bien croire que la résolution dynamique du type soit intéressante pour le calcul scientifique 'à la Matlab' (vu en common lisp), mais en pratique, quand on veut de la perf (parce qu'un programme simple qui grossit se met à exploser en complexité spatiale et temporelle), ça finit par du typage statique et tout un tas de pratiques heuristiques pour empêcher de perdre de la perf dans des conneries qui n'ont d'intérêt que pour les non-informaticiens. 

Le gain de temps des débuts du projet semble alors bien loin.

----------


## Le poussin

> L'outil contraint les usages.


D'accord avec ça, mais il faut plus le voir comme une aide que comme une contrainte. Un mauvais dév arrivera à te pondre des horreurs quel que soit le langage. Quand le langage est cadré en terme de syntaxe, de conventions, etc. tu réduis les risques mais surtout tu cherches à rendre plus naturelle la manière "propre".
Le C++ est statiquement typé et pourtant tu peux très facilement pondre des horreurs qui ne fonctionneront même pas. En Python tu as tout de même moins de risque (liés à la mémoire notamment) et "par défaut" tu vas te manger des exceptions si le code commence à faire n'importe quoi, ce qui va te pousser à corriger les problèmes.

Les problèmes "objet" mentionnés précedemment ne sont pas du tout liés à Python : le développeur n'a juste rien compris de comment devait être organisé du code et des classes. Que le langage le permette ou pas ne règlera pas le problème de fond : si le dév n'est pas capable de pondre une architecture correcte, le projet se plantera à plus ou moin long terme.
Se reposer sur les contraintes d'un langage pour avoir du code propre est illusoire. Ça peut aider mais c'est largement insuffisant.

----------


## vectra

Donc Python est un langage qui fait des programmes aboutissant à une impasse si le dev n'est pas suffisamment formé et cadré par une documentation non-normée ? 
Ok, merci
/thread

----------


## William Vaurien

> Se reposer sur les contraintes d'un langage pour avoir du code propre est illusoire. Ça peut aider mais c'est largement insuffisant.


Ce n'est pas totalement illusoire. C'est d'ailleurs un des facteurs utilisé pendant la création de Java: reprendre la syntaxe familière du C/C++ mais en restreignant le langage et y ajoutant des 'gardes-fous' pour en faire un langage "d'ouvrier" et pas un langage pour "l'élite".
Pour moi c'est une réussite totale: ce langage prévu pour programmer des grilles pains et qui faisait rigoler les dev du milieu des années 90 a réussi à s'imposer partout et devenir le langage de dev le plus utilisé pendant une vingtaine d'année. Alors oui il a prit un coup de vieux, c'est parfois énervant de coder avec, 
et la roue semble tourner dans une autre direction.

Mais une grande partie de son succès vient de ses contraintes justement. Contraintes qui font grincer des dents certains qui le trouve trop simple (et qui vont vers du C/C++) ou alors trop compliqué / verbeux (et qui vont vers du Python/JS), mais qui permettent de garder un code à peu près lisible même quand codé avec les pieds.

A mon avis les spécificités du langage sont très importantes et vont donner une 'couleur' à tout l'écosystème derrière, à la manière de l'utiliser et au code que tu vas récupérer ensuite dans des projets.

----------


## vectra

Java a une place dans l'industrie qu'il ne perdra pas de sitôt, et probablement pas au profit de Python.
Venant du C++, je préfèrerais passer sur Java ou C# plutôt que dans le trou noir de Python pour usage pro. Ce qui ne m'empêche pas de reconnaître les points forts du langage (wrapper des bonnes libs C++).

----------


## ducon

> Donc Python est un langage qui fait des programmes aboutissant à une impasse si le dev n'est pas suffisamment formé et cadré par une documentation non-normée ?


Comme beaucoup de langages, non ?

----------


## gros_bidule

Sauf le WLangage évidemment (WinDev), lequel est d'ailleurs un L*5G*. Les autres peuvent-ils en dire autant ?

----------


## rOut

Y'a quand même des impasses plus ou moins emmerdantes, et tu peux plus ou moins vite te retrouver dedans suivant les langages.

Mais je pense aussi qu'autant pour le coté introduction à la programmation c'est tout à fait adapté, autant pour une formation plus poussée et académique c'est assez nul de former les étudiants avec ce genre de language. Je ne vois pas trop comment tu peux aborder proprement les questions de meta programmation, sur la théorie des types ou les différents paradigmes fonctionnel / impératif, avec un langage ou tout est en vrac.

(Je dis pas que c'est pas possible en python, vu que tu peux à peu près faire tout et n'importe quoi, mais je pense que c'est plus clair d'apprendre les concepts avec des langages ou ils sont clairement séparés et identifiables)

----------


## gros_bidule

Yeah, mais là le soucis c'est, je pense, plutôt l’encadrement qui est déficient. 
Un jeune foufou fera n'imp en Python, mais s'il est un peu imaginatif il peut aussi faire de véritables horreurs en Java ou en tout ce que tu veux  ::):  Pas besoin d'un lance-flamme pour incendier une cathédrale, une allumette suffit.

Après dans la recherche vous n'avez peut être pas le budget/culture pour cet encadrement ? Les seuls chercheurs que je connais, ils passent bcp de temps à chercher des sous, alors le peu qu'ils ont... ^^.

----------


## Nilsou

> C'est outil très utile mais pas nécessaire.
> Si tu me demandes de choisir entre :
> - un projet avec relecture croisée de code en JS ou Python 
> - un projet développé sans méthodologie dans un langage avec typage fort
> 
> Je choisis le premier sans hésiter.


Ouais mais c'est facile d'opposer les choses comme ça. Si on te demande de choisir entre un mauvais maçon avec de bons outils ou un bon maçon avec de mauvais outils tu va me dire qu'il faut prendre le bon maçon.
Sauf que tu tord la question, la question initiale, pour filer la métaphore, c'est plutot : 
Vaut il mieux un maçon avec de bons outils qu'un maçon avec de mauvais outils, à niveau de maçon équivalent.




> D'accord avec ça, mais il faut plus le voir comme une aide que comme une contrainte. Un mauvais dév arrivera à te pondre des horreurs quel que soit le langage. Quand le langage est cadré en terme de syntaxe, de conventions, etc. tu réduis les risques mais surtout tu cherches à rendre plus naturelle la manière "propre".
> Le C++ est statiquement typé et pourtant tu peux très facilement pondre des horreurs qui ne fonctionneront même pas. En Python tu as tout de même moins de risque (liés à la mémoire notamment) et "par défaut" tu vas te manger des exceptions si le code commence à faire n'importe quoi, ce qui va te pousser à corriger les problèmes.
> 
> Les problèmes "objet" mentionnés précedemment ne sont pas du tout liés à Python : le développeur n'a juste rien compris de comment devait être organisé du code et des classes. Que le langage le permette ou pas ne règlera pas le problème de fond : si le dév n'est pas capable de pondre une architecture correcte, le projet se plantera à plus ou moin long terme.
> Se reposer sur les contraintes d'un langage pour avoir du code propre est illusoire. Ça peut aider mais c'est largement insuffisant.


Sauf que tout ça s'influence entre outils et devs : un outils qui permet n'importe quoi va aboutir à beaucoup plus de devs qui ne corrige pas leurs erreurs et font n’importe quoi. 
Ton exemple sur le C++ me parait complétement renversé : en C++ tu fini par aboutir à des crash alors qu'en python cela te permet de faire beaucoup plus de merde.




> Yeah, mais là le soucis c'est, je pense, plutôt l’encadrement qui est déficient. 
> Un jeune foufou fera n'imp en Python, mais s'il est un peu imaginatif il peut aussi faire de véritables horreurs en Java ou en tout ce que tu veux  Pas besoin d'un lance-flamme pour incendier une cathédrale, une allumette suffit.
> 
> Après dans la recherche vous n'avez peut être pas le budget/culture pour cet encadrement ? Les seuls chercheurs que je connais, ils passent bcp de temps à chercher des sous, alors le peu qu'ils ont... ^^.


Ben c'est pas vraiment la faute du budget ou de la culture, Python est un peu imposé par l'exterieur. Quand tout le monde fait du Python et que c'est hype, ben on te l'impose « d'en haut » pour tes enseignements, même si c'est complétement hors propos pour la formation.

----------


## Taro

Je partage le point de vue _"on peut arriver à faire de la merde avec tous les langages si on en fait l'effort"_.

Mais du coup en déduire que le langage n'y est pour rien, j'ai du mal. On ne peut pas nécessairement arriver à encadrer les gens.
Par contre si les outils les contraignent ils ne pourront pas passer outre.
Et oui, ça inclut aussi les outils de l'environnement de dév, et pas juste le langage, donc bien sûr dans le cas du Python des linters peuvent aider.

Toujours est-il que ça ne compensera pas tout.

Encore une fois, j'ai utilisé récemment du Python pour des usages persos et je le trouve excellent dans un cadre de petits outils.
Mais pour des projets de grande envergure il y a trop de problèmes pour que je puisse cautionner son utilisation.
La spec et l'implémentation ne sont pas séparées.
L'interprétation implique beaucoup trop d'erreurs se révélant au runtime alors qu'elles auraient pu être détectées en amont.
Le typage dynamique c'est niet.
Les membre/méthodes dynamiques aussi, ajoutables/retirables depuis n'importe où au runtime.

Il n'y a probablement aucun langage parfait, vu qu'en fonction de l'usage on va avoir des critères différents, mais dans mon cas, recherchant un bon ratio lisibilité/performance, une conception objet, et étant sensible aux problématiques de design et d'architecture, mon chouchou reste actuellement le C++.
Et pourtant il n'est pas sans défauts même pour mon usage.
Il lui manque juste quelques petits trucs à piocher à droite à gauche et ce serait parfait.

Le design-by-contract, déjà. C'était prévu pour C++20 et je crois que ça a été dégagé. Mais de toute façon, à vue de nez, ce qui était prévu restait encore bien incomplet par rapport à ce qu'on peut faire en Ada. Mais l'Ada, c'est une des pires syntaxes de l'univers, c'est verbeux comme pas possible, on accède aux tableaux via des parenthèses (c'est interdit par la Convention de Genève ça sérieux), et quasiment personne ne l'utilise, c'est dur de trouver des ressources dessus.

Un typage encore plus fort. Pareil, l'Ada va plus loin en proposant de créer des types dont on définit explicitement les dimensions et les range.

Ensuite, un peu plus de services, par exemple de manipulation des fichiers et des string, sans avoir à tirer tout un tas de bibliothèques. Le Python, à ce niveau, est exemplaire.

Voilà, allez, "juste" ces trois "petits" trucs et je serai content.

----------


## Cwningen

> Un typage encore plus fort. Pareil, l'Ada va plus loin en proposant de créer des types dont on définit explicitement les dimensions et les range.


Je ne connais pas Ada, c'est quoi exactement ces "dimensions" et "range" ?

----------


## ducon

Les dimensions, j’imagine que c’est la taille du tableau, _range_, j’imagine que c’est l’intervalle contenant ses éléments.

----------


## rOut

Non, c'est au niveau des ranges de valeurs possibles, pour un type entier par exemple.

----------


## vectra

Python, quand tu t'en sers pour jouer avec des grosses bibliothèques qui ont fait l'objet de wrappers, c'est quand-même assez magique au début, surtout quand tu t'en sers pour faire fonctionner des exemples pré-travaillés sur Jupyter-notebook. Je serais assez malhonnête de prétendre que ça ne sert à rien et que ça n'a pas d'utilité pour la formation, à commencer par l'auto-formation. Dans le même élan, j'ai vu aussi le wrappage Python motiver des front-end C++ pour des bibliothèques un peu trop imbittables, et ceux-là aussi j'ai vraiment rien contre.

De là à penser construire une appli sur ces bases, faut pas déconner.
J'ai une expérience encore courte et étroite dans le monde professionnel, mais pour ce que je vois, ça se tire la bourre entre Java, C# et C++. Un peu de Python aussi, mais systématiquement du désastre, en partie parce que les managers sont trop contents de voire une POC démarrer rapidement (, sachant effectivement que Python est assez royal pour faire de la POC), puis la passent en prod sans lui attribuer d'heures contrairement à ce qui avait été promis. 

Pour ce que j'en ai vu, quitte à ne pas faire du C++, je préfèrerais encore me risquer à C#/Java. Et vu que C++ remonte doucement en hype, peut-être que pas.

----------


## Orhin

> L'absence de typage, ça me semble absolument rédhibitoire. 
> 
> Je veux bien croire que la résolution dynamique du type soit intéressante pour le calcul scientifique 'à la Matlab' (vu en common lisp), mais en pratique, quand on veut de la perf (parce qu'un programme simple qui grossit se met à exploser en complexité spatiale et temporelle), ça finit par du typage statique et tout un tas de pratiques heuristiques pour empêcher de perdre de la perf dans des conneries qui n'ont d'intérêt que pour les non-informaticiens.


Beaucoup de programmes dans la vie réelle n'ont aucuns problèmes de perf nécessitant de préférer un langage à un autre.

----------


## Cwningen

> Non, c'est au niveau des ranges de valeurs possibles, pour un type entier par exemple.


C'est peut-être possible à implémenter en C++ (avec des templates partout), mais c'est pas sûr que le compilateur aime beaucoup. Exemple mal fait: https://gcc.godbolt.org/z/af8cWEW4E (ce prototype pour operator+, j'ose pas imaginer les fonctions plus complexes).

----------


## Taro

Oui on peut toujours magouiller pour délimiter un type (à base de getter/setter et des assert par exemple) et faire du pseudo-design by contract (toujours avec des assert) mais ce que je voulais dire c'est que le C++ n'a pas été pensé pour ça, ça se voit, et ça ne fait pas partie intégrante du langage.

En Ada les contrats font partie du langage et il y a des options de compilation spécifiques prévues pour les activer/désactiver.

Sinon pour les dimensions, je voulais effectivement parler de la délimitation d'un tableau, mais aussi de la taille mémoire utilisée pour représenter des nombres.
Et effectivement, pour les range, je voulais parler... bah du range de valeurs possibles.

Je déteste vraiment trop la syntaxe de l'Ada pour avoir osé faire ne serait-ce qu'un programme perso avec. Du coup c'est C++. Ou Python pour les p'tits bouts de code utilitaires.
Déréférencer un pointeur en écrivant *'all* derrière, ou accéder à un tableau par des parenthèses... brrr... rien que de l'écrire j'en ai la nausée...
 :Emo:

----------


## Cwningen

> Sinon pour les dimensions, je voulais effectivement parler de la délimitation d'un tableau, mais aussi de la taille mémoire utilisée pour représenter des nombres.


Et je ne comprends pas ce que tu reproches au C++ sur ce point.



> Et effectivement, pour les range, je voulais parler... bah du range de valeurs possibles.


C'est "intervalles" le mot que tu cherches.

----------


## Dross

Les questions de choix techno et leur justification je pense que c'est les meilleures aspects pour connaître la maturité d'une équipe. 

Je me souviens encore d'une entreprise où un de nos anciens stagiaire avait fini et il me disait "ah ils ont du C++/C# là bas mais ils passent progressivement sur C++ pour les perfs", du coup je lui dit "Ah vous avez une super équipe alors. Car vous utilisez A* et c'est multi-threadable et c'est compliqué le multi-threading en C++".  ::): 

Et lui qui regarde ses chaussures et qui me réponds "baaah en fait justement, comme c'est compliqué en fait non, on multi-thread pas". 

 ::O:   :Facepalm: 

Les gus sont parti de C# car "C++ c'est plus performant" pour fini avec une app pas performante car ils multi-thread pas (et le multi-threading sur C# et des lib comme le TPL même un stagiaire peut faire), je vous jure...  ::XD::

----------


## Kamikaze

Ouais très bonne remarque, le langage on s'en tape un peu la majorité du temps, surtout durant le prototypage. C'est dur de se forcer mais faut vraiment appliquer "Early optimization is the root of all evil".

D'abord tu fais le design sur le papier, ensuite tu implémentes un premier truc, et seulement après tu commences à optimiser.

Perso je suis sur C++ avant tout parce que la communauté me plait et que par défaut ça te force un peu à t'intéresser aux compilos etc.

Mais récemment j'ai participé à un espèce d'évènement de programmation, et bref, je suis parti sur C++ comme d'hab mais un moment j'avais besoin de faire du NLP (natural language processing). J'ai pas réflechi 2 minutes, j'ai vu que y'avait rien de très mature en C++ et en 2 lignes de python (un appel de librairie quoi) j'ai réglé mon problème, j'ai pluggé ça dans mon C++ et basta.

On veut toujours la fonctionnalité avant tout, point barre. Les choix plus bas niveau n'interviennent qu'à un certain degré de maturité du projet. Et très souvent comme le souligne Dross le problème ne vient pas de la techno.

Le nombre de projets que j'ai vu qui utilisent du C++, dans des boites renommées hein, "parce que ça va plus vite", et que derrière ils codent ça complètement à la pisse avec des perfs abominables. C'est comme mettre une F1 sur une route de montagne.

----------


## Kamikaze

D'ailleurs y'a la même problématique chez les game dev et le résultat est tout aussi drôle. On a un mec qui va sortir Katana Zero sur un moteur propriétaire assez bidon mais qui marche quoi (GameMaker), le résultat final est impeccable.

Et de l'autre côté on a des game dev qui veulent faire des game engine from scratch (aucun mal à ça) mais qui mettent 10 ans à sortir un jeu moche.

Et perso je suis le premier à m'embarquer sur du C++ pour ré-inventer la roue alors que je ferai bien mieux d'aller plus vite autrement avec un truc tout fait, donc je comprends totalement mais c'est une sale habitude.

----------


## Dross

En effet, après je pense que la justification "je/notre équipe est compétente sur cette stack" est tout à fait recevable aussi.  ::):  
Multiplier les technos pour aller systématiquement vers ce qui est "mieux" aux dépends du temps de formation/time to market/développement d'une expertise sur une techno particulière, c'est pas forcément la meilleure chose non plus. 

Et je suis aussi le premier à utiliser des armes lourdes comme ASP.NET ou Angular pour des petits PoC car je sais que ça me prendra moins de temps qu'avec n'importe quelle autre stack que je ne connais pas. Après si on s'est dirigé en premier lieu sur lesdites armes lourdes c'était pour de bonnes raisons (on laisse des stagiaires travailler sur le code source donc faut que ça soit structuré un minimum pour les aider, projets à gérer sur des années, etc), mais c'est vrai que certains trucs de l'extérieur on pourrai me dire "dafuq t'a sorti Angular pour ça ?" et ma réponse serai "oui mais ça m'a pris 12h entre le début du projet et sa fin, 3h de travail en tout", pas sûr que j'aurai fait mieux en prenant plus "léger" que je ne maîtrise pas encore.

----------


## Kamikaze

D'ailleurs on devrait se faire une liste de librairies ou autres ressources, repos github etc. canard approved en première page  ::o: 

Un peu dans la lignée des "awesome" sur github https://github.com/sindresorhus/awesome

----------


## Le poussin

> C'est d'ailleurs un des facteurs utilisé pendant la création de Java


Java avait aussi une approche très stricte de la programmation objet qui a fortement influencé le langage, notamment sur certaines construction assez rigides.  :;):  



> A mon avis les spécificités du langage sont très importantes et vont donner une 'couleur' à tout l'écosystème derrière, à la manière de l'utiliser et au code que tu vas récupérer ensuite dans des projets.


Tout à fait d'accord sur l'influence que ça aura sur l'écosystème.
Pour moi c'est surtout cet écosystème qui va cadrer les développements et permettre aux développeurs de se comprendre, adopter des bonnes pratiques, etc. Mais pour un néophyte qui n'est pas (encore) familier avec cet écosystème, rien de tout ça n'est évident et il va se casser les dents, faire des arborescences de classes abonimables, s'il se lance dans le langage, et ce malgré les contraintes de ce dernier. D'où le "largement insuffisant"... mais après chacun met un peu le curseur d'importance où il veut entre environnement et langage.

----------


## Robix66

> D'ailleurs on devrait se faire une liste de librairies ou autres ressources, repos github etc. canard approved en première page 
> 
> Un peu dans la lignée des "awesome" sur github https://github.com/sindresorhus/awesome


Je sais pas si on est suffisamment nombreux pour ne pas que ça parte en guerre de chapelles.  ::ninja::

----------


## Dross

Ah ça pourrai être sympa en effet, avec une petite description à chaque fois pour dire rapidement pourquoi on trouve ça cool/quel besoin/etc.  ::):

----------


## Teocali

> Java avait aussi une approche très stricte de la programmation objet qui a fortement influencé le langage, notamment sur certaines construction assez rigides.


J'mettrais un bémol : ce n'est pas le language qui a poussé ces constructions rigides. De manière objective, tu peux faire des trucs super souple en java. Le problème, c'est qu'il y'avait un coté "empêchons au max les dev de faire des conneries" chez les concepteurs. Ca a donné un compilateur qui vérifiait plein de chose pour l'époque, et qui était limite magique à l'époque (je me souviens encore de ma découverte du C++ après mes premieres cours de Java, et l'horreur qui m'a saisie quand je me suis rendu compte que tu n'étais pas obligé de gérer tes exceptions déclarées), mais d'un autre coté ça a donné une bibliothèque standard (et des framework) extrêmement verbeuse, a coup de builder de factory et tutti quanti. Et c'est généralement ce dernier point qu'on reproche à Java

----------


## Taro

> Et je ne comprends pas ce que tu reproches au C++ sur ce point.


Je l'ai pourtant couché noir sur blanc :




> Un typage encore plus fort. Pareil, l'Ada va plus loin en proposant de créer des types dont on définit explicitement les dimensions et les range.


Pour illustrer avec un exemple :


```
subtype Temperature is Integer range -273 .. 1200;
type Sondes is array(4 .. 8) of Temperature;
```

Encore une fois on peut bricoler pour arriver au même résultat, mais ça ne fait pas partie du langage, ce n'est pas prévu dans sa syntaxe, et j'aurais aimé que ça y soit.

----------


## Cwningen

> Je l'ai pourtant couché noir sur blanc :
> 
> 
> 
> Pour illustrer avec un exemple :
> 
> 
> ```
> subtype Temperature is Integer range -273 .. 1200;
> ...


J'ai dit que je ne connaissais pas l'ada. Il n'y a rien de clair dans ta phrase. La répéter n'aide pas. Au moins avec la syntaxe, j'ai pu chercher par moi-même. Donc si je comprends bien, c'est la possibilité de changer l'intervalle utilisé pour indexer les éléments du tableau (pour ne pas forcément commencer à 0 ou 1). Avant ça, j'en été encore à l'interprétation de ducon, mais la taille du tableau fait déjà partie du type en C++.

----------


## vectra

> Les questions de choix techno et leur justification je pense que c'est les meilleures aspects pour connaître la maturité d'une équipe. 
> 
> Je me souviens encore d'une entreprise où un de nos anciens stagiaire avait fini et il me disait "ah ils ont du C++/C# là bas mais ils passent progressivement sur C++ pour les perfs", du coup je lui dit "Ah vous avez une super équipe alors. Car vous utilisez A* et c'est multi-threadable et c'est compliqué le multi-threading en C++". 
> 
> Et lui qui regarde ses chaussures et qui me réponds "baaah en fait justement, comme c'est compliqué en fait non, on multi-thread pas". 
> 
>  
> 
> Les gus sont parti de C# car "C++ c'est plus performant" pour fini avec une app pas performante car ils multi-thread pas (et le multi-threading sur C# et des lib comme le TPL même un stagiaire peut faire), je vous jure...


C'est pas la faute du langage s'ils sont cons, surtout depuis C++17.
S'il fallait prendre ce genre d'exemples pour accréditer/discréditer un langage, ceux prisés par les débutants seraient disqualifiés d'office.

----------


## Captain_Cowkill

Dites les canards, est-ce que l'un de vous aurait suivi une formation JavaScript en ligne qu'il aurait trouvé intéressante ? Jusque là je suivais les "cours" de MDN, mais avec JavaScript je vois bien les limites des leçons gratuites (trop d'enrobage pour rien, pas assez d'exos, explications parfois trop succinctes, manque d'exemples clairs, pas mal de coquilles...).

----------


## Lazyjoe

> c'est compliqué le multi-threading en C++


A l'ancienne avec un peu d'OpenMP tu introduit facilement des threads. Mais sinon les threads sont dans la STL depuis C++11, et on peut même écrire des boucles "parallel_for" directement dans le langage maintenant.  ::siffle::

----------


## Nilsou

> Ouais très bonne remarque, le langage on s'en tape un peu la majorité du temps, surtout durant le prototypage. C'est dur de se forcer mais faut vraiment appliquer "Early optimization is the root of all evil".
> 
> D'abord tu fais le design sur le papier, ensuite tu implémentes un premier truc, et seulement après tu commences à optimiser.


C'est faux pour pleins de trucs. L'exemple avec A* dans le post juste au dessus du tient est typique : coder un A* pour que ce soit facile à paralléliser ensuite : faut le faire dés le début. C'est pas à la fin que tu prends un programme mono-coeur et que tu le parallélise.

----------


## ducon

> Avant ça, j'en été encore à l'interprétation de ducon, mais la taille du tableau fait déjà partie du type en C++.


Je ne connais rien à l’Ada moi non plus mais ça me semble clair :
Temperature contient des entiers compris entre −217 et 1200 (ou 1199 si on utilise la variante Pythada). C’est bien un intervalle mais d'entiers (noté souvent avec des crochets doubles en maths).
Sondes est un tableau de Temperatures indexé de 4 à 8 (ou 7…)

----------


## Nilsou

Bon après, c'est bien que ce soit dans le langage en lui même, mais ça se fait un peu en deux coups de cuillère à pot en C++ ...

----------


## Orhin

> Sondes est un tableau de Temperatures indexé de 4 à 8 (ou 7…)


C'est pas ce je comprend avec la syntaxe, pour moi Sondes est un tableau contenant 4 à 8 éléments.

----------


## Lazyjoe

> C'est pas ce je comprend avec la syntaxe, pour moi Sondes est un tableau contenant 4 à 8 éléments.


Pour le coup c'est similaire à la syntaxe Fortran où on écrirait la même chose avec Sondes(4:8)  (par contre pas moyen de faire des types avec un intervalle limité que je sache).

----------


## ducon

> C'est pas ce je comprend avec la syntaxe, pour moi Sondes est un tableau contenant 4 à 8 éléments.


Ha oui, pas con.




> Pour le coup c'est similaire à la syntaxe Fortran où on écrirait la même chose avec Sondes(4:8)  (par contre pas moyen de faire des types avec un intervalle limité que je sache).


En Python, si.

----------


## gros_bidule

Question con : avec un type à intervalle limité, vous n'avez pas peur de revenir sur le code 6 mois plus tard et vous demander comment fonctionne ce truc ?
Ca me fait penser à certaines fonctions Kotlin, qui font des trucs cheloux mais qui ont un nom pas du tout explicite. J'ai ça en horreur. l'objectif premier du code c'est d'être lisible, pas d'avoir le moins de caractères possibles.

----------


## Cwningen

Justement, dans l'exemple de Taro, c'est pour définir un nouveau type. Donc on n'écrit pas "cette fonction prend en entrée un entier entre -273 et 1200" mais "cette fonction prend en entrée une température", ce qui me parait assez clair.

----------


## William Vaurien

Petite parenthèse, j'ai un voisin au chômage depuis le confinement: il bosse dans l'événementiel... L'autre jour en discutant j'ai appris qu'il voulait changer d'orientation pour devenir dev mais que popol  emploi l'a envoyé chier car il est trop "diplomé" alors qu'il a 'juste' une Licence. 
Je ne sais pas trop quoi lui conseiller pour un vrai changement de carrière, pas apprendre à faire 'hello world' en Python. Vous avez des idées pour relancer ce genre de profil (35 ans / diplôme qui n'a rien à voir) vers du dev employable ?

----------


## ducon

Ben merde, si lui avec une licence est trop diplômé, que dire de mézigue ?  ::O:

----------


## FB74

> Petite parenthèse, j'ai un voisin au chômage depuis le confinement: il bosse dans l'événementiel... L'autre jour en discutant j'ai appris qu'il voulait changer d'orientation pour devenir dev mais que popol  emploi l'a envoyé chier car il est trop "diplomé" alors qu'il a 'juste' une Licence. 
> Je ne sais pas trop quoi lui conseiller pour un vrai changement de carrière, pas apprendre à faire 'hello world' en Python. Vous avez des idées pour relancer ce genre de profil (35 ans / diplôme qui n'a rien à voir) vers du dev employable ?


Déjà, il faudrait voir le type de formation.
Moi, je pense qu'il faudrait regarder du côté de tout ce qui est en relation directe (DURANT la formation) avec l'entreprise.

Donc contrat pro ou truc dans le genre.

L'avantage c'est que tu es payé, et que si l'entreprise te forme pendant 1 an, c'est pas juste pour un petit tour...

Il faut vraiment avoir un pied dans le monde de l'entreprise, sinon la personne va tomber sur une formation "plus ou moins académique" et sera en compétition avec des tas de gens sans expérience professionnelle.

----------


## Taro

Haha, c'est marrant de voir vos différentes interprétations, ça montre bien ce que je disais : la syntaxe de l'Ada est vraiment naze.
On écrit un roman pour faire deux pauvres instructions, et en plus ça n'est pas suffisamment intuitif pour ne laisser aucune place à l'interprétation.
 ::P: 

C'est la "version ducon" qui est correcte.

Définir l'intervalle (-2 .. 2) pour un subtype Integer, ça spécifie les limites des valeurs possibles, ce qui donne ainsi un type entier pouvant prendre les valeurs -2, -1, 0, 1 ou 2.
Le but étant effectivement que les fonctions/méthodes reçoivent en paramètre un type "Temprature", par exemple, partout où ça a du sens.
Impossible de faire un cast implicite par erreur, il faut faire un cast explicite si on veut convertir une valeur depuis un autre type. On détecte ainsi encore un peu plus d'erreurs possibles, au compile-time si un cast est manquant et au runtime si l'intervalle prévu est dépassé.

Définir l'intervalle (3 .. 5) pour un type array, ça spécifie directement les indices possibles, et donc indirectement les dimensions dudit tableau, ce qui donne ainsi un tableau de 3 éléments auxquels on accède via les indices 3, 4 et 5.
Donc on peut définir des tableaux auxquels on accède depuis l'index 0, depuis l'index 1, ou encore depuis n'importe quel index. J'ai pas trop d'exemple concret qui me revient en tête pour un tableau qu'on n'indexerait ni à 0 ni à 1 mais bon, c'est possible.


Et sinon @Cwningen : j'ai donné un exemple, ok ça ne t'a pas parlé ; mais je ne suis pas censé connaître tes connaissances et je n'allais peut-être pas non plus écrire un roman pour introduire ce langage. Langage dont, encore une fois, je n'aime d'ailleurs pas la syntaxe. J'ai énuméré deux-trois points qui me manquent dans le C++, c'est tout.
Je suis pas venu me battre, alors ne sois pas si cassant dans tes messages.
 :;):

----------


## Orhin

> Définir l'intervalle (3 .. 5) pour un type array, ça spécifie directement les indices possibles, et donc indirectement les dimensions dudit tableau, ce qui donne ainsi un tableau de 3 éléments auxquels on accède via les indices 3, 4 et 5.
> Donc on peut définir des tableaux auxquels on accède depuis l'index 0, depuis l'index 1, ou encore depuis n'importe quel index. J'ai pas trop d'exemple concret qui me revient en tête pour un tableau qu'on n'indexerait ni à 0 ni à 1 mais bon, c'est possible.


Mais c'est quoi l'intérêt ?  ::O: 

Car autant définir le nombre min/max d'éléments je vois très bien les cas d'utilisation (idem pour les ranges de nombre), autant redéfinir l'index de départ ça me parait totalement contre intuitif.

----------


## vectra

> Petite parenthèse, j'ai un voisin au chômage depuis le confinement: il bosse dans l'événementiel... L'autre jour en discutant j'ai appris qu'il voulait changer d'orientation pour devenir dev mais que popol  emploi l'a envoyé chier car il est trop "diplomé" alors qu'il a 'juste' une Licence. 
> Je ne sais pas trop quoi lui conseiller pour un vrai changement de carrière, pas apprendre à faire 'hello world' en Python. Vous avez des idées pour relancer ce genre de profil (35 ans / diplôme qui n'a rien à voir) vers du dev employable ?


Y'a des formations en 10 semaines cofinancées par Popol et une SSII, mais 1) c'est pas sûr que ça envoie du bois cette année et 2) c'est niveau master en général, avec une sélection sur dossier.
A voir, car c'est une voie intéressante pour quelqu'un qui n'a jamais fait d'info. 
Après, à l'époque où ça embauchait, ça servait aussi à caser les emplois les moins payés et intéressants, en tous cas jusqu'à ce que les élèves prennent de l'XP.

----------


## gros_bidule

> Petite parenthèse, j'ai un voisin au chômage depuis le confinement: il bosse dans l'événementiel... L'autre jour en discutant j'ai appris qu'il voulait changer d'orientation pour devenir dev mais que popol  emploi l'a envoyé chier car il est trop "diplomé" alors qu'il a 'juste' une Licence. 
> Je ne sais pas trop quoi lui conseiller pour un vrai changement de carrière, pas apprendre à faire 'hello world' en Python. Vous avez des idées pour relancer ce genre de profil (35 ans / diplôme qui n'a rien à voir) vers du dev employable ?


Y'a des coincoins qui ont fait ou sont en reconversion. ils sauront aider je pense. -> Topic des carrières  ::): 
edit : http://forum.canardpc.com/threads/98...ans-la-popoche

----------


## FB74

Y'a un bundle d'ebooks Python sur Humble Bundle:
https://www.humblebundle.com/books/u...lf-packt-books

Vous pensez que ça peut valoir le coup/ coût ou qu'il vaut mieux en rester à des trucs sur le net ?

----------


## vectra

La plupart des bouquins Packt que j'ai testés, franchement ils sont limites pas bons.
J'ai l'impression que Packt est aux éditeurs classiques ce que TedX est à Ted. On est parfois pas loin de l'auto-édition je trouve...

----------


## Taro

> Mais c'est quoi l'intérêt ? 
> 
> Car autant définir le nombre min/max d'éléments je vois très bien les cas d'utilisation (idem pour les ranges de nombre), autant redéfinir l'index de départ ça me parait totalement contre intuitif.


J'avoue, l'intérêt de définir l'indexation d'un tableau par des entiers de 5 à 8 par exemple, on peut parfois le chercher... ça paraît inutile et contre-intuitif.
Ce qu'il faut y voir, par contre, c'est que ça marche sur des types plus variés que les "simples" entiers de base.

Et donc, par exemple, tu pourrais très bien définir un tableau contenant des entiers, indexé via le type Temperature, et qui te servirait à stocker pour chaque valeur la conversion en degrés Fahrenheit.
Ou avoir un type enum Color qui peut prendre les valeurs Red/Green/Blue et t'en servir pour indexer un type array Pixel.
Tout en ayant les contraintes du typage fort (nécessité de passer par des casts explicites en cas de conversion, détection au runtime des valeurs non autorisées).

----------


## Kamikaze

> faut le faire dés le début. C'est pas à la fin que tu prends un programme mono-coeur et que tu le parallélise.


Bah faut déjà que y'ait un besoin de parallélisation en premier lieu, et pourquoi paralléliser au niveau de l'algorithme? Si c'est des agents qui consomme l'algorithme avec de petits sets de données tu peux facilement imaginer un thread par client.

On rappelle que paralléliser rajoute un overhead potentiel, donc moins rapide que tu séquentiel si c'est pas des problèmes adaptés.

Et donc si tu détermines qu'en premier lieu tu veux paralléliser l'algo', bah ça fait partie de la phase de design que je décris. Donc on est d'accord et tu dis mot pour mot ce que je dis dans mon post, design d'abord.

Sachant que c'est tout de même extrêmement simple de déterminer si tu vas vouloir paralléliser ou non selon ce que tu fais. Volume de données/pattern des données vs. restriction hardware/réseau, contraintes de temps. Et paf tu sais si tu dois paralléliser ou non.

Et justement le "à la fin", si c'est après un succès monstre de ton produit, reprendre le design est parfaitement normal pour supporter ta nouvelle popularité. Tu as un time to market court avec un prototypage rapide qui te semblait bon, un succès inattendu arrive, potentiellement des changements à faire, hyper courant dans l'industrie.

Et je suis pas en train de dire qu'il faut prototyper à la zeub' c'est juste un exemple potentiel au pif.

----------


## Orhin

> J'avoue, l'intérêt de définir l'indexation d'un tableau par des entiers de 5 à 8 par exemple, on peut parfois le chercher... ça paraît inutile et contre-intuitif.
> Ce qu'il faut y voir, par contre, c'est que ça marche sur des types plus variés que les "simples" entiers de base.
> 
> Et donc, par exemple, tu pourrais très bien définir un tableau contenant des entiers, indexé via le type Temperature, et qui te servirait à stocker pour chaque valeur la conversion en degrés Fahrenheit.
> Ou avoir un type enum Color qui peut prendre les valeurs Red/Green/Blue et t'en servir pour indexer un type array Pixel.
> Tout en ayant les contraintes du typage fort (nécessité de passer par des casts explicites en cas de conversion, détection au runtime des valeurs non autorisées).


Ah oui effectivement ça peut être très utile dans ces cas.

Y'a un truc similaire en Typescript avec les types mappés où tu peux définir les propriétés acceptées/obligatoires pour un objet.
Si je reprend ton exemple du pixel tu peux faire :


```
// Pas obligé d'assigner des valeurs explicites à l'enum mais plus pratique pour déclarer les objets et accéder à leurs propriétés
enum Colors {
  Red = 'red',
  Green = 'green',
  Blue = 'blue'
}

// Pas de range en TS malheureusement pour l'instant, donc déclarer les valeurs de 0 à 255 est plutôt moche
type ColorValue = 0 | 1 | 2 | 4

// Record<K, V> est un type générique de base qui accepte les types de propriétés (K) et des valeurs (V) de l'objet
type Pixel = Record<Colors, ColorValue>

const a: Pixel = {
  [Colors.Red]: 0,
  [Colors.Green]: 0,
  [Colors.Blue]: 0,
} // OK

const b: Pixel = {
  red: 0,
  green: 0,
  blue: 0,
} // OK

const c: Pixel = {
  red: 5,
  green: 0,
  blue: 0,
} // Error

const d: Pixel = {
  red: 0,
  blue: 0,
} // Error

const e: Pixel = {
  red: '0',
  green: '0',
  blue: '0',
} // Error


const f: Partial<Pixel> = {
  red: 0,
} // OK

const test1 = 5
const test2: number = 4
const test3 = 4
const test4: ColorValue = 4

a.red = test1 // Error
a.red = test2 // Error
a.red = test3 // OK
a.red = test4 // OK
a[Colors.red] = test4 // OK
a['red'] = test4 // OK
```

Bien sur ça reste du check à la compilation pas au runtime (JS interprété oblige), mais c'est très utile.

----------


## Taro

> Y'a un truc similaire en Typescript avec les types mappés où tu peux définir les propriétés acceptées/obligatoires pour un objet.
> _[...]_
> Bien sur ça reste du check à la compilation pas au runtime (JS interprété oblige), mais c'est très utile.


Effectivement c'est pas mal !
Et justement, je préfère ce qui est détecté à la compilation. L'Ada est justement très fort pour ça. Tout ce qui est détecté avant le runtime est bon à prendre.
 ::): 

(et le Python m'insupporte sur ce point)

----------


## XWolverine

Je ne sais plus comment ça marche, l'ADA, j'ai juste souvenir quand je l'ai vu à l'école que c'était effectivement bien rigide, notamment les casts obligatoirement explicites.

----------


## Nilsou

En même temps, même en C c'est considéré comme une mauvaise pratique de faire des cast implicites. Donc ça me parait pas déconnant de l'interdire carrément.

----------


## rOut

C'est ce que fait Rust d'ailleurs, tout est explicite, y compris les conversions entières dès que les types ne sont pas identiques.

----------


## gros_bidule

> La plupart des bouquins Packt que j'ai testés, franchement ils sont limites pas bons.
> J'ai l'impression que Packt est aux éditeurs classiques ce que TedX est à Ted. On est parfois pas loin de l'auto-édition je trouve...


Ha ben un truc qui doit jouer : à peu près n'importe qui peut être relecteur ou auteur chez Packpub, leurs compétences ne sembles pas vérifiées. Je ne sais pas comment ça se passe chez la concurrence cela dit.
Bref, ils visent très large, quantité over qualitay ^^. Mais le bon côté c'est que si tu cherches ton premier éditeur, tu auras facilement ta chance. En plus le % de droits d'auteur est avantageux chez eux.

----------


## Taro

> Je ne sais plus comment ça marche, l'ADA, j'ai juste souvenir quand je l'ai vu à l'école que c'était effectivement bien rigide, notamment les casts obligatoirement explicites.


C'est effectivement assez rigide, du coup. Le typage est très fort et très contraint, donc ça vient avec...

Perso ce n'est pas ça qui m'a dérangé avec ce langage, il est certes contraignant sur ce point mais avec ça c'est presque du _"compiler c'est gagner"_.
Beaucoup de problèmes sont détectés avant même de produire l'exécutable.

Ce qui m'a vraiment dérangé c'est sa syntaxe. Je comprends vraiment pas les choix qui ont été faits à ce niveau.
Anecdote là-dessus : au précédent taf, celui où j'ai fait de l'Ada, on avait un bouquin sur le langage, l'auteur était un vendu total. Dans la préface, il disait regretter que le Java ait adopté une syntaxe très proche du C/C++.
Ce qu'il faut pas lire quand même...
Parce que bon... ces trois-là ont une syntaxe relativement sympa, et celle de ton Ada elle est moisie mon gars, c'est aussi simple que ça.
 :Facepalm: 




> En même temps, même en C c'est considéré comme une mauvaise pratique de faire des cast implicites. Donc ça me parait pas déconnant de l'interdire carrément.





> C'est ce que fait Rust d'ailleurs, tout est explicite, y compris les conversions entières dès que les types ne sont pas identiques.


Oui pour le coup autant forcer le cast explicite. Et éventuellement définir clairement les règles si une valeur sort des limites autorisées. Là c'est top.

----------


## Orhin

> Effectivement c'est pas mal !


D'ailleurs pour l'exemple des tableaux avec un nombre min/max d'éléments tu peux le faire en partie en TS avec des tuples :



```
type Pixel = {
  red: number,
  green: number,
  blue: number
}

type Pixels = [Pixel, Pixel, Pixel?, Pixel?] // Min 2 éléments, 4 max

const a: Pixel = {
  red: 0,
  green: 0,
  blue: 0
}

const b1: Pixels = [a] // Error
const b2: Pixels = [a, a, a, a] // Ok
const b3: Pixels = [a, a, a, a, a] // Error

const b4: Pixels = [a, a, a, a]

b2[0].blue // OK
b2[3].blue // Error
b2[5] // Error
b2[0] = b2[3] // Error
b2[3] = b2[1] // OK
b2[0] = b2[3] // OK car détection de l'assignation au dessus

type Pixels2 = [Pixel, Pixel,  ...Pixel[]] // Min 2 éléments, pas de max

const c1: Pixels2 = [a] // Error
const c2: Pixels2 = [a, a] // Ok

c2[0].blue // OK
c2[3].blue // Error si compil avec noUncheckedIndexedAccess, OK sinon (ou alors il faut déclarer le type comme ça [Pixel, Pixel, ...(Pixel | undefined)[]])
c2[3] // OK
c2[0] = c2[3] // Error
c2[3] = c2[1] // OK
c2[0] = c2[3] // OK car détection de l'assignation au dessus
```

Par contre ça reste limité vu que :
- y'a pas de check sur les méthodes de modifications des arrays (pop, push, splice, etc)
- la déclaration de type est clairement pas faisable avec des min/max importants




> Et justement, je préfère ce qui est détecté à la compilation. L'Ada est justement très fort pour ça. Tout ce qui est détecté avant le runtime est bon à prendre.


Ah clairement mais si tu peux avoir les deux c'est encore mieux.  ::P:

----------


## Frypolar

> Dites les canards, est-ce que l'un de vous aurait suivi une formation JavaScript en ligne qu'il aurait trouvé intéressante ? Jusque là je suivais les "cours" de MDN, mais avec JavaScript je vois bien les limites des leçons gratuites (trop d'enrobage pour rien, pas assez d'exos, explications parfois trop succinctes, manque d'exemples clairs, pas mal de coquilles...).


Je crois que Pluralsight est gratuit pour tout le mois d’avril. J’ai un accès via le boulot et je trouve ça vraiment bien.

----------


## Helix

En parlant d'Ada, j'ai souvent lu qu'Ariane 5 avait explosé en raison d'un oubli d'une compilation finale avec toutes les détections activées. Ce qui aurait permis de détecter un dépassement de valeur. Au final je ne sais pas, mais le rapport d'enquête indique que (http://www.astrosurf.com/luxorion/as...riane-v501.htm) :





> A cet instant, une partie de ces données ne contenait pas
>       des données de vol proprement dites mais affichait un profil de bit spécifique
>       de la panne du calculateur du SRI 2 qui a été interprété comme étant
>       des données de vol ; la raison pour laquelle le SRI 2 actif n'a pas
>       transmis des données d'attitude correctes tient au fait que l'unité
>       avait déclaré une panne due à une exception logiciel ; l'OBC n'a pas pu
>       basculer sur le SRI 1 de secours car cette unité avait déjà cessé de
>       fonctionner durant le précédent cycle de données (période de 72
>       millisecondes) pour la même raison que le SRI 2 ; l'exception logiciel
> ...


Ce qui est bien un problème de transtypage.

----------


## Teocali

> Ce qui m'a vraiment dérangé c'est sa syntaxe. Je comprends vraiment pas les choix qui ont été faits à ce niveau.
> Anecdote là-dessus : au précédent taf, celui où j'ai fait de l'Ada, on avait un bouquin sur le langage, l'auteur était un vendu total. Dans la préface, il disait regretter que le Java ait adopté une syntaxe très proche du C/C++.
> Ce qu'il faut pas lire quand même...
> Parce que bon... ces trois-là ont une syntaxe relativement sympa, et celle de ton Ada elle est moisie mon gars, c'est aussi simple que ça.


Je suis pas vraiment d'accord. J'irais même jusqu'a dire qu'elle est très explicite, comme le reste du language... du moment qu'on connait les features de celui-ci. Si on connaît la logique des types contraints et des index variables d'Ada, ça passe tout de suite mieux.

Perso, j'ai fait du Ada dans mes deux dernières années d'études, et j'avoue regretter un peu de ne pas avoir l'occasion d'en faire dans ma vie professionnelle. C'est un language que je trouve très élégants.

----------


## Dross

> C'est pas la faute du langage s'ils sont cons, surtout depuis C++17.
> S'il fallait prendre ce genre d'exemples pour accréditer/discréditer un langage, ceux prisés par les débutants seraient disqualifiés d'office.


Mais où a tu vu que je parlais du langage : je parlais exclusivement de l'équipe et de son mauvais choix techno (pour son équipe/cas d'application).

On n'insiste pas assez là dessus : il n'y a pas de mauvaise techno que de mauvaise applications. 
Et ce sujet est justement un parfait moyen de connaître le niveau de l'équipe que de parler de ce genre de choses. Limite en entretiens aujourd'hui c'est presque une des choses que dont j'aime le plus parler, ça illustre très bien l'équipe, et ta propre vision des choses en retour.

----------


## vectra

Je ne dis rien d'autre.
C'est pas la faute de C++ s'il est choisi par une équipe qui me semble très peu compétente de certains points de vue, et visiblement pas au fait de ce que la précédente version de C++ propose.

Très dur à dire, ce genre de choses, quand on ne connaît pas l'équipe ni les ressorts de leur décision. Entre TBB, OMP, std, Qt (etc), il y a largement de quoi faire en parallélisation facile de code portable pour les nuls, mais le diable est parfois dans les détails aussi.

----------


## deathdigger

> Je crois que Pluralsight est gratuit pour tout le mois d’avril. J’ai un accès via le boulot et je trouve ça vraiment bien.


+1, j'en ai déjà parlé, mais c'est vraiment bien (même si un peu cher).

Après, ça va dépendre des intervenants. Sur Angular, par exemple, de base y'a Deborah Kurata qui est top. Hyper claire, hyper didactique, elle prend son temps pour les explications, etc.
A l'inverse, pour Material Design, Ajden Towfeek est pressé et putain, pour le suivre, faut tout le temps mettre en pause, le temps de taper/copier-coller le code.

----------


## Taro

> Je suis pas vraiment d'accord. J'irais même jusqu'a dire qu'elle est très explicite, comme le reste du language... du moment qu'on connait les features de celui-ci. Si on connaît la logique des types contraints et des index variables d'Ada, ça passe tout de suite mieux.


Oui pour la définition des types elle est relativement claire, ça va.

Mais pour déréférencer un pointeur, choper l'adresse d'une variable/d'un objet, par exemple, c'est vraiment naze je trouve.
Pareil faut passer par les "pointeurs à échelle de classe" (wut ?) pour avoir la notation pointée. Sinon c'est de l'objet à la C/Python et tu dois passer le this à tes "méthodes". C'est dommage.

Et puis cette syntaxe au global est verbeuse à souhait... Faut écrire un roman pour coder le moindre truc, perso je trouve ça usant.

Mais affaire de point de vue, j'en conviens.  :;):

----------


## ducon

> A l'instant précis où j'ai vu qu'il fallait passer le thi... pardon, le self en premier paramètre de chaque métho... euh fonction.


C’est parce qu’il paraît que tu peux utiliser ce que tu veux d’autre (_this_ par exemple) mais j’ai essayé, je me suis fait jeter.

----------


## Taro

Oui j'avais essayé aussi (bon la vérité, j'avais écrit this par réflexe), ça m'a jeté également.

----------


## MrBeaner

> Dites les canards, est-ce que l'un de vous aurait suivi une formation JavaScript en ligne qu'il aurait trouvé intéressante ? Jusque là je suivais les "cours" de MDN, mais avec JavaScript je vois bien les limites des leçons gratuites (trop d'enrobage pour rien, pas assez d'exos, explications parfois trop succinctes, manque d'exemples clairs, pas mal de coquilles...).


Je me répète, mais tu peux tester le cours et le projet de la semaine 5 de CS50 Web  :;):  Sinon, je recommande les cours bien notés de Coursera qui m'ont toujours satisfait (pas fait de JS par contre).

----------


## Tramb

> Sinon c'est de l'objet à la C/Python et tu dois passer le this à tes "méthodes". C'est dommage.


Beaucoup de gens ne sont pas d'accord avec ça (privilégier magiquement un paramètre à tes fonctions, le "plus à gauche").
Pense au multiple dispatch.

----------


## Taro

Yup tu as raison sur ce point.

C’est juste que personnellement je n’ai jamais ressenti le besoin de ce genre de fonctionnalité  ::): 
A l’inverse j’apprécie de faire de la notation pointée, je trouve ça lourd de mentionner le this partout alors que tout ce que j’en fais est de le passer d’appel en appel.

Encore une fois le langage parfait n’existe pas, mais le mien ce serait un C++ avec 2-3 trucs récupérés d’ailleurs  :Bave:

----------


## rOut

> Beaucoup de gens ne sont pas d'accord avec ça (privilégier magiquement un paramètre à tes fonctions, le "plus à gauche").
> Pense au multiple dispatch.


D'ailleurs c'est comme les types de retour, franchement une seule valeur c'est un peu nul. Bon Rust s'en sort pas trop mal mais c'est juste parce qu'ils ont "match" qui fait de la magie. Python et la destructuration des tuples / array en retour, on n'en parle pas vu que tu te rends compte seulement au runtime que tu t'es planté sur le nombre de valeurs retournées.

----------


## ducon

https://docs.python.org/fr/3.10/library/typing.html

----------


## Le poussin

> C’est parce qu’il paraît que tu peux utiliser ce que tu veux d’autre (_this_ par exemple) mais j’ai essayé, je me suis fait jeter.


C'est ton éditeur ou IDE qui doit te jeter. L'interpréteur te laissera faire car le self n'a absolument rien de spécial pour le langage ; il faut juste que la méthode accepte au moins avec un paramètre positionnel pour pouvoir l'appeler via une instance, du fait de la mécanique qui lie les méthodes aux instances.

----------


## Captain_Cowkill

> Je crois que Pluralsight est gratuit pour tout le mois d’avril. J’ai un accès via le boulot et je trouve ça vraiment bien.





> +1, j'en ai déjà parlé, mais c'est vraiment bien (même si un peu cher).
> 
> Après, ça va dépendre des intervenants. Sur Angular, par exemple, de base y'a Deborah Kurata qui est top. Hyper claire, hyper didactique, elle prend son temps pour les explications, etc.
> A l'inverse, pour Material Design, Ajden Towfeek est pressé et putain, pour le suivre, faut tout le temps mettre en pause, le temps de taper/copier-coller le code.





> Je me répète, mais tu peux tester le cours et le projet de la semaine 5 de CS50 Web  Sinon, je recommande les cours bien notés de Coursera qui m'ont toujours satisfait (pas fait de JS par contre).


Merci merci  ::):

----------


## ducon

> C'est ton éditeur ou IDE qui doit te jeter. L'interpréteur te laissera faire car le self n'a absolument rien de spécial pour le langage ; il faut juste que la méthode accepte au moins avec un paramètre positionnel pour pouvoir l'appeler via une instance, du fait de la mécanique qui lie les méthodes aux instances.


M’enfin, j’avais essayé et ça a foiré.
Là, ça marche :


```
> cat essai.py 
#!/usr/bin/python3

class essai():
  def __init__(this,n):
    this.n=n
  def __str__(this):
    return str(this.n)

a=essai(123)
print(a)
```

 ::O:

----------


## MrBeaner

> Je crois que Pluralsight est gratuit pour tout le mois d’avril. J’ai un accès via le boulot et je trouve ça vraiment bien.


Merci pour le tip! J'en ai profité et j'en profite pour revoir les bases de JS. Ça passe très bien comme apprentissage passif  :;):

----------


## Nilsou

> D'ailleurs c'est comme les types de retour, franchement une seule valeur c'est un peu nul. Bon Rust s'en sort pas trop mal mais c'est juste parce qu'ils ont "match" qui fait de la magie. Python et la destructuration des tuples / array en retour, on n'en parle pas vu que tu te rends compte seulement au runtime que tu t'es planté sur le nombre de valeurs retournées.


Perso j'aime bien la vieille méthode du C la dessus : une structure toute mimi : c'est propre, c'est carré.

----------


## vectra

> Python et la destructuration des tuples / array en retour,


On a ça en C++, tu sais ?

----------


## Orhin

> On a ça en C++, tu sais ?


Et en Swift.
Et en C#.
Et en Kotlin.
Et en Typescript.

Pour ces 2 derniers ça fonctionne pour les objets aussi, pas que les tuples/arrays.

----------


## rOut

> On a ça en C++, tu sais ?


J'ai un black-out complet sur le C++, bizarrement. (oui je sais mais c'est pas là depuis longtemps et ça reste du tuple-like, certes checké à la compil).

- - - Mise à jour - - -




> Et en Swift.
> Et en C#.
> Et en Kotlin.
> Et en Typescript.
> 
> Pour ces 2 derniers ça fonctionne pour les objets aussi, pas que les tuples/arrays.


Bah justement, je trouve que le retour de tuple c'est un workaround. En particulier quand le tuple en question il s'écrit std::tuple<a, b, c> et nécessite un entête de douze milliards de lignes. 

Après c'était plus pour la blague parce qu'on disait que le format habituel des fonctions en POO (avec un paramètre privilégié) n'avait en vrai pas tant de sens que ça. Donc le paramètre de retour unique non plus.

En C# / Kotlin c'est via in / out ou c'est autre chose?

----------


## Le poussin

Tu ferais comment pour retourner plusieurs valeurs sans tuple ?
Plus exactement, y aurait-il un intérêt à ne pas rendre ça compatible avec les tuples ?

Un tuple est un type qui groupe un nombre fini et prédeterminé de valeurs, chacune avec son type (pour les langages statiquement typés). Ça correspond exactement au besoin de valeurs de retour multiples.
Ça n'est pas pour rien qu'autant de langages (tous ?) l'implémentent avec un tuple ou ce qu'ils ont de plus proche. Bonus : il n'y a rien à ajouter au langage pour que ça marche.

Ensuite chaque langage fait avec ce qu'il a à disposition (vérification runtime ou pas, déstructuration, ...).

----------


## Dross

(Très) souvent un tuple se remplace par un objet du domaine. Et si tu vois pas comment le modéliser par un objet du domaine faut ptet se poser la question de ce que fait ta fonction. 

D'ailleurs c'est pas pour rien que les langages avancés rajoutent du sucre syntaxiques pour les ramener sur une structure objet avec des propriétés bien nommée (mais arrivé là, mieux vaux créer son objet comme un grand).

----------


## Teocali

> En C# / Kotlin c'est via in / out ou c'est autre chose?


Pour C# je sais pas mais pour kotlin c’est via des methodes componentX()

----------


## Lazyjoe

> Bah justement, je trouve que le retour de tuple c'est un workaround. En particulier quand le tuple en question il s'écrit std::tuple<a, b, c> et nécessite un entête de douze milliards de lignes.


C'est toujours un poil laborieux pour écrire une méthode qui renvoie un tuple, mais depuis les structured bindings c'est simplissime à l'appel :



```
auto [a,b,c] = foo();
```

----------


## Orhin

> C'est toujours un poil laborieux pour écrire une méthode qui renvoie un tuple, mais depuis les structured bindings c'est simplissime à l'appel :
> 
> 
> 
> ```
> auto [a,b,c] = foo();
> ```


Cette syntaxe tu la retrouves dans beaucoup de langages modernes.
La seule différence va être de remplacer les parenthèses par des crochets ou des accolades parfois.

----------


## Lazyjoe

> Cette syntaxe tu la retrouves dans beaucoup de langages modernes.
> La seule différence va être de remplacer les parenthèses par des crochets ou des accolades parfois.


Oui c'était le point, en C++ moderne on commence vraiment à avoir des syntaxes très simples sans sacrifier aucune des caractéristiques du langage pour autant.

----------


## Tramb

> Tu ferais comment pour retourner plusieurs valeurs sans tuple ?
> Plus exactement, y aurait-il un intérêt à ne pas rendre ça compatible avec les tuples ?
> 
> Un tuple est un type qui groupe un nombre fini et prédeterminé de valeurs, chacune avec son type (pour les langages statiquement typés). Ça correspond exactement au besoin de valeurs de retour multiples.
> Ça n'est pas pour rien qu'autant de langages (tous ?) l'implémentent avec un tuple ou ce qu'ils ont de plus proche. Bonus : il n'y a rien à ajouter au langage pour que ça marche.
> 
> Ensuite chaque langage fait avec ce qu'il a à disposition (vérification runtime ou pas, déstructuration, ...).


Quand tu appelles une fonction, en général,tu ne packes pas un tuple pour ça (il y a plein de finesses sur cette phrase, mais d'un point de vue syntaxe de surface, je passe). Donc on peut se demander s'il y a raison de devoir en dépacker un pour devoir renvoyer plusieurs valeurs.
En général dans langages statiquement typés, oui, et c'est le sucre qui fait la sauce.
Dans les langages dynamiquement typés, ça se débat.

Edit : je vire mon exemple, qui a besoin de plein de prérequis et n'est pas très éclairant.

- - - Mise à jour - - -




> (Très) souvent un tuple se remplace par un objet du domaine. Et si tu vois pas comment le modéliser par un objet du domaine faut ptet se poser la question de ce que fait ta fonction. 
> 
> D'ailleurs c'est pas pour rien que les langages avancés rajoutent du sucre syntaxiques pour les ramener sur une structure objet avec des propriétés bien nommée (mais arrivé là, mieux vaux créer son objet comme un grand).


Pas faux mais très souvent une lambda se ramène à une fonction du domaine. Enfin tu vois où je veux en venir  ::): 
Nommer ou considérer que c'est juste la glue, y a pas de vérité objective, on sait juste détester le code qui fait pas le "bon" truc quand on le lit.

----------


## Kamikaze

Putain de nom de dieu, va me falloir un expert *Windows* pour m'expliquer. J'arrive pas à rester calme et courtois avec cet OS, pardonnez moi l'énervement 

Comment vous bossez en C++ sous Windows sérieusement

J'ai voulu reproduire mon setup pour programmation GPU (que j'ai sous Linux) sur Windows.

Windows qui a apparemment quelque défenseurs sur le forum, donc ça va être le moment de sortir la sauce parce qu'a priori cet OS de merde, pue effectivement bien la merde. Je laisse le bénéfice du doute, peut être que je connais pas, mais là j'ai d'énormes doutes.

Donc la question à 2 Milliards c'est:

Comment vous choppez une dépendance pour un de vos projet.

Exemple, je veux faire un super cube qui tourne avec ma carte graphique.

Sur Linux ça ressemble à ça:
# Install
package-manager install vulkan
package-manager install glfw3
# CMake
find_package(Vulkan)
find_package(glfw3)

*Fini.*

Sur Windows je suis TRES CURIEUX de savoir quelle est la norme.

Parce que là je vois que le site de Vulkan propose un installeur qui met les variables kivonbien dans le path, et effectivement ça fonctionne, rien de sorcier, mais faut passer par un putain de navigateur web, cliquer 10 fois et enfin avoir l'install.
Tu peux aussi tenter de passer par un package manager genre scoop ou choco truc voir vcpkg, mais les versions sont carrément en retard et ça a l'air de merder au niveau du path.

Cette chiasse de vcpkg (qui d'ailleurs t'opt-in par défaut pour envoyer des données ces fils de pute, pas la décence d'opt-out par défaut ou de demander) te demande de toute façon de passer par le site de Vulkan, mais quel est l'intérêt de ce truc sérieux.

Bon on va dire que pour Vulkan on va faire à la main, mais ensuite si tu veux GLFW pour un peu de cross plateforme, il faut download le truc à la main, et l'installer/linker à la main? Hors de question, je veux du générique, je veux du standard, jamais tu verras un chemin absolu dans mon projet tu m'entends§§§ (Bon en vrai j'aurais p'têt eu plus vite fait de compiler les sources en mode sous module)

Et je parle même pas de l'installation de Git sur windows avec l'installer de leur site internet putain de merde, faut littéralement cliquer 40 fois pour installer ça (mais quelle honte), sur linux t'as une commande à faire.

Mon but c'était de faire un projet cross plateforme que n'importe qui puisse utiliser, que ce soit un glandu sous windows ou un mec sur linux mais là ça motive carrément pas pour partager le projet sur windows.

Le pire c'est que je vois nombre de guides de mecs sérieux qui te demande de clicker comme sur démineur pendant 3 heures pour installer les trucs.

Bon là j'admets ma défaite et j'installe Vulkan à la mano comme un bon toutou, ensuite j'installe GLFW avec vcpkg parce qu'il faut pas déconner, après m'être battu avec le fait qu'il faut gérer à la main x86 vs X64 quand j'installe la merde

Ensuite je découvre avec horreur, que les démos de Vulkan sont taillées pour Visual Studio, et que si t'essayes de faire la même chose à coup de CMake t'es pas dans la merde pour savoir quoi linker, je connais tellement pas visual studio que je sais pas où on voit comment le compiler est invoqué, enfin bref, j'ai vite laissé tombé tous ces trucs visual studio.

Je suis reparti sur mon projet perso et miracle, j'ai un CMake cross platform, mais c'était pas gagné



```
cmake_minimum_required(VERSION 3.19)
project(test_cpp)

set(CMAKE_CXX_STANDARD 20)

find_package(glfw3 REQUIRED)
find_package(Vulkan REQUIRED)

add_executable(test_cpp main.cpp)

target_link_libraries(test_cpp glfw Vulkan::Vulkan)
```

Et je passe sur Visual Studio que je préfère ignorer pour ma santé mentale, mais 90% des projets que je vois avec cette merde gère les dépendances n'importe comment, chemins absolu, rien de cross platform avec des dépendances fortes sur Visual Studio, aucun respect. Les mecs tu leur enlèves leur IDE ils ont aucune idée de ce qu'il se passe. Et ce putain de compilo planqué dans la cambrousse avec l'IDE mais quelle daube.

------------

'Fin bref mis à part ça je suis curieux de savoir quel compilo offre les meilleurs perf sur windows, je vais checker ça

----------


## TwinBis

À ce niveau je pense que l'OS n'est pas le seul problème.  ::P:

----------


## Kamikaze

J'avais besoin des les insulter, ça va mieux

Je vais aller jeter un oeil aux repos les plus populaires voir comment ils gèrent ça, vcpkg et conan ont l'air d'être les trucs les plus "sérieux"

----------


## rOut

Je ricane.




> Je vais aller jeter un oeil aux repos les plus populaires voir comment ils gèrent ça, vcpkg et conan ont l'air d'être les trucs les plus "sérieux"


D'autant plus. Hin hin.

En gros : c'est la grosse foire, et y'a pas un projet pour rattraper l'autre.

----------


## Cwningen

Ma solution de non-expert Windows est d'utiliser msys2, c'est presque comme Linux. Mais dans ce cas c'est du mingw au lieu de msvc et peut-être que ça ne te convient pas. On peut faire des compromis aussi, il m'est arrivé d'utiliser le git de msys2 avec msvc dans cmd.exe à coté.

Pour les dépendances, j'ai malheureusement l'impression que la mode devient de tout inclure dans des sous-modules git. Je vois de plus en plus de projets libres faire ça. C'est peut-être mieux pour Windows, mais je trouve ça horrible sous Linux.

----------


## Kamikaze

À la base j'allais partir sur mingw, mais je me suis dit tant qu'à faire je vais jeter un oeil à msvc vu que je l'utilise jamais (je vais voir où ils en sont dans l'intégration du C++20 et je vais checker ce que ça donne niveau perfs).

Jamais entendu parler de msys2, je vais me renseigner!

Perso j'aime bien l'approche git submodule mais il faut s'y acclimater un peu ouais, c'est surtout quand tu build tout from source, ça résout pas le problème des trucs pré compilé à moins de complètement corrompre l'idée des submodules.

Sinon j'ai installé le fameux WSL (windows submodule machin for Linux), on passera sur l'aspect conceptuel plus que douteux mais dans la pratique j'ai même plus envie de sortir du terminal, plus besoin d'utiliser leur explorer de fichier pourrave, et mlocate fonctionne mieux que la fonction de recherche windows haha, ça dépanne bien

----------


## gros_bidule

Question de néophyte en C/C++ : pourquoi le fais-tu sous Windows ? Ne peux-tu pas compiler depuis Linux, et produire des binaires Windows ?
Si tu dois vraiment être sous Windows, ne peux-tu pas utiliser WSL2 (ou une vm VirtualBox/VMware) pour quand même avoir tes outils dans un environnement Linux, puis ça produit des binaires dans un répertoire accessible que tu vas tester direct dans ton Windows ?

C'est ce que je compte faire pour du Rust. Bon, ça s'est apparemment amélioré sous Windows, mais j'ai l'impression que c'est pas encore ça. C'est quand même bête, car pour du Java, Python, Go, JS, ça se passe super bien. Mais tout ce qui est C / Rust, il y a comme une entente, une conspiration pour nous faire c****. Je ne vois que ça.

----------


## Dross

Oh un exercice de mauvaise foi !  ::o: 
Attendez, j'arrive !




> Comment vous bossez en C++ sous Windows sérieusement


On bosse pas en C++ nous monsieur, on a évolué nous, MS nous a dit que C# était l'élu. Situé à gauche de Dieu .NET. 
Donc on bosse en C#. 
Mécréant.  :tired: 




> Comment vous choppez une dépendance pour un de vos projet.


Par Nuget.
C'est comme celui du MacDo: simple, rapide, croustillant. 




> Exemple, je veux faire un super cube qui tourne avec ma carte graphique.
> 
> Sur Linux ça ressemble à ça:
> # Install
> package-manager install vulkan
> package-manager install glfw3
> # CMake
> find_package(Vulkan)
> find_package(glfw3)
> ...


La norme c'est simple : t'est chez tonton MS maintenant, alors c'est via l'outil de tonton : Visual Studio. 
Clic droit sur le projet dans VS/manage nugets. 
Je recherche une lib d'opengl, install, done.




> Parce que là je vois que le site de Vulkan propose un installeur qui met les variables kivonbien dans le path, et effectivement ça fonctionne, rien de sorcier, mais faut passer par un putain de navigateur web, cliquer 10 fois et enfin avoir l'install.
> Tu peux aussi tenter de passer par un package manager genre scoop ou choco truc voir vcpkg, mais les versions sont carrément en retard et ça a l'air de merder au niveau du path.
> 
> Cette chiasse de vcpkg (qui d'ailleurs t'opt-in par défaut pour envoyer des données ces fils de pute, pas la décence d'opt-out par défaut ou de demander) te demande de toute façon de passer par le site de Vulkan, mais quel est l'intérêt de ce truc sérieux.
> 
> Bon on va dire que pour Vulkan on va faire à la main, mais ensuite si tu veux GLFW pour un peu de cross plateforme, il faut download le truc à la main, et l'installer/linker à la main? Hors de question, je veux du générique, je veux du standard, jamais tu verras un chemin absolu dans mon projet tu m'entends§§§ (Bon en vrai j'aurais p'têt eu plus vite fait de compiler les sources en mode sous module)


Bah c'est une dépendance, donc on regarde sur Nuget. 
What else?




> Et je parle même pas de l'installation de Git sur windows avec l'installer de leur site internet putain de merde, faut littéralement cliquer 40 fois pour installer ça (mais quelle honte), sur linux t'as une commande à faire.


A oui mais là faut arrêter avec cette habitude de linuxien à toujours vouloir faire de la ligne de commande et avoir tout fourni en kit de pièces détachées : t'est sur un OS de gens qui on autre chose à foutre là !

C'est l'installeur de VS qui est ton ami, tout le reste tu oublie, tu réinvente la roue, et ça c'est bon pour les autres, toi t'est un homme qui n'est pas rien, qui traverse la rue, qui a des choses à faire pour devenir millionnaire. 

L'installeur de VS contient tout ce qu'il faut pour bosser, l'UI est aussi très claire, c'est simple comme tout - je sais sur linux t'est pas habitué - regarde : 



Tu veux développer sous Node ? Clique Node. Du Python ?.. clique Python ! T'a besoin de git ? Yeah baby clique sur Git. Un truc qui manque ? C'est probablement dans la liste des modules individuels.

Tu va quand même pas passer 4h à installer ta machine, t'est sur un OS de gens qui ont du taf à faire là ! 





> Et je passe sur Visual Studio que je préfère ignorer pour ma santé mentale, mais 90% des projets que je vois avec cette merde gère les dépendances n'importe comment, chemins absolu, rien de cross platform avec des dépendances fortes sur Visual Studio, aucun respect. Les mecs tu leur enlèves leur IDE ils ont aucune idée de ce qu'il se passe. Et ce putain de compilo planqué dans la cambrousse avec l'IDE mais quelle daube.


Bah voilà aussi, monsieur veux pas utiliser le saint VS et après ça râle qu'il se prends des murs. C'est du joli. Bravo.  :Tap: 

T'est sur WINDOWS, et ici on est enfermé dans la grotte de MS, on est nombreux mais MS pourvois à tout, c'est la machine éternelle, si tu as besoin de quelque-chose, MS te l'a déjà prémâché avant, t'a juste à cliquer ici et là, et boom, t'est déjà sur le market alors que les autres sont encore à débugger leur CMAKE. 
Alors oui, y'a foule, et y'a 2-3 losers un peu pénibles avec leur post-it MVP collé sur le front, mais en dehors de ça c'est chill, aller viens ! On est bien !  ::lol:: 


Blague à part, du C++/Opengl j'en ai fait qu'étant étudiant et à l'époque c'était folklo, mais milieu universitaire aussi donc c'est possible qu'il existe des choses aussi soigné qu'en .NET, mais comme MS a vraiment énormément investi sur sa stack .NET (avec .NET Core) il est aussi possible que le tooling soit un peu désuet ailleurs. 
En plus pour ne pas larguer les Linuxiens qui sont paumés dès que c'est différent de leurs habitudes, MS a progressivement migré son tooling en mode exécutable qu'on peut utilise en ligne de commande (comme le programme "dotnet"). 

Pour la compilation à l'ancienne (dont les stacks C/C++) tu aura probablement besoin d'utiliser une console avec toutes les variables d'env et tooling pour le build. T'a déjà essayé et ça marchais pas ? Ah mais oublie pas : t'est chez MS maintenant, on a une "Console Visual Studio" !  ::trollface::  Et dans la Console Visual Studio tout est préchargé pour toi pour faire tes opérations de build. (ça fait longtemps que j'ai pas utilisé mais de mémoire c'est ça). 

T'a pas le choix, t'aime Visual Studio, c'est ton pote maintenant, alors vous vous faites la bise et tu va voir que tout tes soucis vont disparaître d'un seul coup.

----------


## Kamikaze

> Question de néophyte en C/C++ : pourquoi le fais-tu sous Windows ? Ne peux-tu pas compiler depuis Linux, et produire des binaires Windows ?
> Si tu dois vraiment être sous Windows, ne peux-tu pas utiliser WSL2 (ou une vm VirtualBox/VMware) pour quand même avoir tes outils dans un environnement Linux, puis ça produit des binaires dans un répertoire accessible que tu vas tester direct dans ton Windows ?
> 
> C'est ce que je compte faire pour du Rust. Bon, ça s'est apparemment amélioré sous Windows, mais j'ai l'impression que c'est pas encore ça. C'est quand même bête, car pour du Java, Python, Go, JS, ça se passe super bien. Mais tout ce qui est C / Rust, il y a comme une entente, une conspiration pour nous faire c****. Je ne vois que ça.


Bonne remarque, la distinction c'est que je souhaite partager un projet en mode open source, donc pas hyper intéressé par les binaires en eux-mêmes mais surtout par le fait de partager le projet et que n'importe quel pékin puisse compiler depuis les sources et contribuer.

WSL2 ou une Box ça te forcerait tout de même à cross compiler mais ça fonctionnerait ouais, mais du coup un peu lourd de demander ce genre de setup aux gens qui souhaitent contribuer. Y'a aussi le setup Wine + msvc, mais un peu la même remarque, et tu souffres niveau perf.

Y'a aussi le fait que le problème se propage pour les dépendances... Ce qui peut vite devenir très lourd, tu ne vas pas cross compiler toute tes dépendances, mais du coup ça implique que tu choppes absolument toutes tes dépendances en version pour Windows avant de cross compiler ton projet, ce qui peut t'amener très loin car tes dépendances peuvent également avoir leurs dépendances...

Du coup pour toutes ces raisons je préfère une approche native, aussi aucune idée de la maturité de la cross compilation pour ça.

-------

@Dross merci pour les explications, curieux de savoir si y'a des approches purement ligne de commande pour tout ça (genre invoquer nuget, j'imagine que oui). Le truc cool quand tu évites les clics c'est qu'ultimement ça permet de scripter, donc l'utilisateur n'a qu'une seule action à faire et tu t'occupes du reste. L'approche via clics dans la GUI je souhaite vraiment l'éviter à tout prix pour Visual Studio car ça rend un peu trop dépendant de l'outil, la moindre mis à jour pourrait rendre ton truc bancale et s'pas viable de demander à un mec de reproduire une séquence de clics. En gros mon but ça serait de faire un projet 100% portable que n'importe qui puisse ouvrir et éditer puis compiler, que ce soit Visual Studio ou VS Code. Donc pas de .sln si possible, etc.

----------


## Dross

> @Dross merci pour les explications, curieux de savoir si y'a des approches purement ligne de commande pour tout ça (genre invoquer nuget, j'imagine que oui). Le truc cool quand tu évites les clics c'est qu'ultimement ça permet de scripter, donc l'utilisateur n'a qu'une seule action à faire et tu t'occupes du reste. L'approche via clics dans la GUI je souhaite vraiment l'éviter à tout prix pour Visual Studio car ça rend un peu trop dépendant de l'outil, la moindre mis à jour pourrait rendre ton truc bancale et s'pas viable de demander à un mec de reproduire une séquence de clics. En gros mon but ça serait de faire un projet 100% portable que n'importe qui puisse ouvrir et éditer puis compiler, que ce soit Visual Studio ou VS Code. Donc pas de .sln si possible, etc.


Oui, MS est vraiment revenu de sa période Ballmer et du "tout doit être chez nous", et même si au quotidien on utilise les UI, tout est utilisable par ligne de commande, même les .sln. Par exemple un "dotnet restore" va restaurer tes dépendances ou "dotnet test" va aller trouver tout les tests de ta solution et les rouler. 

"dotnet" étant le CLI de .NET Core c'est même cross-plateforme, pas de soucis de ce coté là, en fait t'est pas vraiment bloqué sur VS ensuite (je build d'ailleurs du .NET pour linux quotidiennement via CICD hébergé sur TFS en interne et publié ensuite sur un repo privé Docker, la stack est devenu très ouverte). 

Et même avant, on avait des trucs comme msbuild (ça build d'ailleurs aussi du C++, sait pas si ça te sera utile) qui permettait de gérer aussi le CICD, ou de préparer des process de build complexe à base de pré et post-traitement comme le  name mangling et obfuscation.

----------


## deathdigger

> Oh un exercice de mauvaise foi ! 
> Attendez, j'arrive !
> 
> ...


T'aurais pu noter que nuget est aussi disponible en ligne de commande, qui est aussi intégrée à VS :


Et que comme c'est chiant de se rappeler des 50 millions de commandes différentes, MS a fait simple :

Tu cherches un package ?


```
Find-Package toto
```

Tu veux installer un package dans ton projet tata (pour qu'il ajoute automatiquement les dépendances) ?


```
Install-Package toto -ProjectName tata
```

----------


## vectra

Ca la ramène pour parler de C# sous Visual Studio?
Si, à 30 ans, t'as toujours pas de Rider@Jetbrains, t'as raté ta vie  ::rolleyes:: 


Un truc "bien" sur Linux en C++, c'est qu'il est très facile de ramener des libs standard à l'échelle du système avec apt-get. Si on veut intégrer le source dans le projet pour être un peu robuste, tant que le projet dispose d'un CMake standard, ça se fait littéralement tout seul en rajoutant une ligne dans le CMake.
Au passage, Visual supporte maintenant très correctement les projets CMake. Même Qt s'y est officiellement mis.

----------


## Nilsou

> Sinon j'ai installé le fameux WSL (windows submodule machin for Linux), on passera sur l'aspect conceptuel plus que douteux mais dans la pratique j'ai même plus envie de sortir du terminal, plus besoin d'utiliser leur explorer de fichier pourrave, et mlocate fonctionne mieux que la fonction de recherche windows haha, ça dépanne bien


Dans l'enseignement en ce moment on est passé sous WSL là ou je bosse pour les élèves. Et tu peut tout compiler sous WSL si tu veut, mais ça fait des exécutable linux, évidemment (lançable sous WSL ceci dit, mais si il y a du graphique il te faudra un MobaXterm d'installé pour que les appels graphiques linux passent à Windows)

- - - Mise à jour - - -




> Putain de nom de dieu, va me falloir un expert *Windows* pour m'expliquer. J'arrive pas à rester calme et courtois avec cet OS, pardonnez moi l'énervement 
> 
> Comment vous bossez en C++ sous Windows sérieusement


En dehors de la non-réponse de dross qui te dit de passer à C#  :^_^:  , la vrai réponse c'est que Msys2/mingw fait le taf pour toi pour 95% des bibliothèques standards. Vulkain inclut. (j'ai un projet sous vulkain, ça m'a ne m'a pris longtemps à configuré avec msys2 et cie), pour le reste faut effectivement installer les choses à la main, pas de bol.
En gros pour Vulkain tu suit ceci : 
https://vulkan-tutorial.com/Developm...t#page_Windows

Tu l'adapte légèrement à msys et ça fait un truc très très court. 

Moi ça donne juste ça pour Vulkain + GLFW sous windows : 
-std=c++2a -IC:\msys64\mingw64\include\c++\9.3.0 -IC:\msys64\mingw64\include -IC:\msys64\usr\include -IC:\VulkanSDK\1.2.131.2\Include -I"\Projet_Vulk\include" -O0 -g3 -Wall -Wextra -c -fmessage-length=0

Et les include c'est tout GLFW qui gère  ::lol::  
#define GLFW_INCLUDE_VULKAN // Dit à GLFW d'inclure vulkan et de s'en occuper
#include <GLFW/glfw3.h> // inclut automatiquement Vulkan.h et autres, donc inutile de le faire

Bref, c'est vrai que sous windows faut à chaque fois se creuser la tête, mais avec les bons outils c'est assez court au final.

Donc, par exemple, je ne sais pas comment tu en est venu à télécharger, installer et linker GLFW à la main, mais c'est totalement inutile  ::P:  (du moins, pour développer, ensuite il faut effectivement distribuer l'application et c'est une autre histoire en fonction de comment tu link les choses etc.)

----------


## Garrluk

> Même Qt s'y est officiellement mis.


Même si ça marche officiellement, je vous déconseille d'essayer de faire du qtcreator + cmake, c'est une vrai purge à faire cohabiter pour le moment.

----------


## vectra

CLion + Designer (la version lite qui produit un .ui) + CMake.
Besoin de rien d'autre, même sous windows.

----------


## Taro

CLion paraît que c'est très cool, mais ça coûte une blinde.

----------


## Kamikaze

J'utilise Clion aussi, j'aime beaucoup, et ouais je suis pas super satisfait du fait que y'ait pas d'alternative open source/gratos comme ils le font avec PyCharm et sa community edition.

Le produit est cool, mais c'est le seul maillon de la chaine qui n'est pas open source dans mon workflow il me semble. D'ailleurs cette année je n'ai pas encore renouvelé ma license perso avec tous les outils Jetbrains, j'utilise mon compte pro (payé par la boite) avec seulement CLion.

Et certes j'aime beaucoup CLion, le fait est qu'au fond l'outil se repose énormément sur des trucs open source (clang-tidy, clang format, etc.), mais n'offre pas tant de fonctionnalités finalement.

Bref, je suis tiraillé. Je vais peut-être m'essayer aux alternatives gratos, ou alors renouveler ma license comme un mouton (j'ai aussi la possibilité de la fallback version qui reste gratos pour toujours)

C'est pas que ça me dérange de payer, mais quand je fais de l'open source je veux avoir la garantie que les gens qui utilisent mon projet soient conforts, et si je vois tout au travers du prisme CLion (qui bundle gdb, cmake, trouve automatiquement les trucs sous windows, linux, etc.), ça donne pas une bonne vision, tout le monde ne peut pas forcément se procurer CLion.

Après la version d'essai de CLion est bien, et très facile à """hack""" à vrai dire (renouveler la période de 30 jours).

S'ils passaient CLion open source je re-paierai ma license direct. Je suis sûr qu'ils gagneraient plus de thune à vrai dire.

Y'a Aseprite qui fait ça, c'est open source et gratos mais y'a les builds payants sur Steam.

----------


## Cwningen

> Tu l'adapte légèrement à msys et ça fait un truc très très court. 
> 
> Moi ça donne juste ça pour Vulkain + GLFW sous windows : 
> -std=c++2a -IC:\msys64\mingw64\include\c++\9.3.0 -IC:\msys64\mingw64\include -IC:\msys64\usr\include -IC:\VulkanSDK\1.2.131.2\Include -I"\Projet_Vulk\include" -O0 -g3 -Wall -Wextra -c -fmessage-length=0


Tant qu'à utiliser msys2, autant utiliser le shell qui va avec pour ne pas écrire tous les chemins d'include. Et installer vulkan avec le gestionnaire de paquet aussi.

----------


## Kamikaze

Ca a l'air génial ce msys2, exactement ce qu'il me fallait, bizarre que j'en ai jamais entendu parler auparavant, 'fin c'est pas comme si je suivais l'actu windows, mais tout de même c'est la première fois que je le vois mentionné

- - - Mise à jour - - -

Edit: ah, une recherche sur le forum m'indique qu'il avait déjà été mentionné sur ce topic par ci par là, cool. Impatient de tester ça

----------


## Nilsou

> CLion paraît que c'est très cool, mais ça coûte une blinde.


Sauf si tu es enseignant, c'est totalement gratuit  :^_^: 

- - - Mise à jour - - -




> Tant qu'à utiliser msys2, autant utiliser le shell qui va avec pour ne pas écrire tous les chemins d'include. Et installer vulkan avec le gestionnaire de paquet aussi.


Je crois que j'avais fait ça pour profiter de la dernière version de Vulkain, qui n'était pas encore présente sur Msys2 à l'époque ou j'avais codé. 
Sinon je vois pas trop ce que tu veut dire par « utiliser le shell pour éviter d'écrire tout les chemins d'include » dans ce contexte  ::unsure::  Tu veut dire rajouter le machin dans la variable path ?

- - - Mise à jour - - -




> Ca a l'air génial ce msys2, exactement ce qu'il me fallait, bizarre que j'en ai jamais entendu parler auparavant, 'fin c'est pas comme si je suivais l'actu windows, mais tout de même c'est la première fois que je le vois mentionné
> 
> - - - Mise à jour - - -
> 
> Edit: ah, une recherche sur le forum m'indique qu'il avait déjà été mentionné sur ce topic par ci par là, cool. Impatient de tester ça


C'est qu'un genre d'encapsulation ++ de mingw en définitive, mais ça fait très bien le job.
Note que ça ne change rien pour quand tu va devoir distribué ton programme : tu ne peut pas demander aux gens d'avoir Msys2 donc faudra distribuer les dll à la mano avec, comme d'habitude. Ça ne te simplifie la vie que pour le dev.

----------


## Kamikaze

Ouais c'est ce que je dis plus haut, je m'intéresse aux devs, distribuer les binaires c'est pas le problème. Ca me dérange absolument pas d'imposer un truc aux devs qui veulent contribuer du moment que c'est relativement standard et stable pour leur plateforme (de la même manière que CMake est plus ou moins "imposé" souvent, bien sûr tu peux tout compiler à la main si tu veux), et surtout simple d'utilisation. Sachant que les devs plus velus pourront de tout façon setup leur environnement from scratch donc juste avec les sources ils sont autonomes, et c'est d'ailleurs des commits/pull request classiques, proposer une install par d'autres biais.

Quoiqu'en vrai je peux faire un package MSYS2 et distribuer mes binaires comme ça, HAHA!

----------


## Cwningen

> Sinon je vois pas trop ce que tu veut dire par « utiliser le shell pour éviter d'écrire tout les chemins d'include » dans ce contexte  Tu veut dire rajouter le machin dans la variable path ?


Je sais pas ce que ça configure exactement, mais il n'y a pas besoin de configurer les includes standard (-IC:\msys64\mingw64\include\c++\9.3.0 -IC:\msys64\mingw64\include -IC:\msys64\usr\include).

----------


## vectra

Cette année j'ai claqué 115 boules pour avoir la licence all products; d'habitude je me contente de CLion mais cette année il me fallait également Rider.
C'est pas donné, mais avec un salaire, normalement, ça passe. Et ça rentre dans les frais réels.

L'an dernier j'ai payé 53€ pour ma licence CLion, et pour l'avoir poncé toute l'année ça valait la peine. C'est plus cher les deux premières années par contre.

Accessoirement, si tu es travailles effectivement sur un projet open-source, tu peux obtenir une licence gratuite pour un an renouvelable. Y faut un GitHub à montrer notamment.
Ce sont des conditions similaires pour les enseignants et les étudiants, ces derniers étant condamnés à gagner leur fric au bout de 2 à 5 ans.

Sinon je comprends totalement Kamikaze; à un moment j'ai eu besoin d'intégrer une simple lib pour gérer des archives zip: aller niquer vos mères.
Sur Linux, la lib et le SDK doivent être déjà installés par défaut; là t'as rien. Un projet pour la lib zip sans CMake bien sûr, un autre pour la gestion de l'archivage  :Facepalm: 
Le bordel que c'est de créer une pauvre dll, le .lib: aller vous faire voir  :Mario: 
Quand je pense que certains voulaient me faire faire ça sous Visual  :Mario: 





(PS: PyCharm est gratuit en version lite, mais résolument pas Open-source).

----------


## Kamikaze

Me semble que si ici: https://github.com/JetBrains/intelli.../master/python

"PyCharm Community Edition

The "python" directory in the source repository contains the source code of PyCharm Community Edition and the Python plugin for IntelliJ IDEA Community Edition."

Mais j'ai jamais testé (berk le java), donc je sais pas si t'obtiens un truc viable from scratch?

----------


## Dross

> Ca la ramène pour parler de C# sous Visual Studio?
> Si, à 30 ans, t'as toujours pas de Rider@Jetbrains, t'as raté ta vie


Franchement Rider c'est pas terrible. Je l'ai installé, il est même encore sur ma machine faudrait que je le relance, mais on est loin d'un VS+Resharper. Ptet une question d'habitude après.

Ps: je viens de le relancer, bon ça a l'air de bien avoir évolué j'essayerai de lui donner une seconde chance.

----------


## Kamikaze

Reeeejoins nous~~~~

----------


## Robix66

C# + Github Actions + Github Packages, de rien.  ::ninja::

----------


## gros_bidule

> (PS: PyCharm est gratuit en version lite, mais résolument pas Open-source).


PyCharm Community est bien opensource  ::): 
https://github.com/JetBrains/intelli.../master/python

----------


## acdctabs

Moi je suis sous Eclipse au taf pour faire du Java et je commence à me dire que ça serait bien qu'on passe à autre chose.
Je ne sais pas si les autres tu es obligé de clean tout le temps en espérant que tes bugs ne soient pas du à ça (j'ai perdu encore une demi-journée à cause de ça).
Bref, je sature.

----------


## FB74

Eclipse... programmé en JAVA...  ::trollface::

----------


## acdctabs

Java EE et primefaces ! Le top  ::P:

----------


## Dross

On rigole mais au final l'éditeur qui a le plus le vent en poupe en ce moment est fait sur Electron.  ::trollface::

----------


## vectra

> Moi je suis sous Eclipse au taf pour faire du Java et je commence à me dire que ça serait bien qu'on passe à autre chose.
> Je ne sais pas si les autres tu es obligé de clean tout le temps en espérant que tes bugs ne soient pas du à ça (j'ai perdu encore une demi-journée à cause de ça).
> Bref, je sature.


L'IDE Jetbrains est particulièrement réputé je crois.
Mais c'est aussi du Java et payant...

----------


## Orhin

Oui, IntelliJ Idea c'est le top pour le dev Java/Kotlin.

----------


## acdctabs

Je ne connais que Eclipse (pour Java).
Mais là je vois le nombre de fois où je dois clean le projet pour tester les trucs, je ne sais même pas si c'est lié à java ou si c'est lié à l'IDE.
Bon après on s'y fait, c'est juste que je trouve que je perds un temps fou.

----------


## FB74

Le must avec Eclipse c'est quand ça se tartine de rouge sans que tu aies touché quoi que ce soit....  ::ninja::

----------


## deathdigger

Pour du Java "de base", y'a NetBeans qui marche très bien. Je n'ai jamais testé avec un gros projet par contre.

----------


## gros_bidule

N'as-tu pas envie de prendre du temps pour comprendre ce qui fonctionne mal, et comment le corriger ? Au moins par curiosité  ::w00t:: 
C'est pas normal, un IDE ça doit te faire gagner du temps, pas t'en faire perdre. Même Eclipse. On en dit facilement du mal, pour se moquer, mais en vrai c'est un bon IDE, même pour de gros projets.

Rapidement, un IDE qui fait nawak, ça peut très bien être :
- ton projet (script de buld maven/gradle/ant...) lui-même qui est mal conçu -> vérifier en ligne de commande
- vider le cache de l'IDE
- reset la config de l'IDE (après 1 ou 2 ans de config, de plugins, d'updates, ça peut foutre la drouille, même sous Netbeans et IntelliJ)
- reset de la config du projet (delete des fichier eclispe à la racine du projet), en gros tu vas le réimporter proprement, sans artéfact de la précédente config potentiellement moisie
- reset le cache du build system (~/.m2 même si lui ça va souvent, ~/.gradle, dossier "./gradle" du projet, ...)
- parfois les 4 derniers en même temps

----------


## TwinBis

> Pour du Java "de base", y'a NetBeans qui marche très bien. Je n'ai jamais testé avec un gros projet par contre.


IntelliJ est trois crans au dessus de la concurrence, et la version Community (gratuite) offre suffisamment de fonctionnalités pour être utilisable même en environnement pro.

Sauf contraintes particulières (si le reste de l'équipe utilise autre chose par exemple), c'est dommage de s'en priver.

----------


## gros_bidule

Et encore, sous IJ tu peux importer :
- les règles de formatage d'Eclipse
- la keymap d'Eclipse
Tu peux même importer un projet Eclipse (plutôt que te baser juste sur le pom.xml / build.gradle / etc).

Donc à moins d'avoir un plugin propre à Eclipse, ou des fonctions qui seraient payantes sous IJ, il n'est pas trop difficile de tenter le coup, juste pour se faire une idée  ::):

----------


## Taro

Tain Eclipse... quelle horreur...
Pour du C++ sous Linux j'utilise Netbeans du coup. Eclipse, je peux pas, c'est pas possible.

Netbeans est loin d'être parfait mais il est quand même loin devant.

J'aurais bien pris CLion mais comme on en discutait plus haut c'est pas donné...

----------


## acdctabs

C'est imposé par la hiérarchie...

----------


## Taro

Mais démissionne  :Vibre:

----------


## Dross

Et tu brûle tout avant de partir. 
Au cas où.

----------


## acdctabs

Si vous saviez tout ce qu'on nous impose ^^
Mais c'est pas bien grave finalement, on fait avec et il y a des gens qui essaient de faire évoluer les choses.

----------


## vectra

> - reset la config de l'IDE (après 1 ou 2 ans de config, de plugins, d'updates, ça peut foutre la drouille, même sous Netbeans et IntelliJ)


J'ai envie de dire non pour IntelliJ.
C'est l'inverse qui s'est produit pour moi: après des débuts pénibles sur CLion 2018, tous les problèmes se sont résolus au fur et à mesure pour un quasi-perfect dès mi-2019.
La config est portée par ton compte Jetbrains qui est dupliquable sur plusieurs postes Linux comme Windows.

Encore une fois, c'est cher à l'achat, mais les tarifs sont dégressifs (si tu n'interromps pas l'abonnement). Et tant que je serai payé pour coder, je me vois mal m'attacher une main dans le dos pour moins de 10 balles par mois.

----------


## gros_bidule

> J'ai envie de dire non pour IntelliJ.
> C'est l'inverse qui s'est produit pour moi: après des débuts pénibles sur CLion 2018, tous les problèmes se sont résolus au fur et à mesure pour un quasi-perfect dès mi-2019.


J'ai connu l'inverse, avec de gros soucis liés à Gradle, sur une config vieille de 2~3 ans. Le reset fut magique : plus aucune incohérences (c'était devenu horrible avant), mais aussi IDE plus réactif. Comme quoi, les expériences perso  :^_^: .

Mais yes, pareil que toi pour la licence. C'est "cher" par rapport à du gratuit, mais franchement ce n'est pas non plus le prix d'une licence WinDev, ça va.
En plus tu peux en choper assez facilement lors de meetups java/js/etc (les JUG, etc), y'a souvent des licences à gagner.

[edit] D'ailleurs je trouve ça rigolo cette habitude que l'on a de ne rien vouloir payer pour nos outils de dev. On se plaint facilement comme quoi notre employeur paie le moins possible pour les logiciels serveur etc, mais les employés font un peu pareil pour leurs outils de travail. Alors que bon, tes outils justement, tu (oui toi au fond, qui t'es payé un mac hors de prix) passes le plus clair de ton temps devant, donc pourquoi ne pas faire un effort pour te rendre la vie un peu plus belle ?
Ton employeur paie déjà un PC, mais ça ça appartient à la boite. Tes licences de dev, elles sont à toi. Ca vaut bien quelques euros à l'année, et ça évite de pester contre un IDE maintenu par des hippies. En plus tu as droit à du support : et pour de vrai, celui de JetBrains je commence à être copain avec ^^.

----------


## TwinBis

Vous êtes en train de dire que vos employeurs ne vous payent pas de license pour votre IDE ?  ::O:

----------


## vectra

Deux anciens employeurs en accordaient, mais clairement pas assez. Le précédent ne comprenait rien à l'info.
L'actuel me l'avait proposé, mais j'ai décliné parce que je tiens à conserver ma licence perso, et parce que Visual Studio raw est encouragé.

En effet, la ristourne pour deux ans d'abonnement consécutifs que j'ai acquise pour CLion, elle s'est reportée sur le all products pack: du coup, ça me fait une licence perpétuelle sur toute la suite Jetbrains à prix contenu (115€). Et donc pour les add-ons Visual si je suis amené à migrer.
On verra l'an prochain comment ça se passe, mais je préfèrerais continuer à utiliser Jetbrains payé de ma poche plutôt que de passer sur Visual. Surtout que mon employeur met à ma disposition une licence VS qui n'est pas donnée (et qui appartient à la boîte bien entendu).

Vu que je suis payé correctement et que je peux reporter ces dépenses en frais réels: ça passe. Comme dit, ça fait partie du confort du quotidien.

----------


## Nilsou

> Tain Eclipse... quelle horreur...
> Pour du C++ sous Linux j'utilise Netbeans du coup. Eclipse, je peux pas, c'est pas possible.
> 
> Netbeans est loin d'être parfait mais il est quand même loin devant.
> 
> J'aurais bien pris CLion mais comme on en discutait plus haut c'est pas donné...


Pourtant honnêtement, j'ai bien du mal à distinguer les fonctionnalités d’Eclipse et de Clion. Je bosse avec les deux et je trouve même Eclipse plus transparent (au niveau du build surtout). Ou alors c'est juste que j'ai pris l'habitude de passer de l'un à l'autre et je ne fais plus gaffe  :^_^: .

----------


## William Vaurien

> Si vous saviez tout ce qu'on nous impose ^^
> Mais c'est pas bien grave finalement, on fait avec et il y a des gens qui essaient de faire évoluer les choses.


J'espère que ça vaut le coup de se faire imposer des trucs débiles du genre du choix de l'IDE...

J'ai eu du bol de ne jamais avoir trop subi ce genre de truc.

Tu bosses dans l'industrie ou les télécoms ? (c'est mes comparses dans ces domaines qui ont le plus souffert de ce genre de décisions)

----------


## vectra

Heu CLion c'est CMake. Je vois pas quelle partie du build ça cache.

Ou alors tu utilises Gradle? Dans ce cas, je veux bien des retours en C++.

----------


## acdctabs

Je suis développeur dans l'armée ^^
Je fais des logiciels "RH".

----------


## TwinBis

Ah, Louvois c'était à cause d'Eclipse alors ?  ::ninja::

----------


## acdctabs

Louvois n'a pas été développé par des militaires.

----------


## vectra

Les militaires n'ont jamais vraiment voulu donner les specs de la paie, si je me souviens bien?
Pratiquement une paie différente par régiment, avec un ensemble de règles complètement byzantin à appliquer.

----------


## acdctabs

Euh non. Tout est défini dans la loi.
C'est même plutôt clair (même s'ils veulent tout changer à terme pour simplifier/moderniser tout ça).
Il y a tellement eu de problèmes avec Louvois que c'est compliqué de définir une cause.

----------


## ducon

Bref, walou, l’armée louvoie avec Louvois.  :Drum:

----------


## Tramb

> Euh non. Tout est défini dans la loi.
> C'est même plutôt clair (même s'ils veulent tout changer à terme pour simplifier/moderniser tout ça).
> Il y a tellement eu de problèmes avec Louvois que c'est compliqué de définir une cause.


Enfin la loi, niveau specs formelles, on a vu légèrement mieux.
coqc codepenal.v

----------


## acdctabs

Comme je dis, il y avait tellement de problèmes... Le successeur marche très bien.
Le truc cool avec le successeur c'est qu'il y a un site (interne) qui nous donne une visu sur notre situation, on a l'historique, bref c'est bien foutu.
Le petit truc en + c'est qu'une dizaine de jours avant d'être payé, on sait le montant du virement.
Quand on attend des primes, ça nous permet de savoir si ça tombe ce mois-ci ou pas  ::):

----------


## Orhin

> Vous êtes en train de dire que vos employeurs ne vous payent pas de license pour votre IDE ?


Moi aussi je trouve ça aberrant mais c'est le cas malheureusement pour plein de boîtes.
Ce qui est complètement con, on parle de licences à 500€ grand max, soit 1 à 2 jours de boulot à un TJM classique en SSII.
Si ton IDE te fait gagner ne serait ce que 1% de productivité sur l'année, c'est rentabilisé.

Perso j'ai le all-product de JetBrains depuis plusieurs années et ma boîte ne me pose même pas de questions lors du renouvellement de la licence.

----------


## Kesitem

> Putain de nom de dieu, va me falloir un expert *Windows* pour m'expliquer. J'arrive pas à rester calme et courtois avec cet OS, pardonnez moi l'énervement 
> 
> Comment vous bossez en C++ sous Windows sérieusement
> 
> J'ai voulu reproduire mon setup pour programmation GPU (que j'ai sous Linux) sur Windows.
> 
> Windows qui a apparemment quelque défenseurs sur le forum, donc ça va être le moment de sortir la sauce parce qu'a priori cet OS de merde, pue effectivement bien la merde. Je laisse le bénéfice du doute, peut être que je connais pas, mais là j'ai d'énormes doutes.
> 
> Donc la question à 2 Milliards c'est:
> ...



Salut, je te réponds longtemps après la bataille (je suis de loin le thread),

mais pour ma part, j'utilise vcpkg: https://github.com/microsoft/vcpkg

Ca répond en grande partie aux manques de paquets distribués pour windows et ça fonctionne parfaitement avec CMAKE.

Je te conseille d'éviter le "integrate install" mais de passer par le script CMAKE en ajoutant le "-DCMAKE_TOOLCHAIN_FILE=...".

La grosse difficulté qui n'est pas mise en avant dans la doc et la gestion des triplets, c'est la première chose à configurer aussi. Il faut penser à définir ton option "DVCPKG_TARGET_TRIPLET".


Edit: Ajout d'une partie manquante à mon message.

Edit 2: Les triplets.

----------


## vectra

Enorme, merci  ::love::

----------


## Nilsou

Dites, quelqu'un pourrait me résumer l’intérêt de l'approche signals/slots de QT par rapport à l'approche de GTK et autre à base de callback ? 
Au départ je pensais que ça avait un intérêt parce qu'on pouvait n'avoir pas besoin de définir précisément l'instance des classes dont les signaux nous intéressé mais en fait, si, on a besoin aussi en QT dans le connect ... 

Et je vois que dans les versions modernes de QT on utilise maintenant des pointeurs de fonctions dans le connect. Alors je suis un peu perdu. Que fait QT de plus dans ce contexte ?  ::unsure::

----------


## Cwningen

Des signaux façon libsigc++ par rapport à des callbacks simples a l'avantage de pouvoir connecter plusieurs callbacks/slots par signal.

Qt va plus loin grâce à ses boucles d'évènements. Les slots peuvent être appelés directement (comme des callbacks) ou être mis dans la file d'attente d'une boucle d'évènements. En mode automatique, la méthode d'appel est décidée en comparant le thread courant et le thread du QObject. https://doc.qt.io/qt-5/qt.html#ConnectionType-enum

----------


## Robix66

Question .Net : quelqu'un a un tuto à jour et compréhensible pour charger des dll en dehors de l'application base du programme ? Quand je cherche, ça tourne en boucle sur 2-3 solutions, mais impossible de les faire marcher (assembly ou une de ses dépendances non trouvée), et pas moyen d'avoir autre chose que "si si, utilise ça" sans autres explications.

----------


## Nilsou

> Des signaux façon libsigc++ par rapport à des callbacks simples a l'avantage de pouvoir connecter plusieurs callbacks/slots par signal.
> 
> Qt va plus loin grâce à ses boucles d'évènements. Les slots peuvent être appelés directement (comme des callbacks) ou être mis dans la file d'attente d'une boucle d'évènements. En mode automatique, la méthode d'appel est décidée en comparant le thread courant et le thread du QObject. https://doc.qt.io/qt-5/qt.html#ConnectionType-enum


Ok, j'ai effectivement lu ça plusieurs fois, mais je ne vois pas trop ce qui empêche de connecter plusieurs callback à un signal, ou dans l'autre sens, avec les callback de GTK. Ça appelle un pointeur de fonction, plusieurs signal peuvent appeler les même pointeurs de fonctions si ils en ont envie il me semble ...

Pour le multithread, oui j'ai bien vu l'avantage. Mais ça reste assez spécifique (intérêt uniquement quand on a des trucs lourds à calculer dans l'affichage) parce que si le but c'est juste d'appeler l'IHM depuis des thread de calcul, on le fait depuis GTK aussi (avec des gdk_threads_add_idle et autres).

(Notez que je pose la question pas pour défoncer QT mais parce que j'aurais un cours à donner dans quelques temps ou j'ai un passage GTK vs QT et globalement c'est un point ou c'est pas encore super clair pour moi, à force j'utilise les deux dans mes codes, mais sans trop voir de grandes différences fondamentale).

----------


## vectra

Le multithread tu as vite fait d'y venir. Et c'est notamment là que le framework commence à bien s'illustrer.

L'intérêt de signal/slot également, c'est de pouvoir définir des signaux à émettre sans se préoccuper de qui va les recevoir, ce qui casse le besoin de double inclusion entre émetteur et récepteur. 
Le récepteur associe un émetteur et un signal à un slot, mais l'émetteur s'en balec d'où ça va.

Après, ça fait très longtemps que je n'ai pas touché de callbacks.

La syntaxe simplifiée avec les lambda, c'est juste pour ne pas faire de clutter de déclarations/définitions dans des cas triviaux. Tu peux aussi définir directement des slots sans les déclarer si leur nom est on_nomduwidget_nomdusignal.

----------


## Nilsou

> L'intérêt de signal/slot également, c'est de pouvoir définir des signaux à émettre sans se préoccuper de qui va les recevoir, ce qui casse le besoin de double inclusion entre émetteur et récepteur. 
> Le récepteur associe un émetteur et un signal à un slot, mais l'émetteur s'en balec d'où ça va.
> 
> Après, ça fait très longtemps que je n'ai pas touché de callbacks.


C'est à dire qu'avec les callback c'est l'inverse. C'est le receveur qui s'en balec de qui l’appelle il me semble. Mais au final dans les deux cas il faut que tu appelle ton connect ou ton g_signal_connect après que les deux objets soient créés. Je ne me souviens pas de « double inclusions » avec le système de callback  ::unsure::

----------


## vectra

Après, ça fait très longtemps que je n'ai pas touché de callbacks. (bis)


Sinon, tu peux aussi chercher les bonnes raisons pour lesquelles Qt supplante GTK en tant que framework multi-plateforme.
Il risque d'y en avoir quelques unes.

Perso j'ai trouvé que le code callback devenait très très vite dégueulasse, mais encore une fois ça remonte à loin.

----------


## Cwningen

Callback et signaux/slots c'est le même pattern. Et pour les inclusions c'est pareil : au moment de l'ajout/connexion, il faut connaitre le signal ou la fonction ajoutant le callback (du module source) et le callback/slot à appeler (du module destination), mais ni la source ni la destination n'ont besoin de se connaitre.

----------


## Nilsou

> Sinon, tu peux aussi chercher les bonnes raisons pour lesquelles Qt supplante GTK en tant que framework multi-plateforme.
> Il risque d'y en avoir quelques unes.


Oui, ça clairement, il y en a quelques unes (quoi que j'ai cru comprendre que le changement de stratégies financière de la part de QT remettait en question pas mal de choses de ce que j'ai compris ... ).




> Callback et signaux/slots c'est le même pattern. Et pour les inclusions c'est pareil : au moment de l'ajout/connexion, il faut connaitre le signal ou la fonction ajoutant le callback (du module source) et le callback/slot à appeler (du module destination), mais ni la source ni la destination n'ont besoin de se connaitre.


Ok, merci pour la précision.
Mais du coups c'est pareil aussi sur les ajouts multiples. D’où vient le mythe récurrent que le système de QT propose ça ou les autres ne le peuvent pas ...  ::unsure::

----------


## Dross

> Question .Net : quelqu'un a un tuto à jour et compréhensible pour charger des dll en dehors de l'application base du programme ? Quand je cherche, ça tourne en boucle sur 2-3 solutions, mais impossible de les faire marcher (assembly ou une de ses dépendances non trouvée), et pas moyen d'avoir autre chose que "si si, utilise ça" sans autres explications.


C'est pour faire des plugins ? 

Il y a quelques années je t'aurai dirigé vers le MAF, mais je vois que maintenant ils ont un nouveau truc dans .NET 5.

T'est dans quel framework de .NET, quel type d'app, c'est pour faire quoi ?

----------


## vectra

> Callback et signaux/slots c'est le même pattern. Et pour les inclusions c'est pareil : au moment de l'ajout/connexion, il faut connaitre le signal ou la fonction ajoutant le callback (du module source) et le callback/slot à appeler (du module destination), mais ni la source ni la destination n'ont besoin de se connaitre.


Dans la syntaxe par défaut, le récepteur précise l'instance qui émet le signal.
J'ai ptet raté un truc; dans ce cas je veux bien un coup de main.

- - - Mise à jour - - -




> Ok, merci pour la précision.
> Mais du coups c'est pareil aussi sur les ajouts multiples. D’où vient le mythe récurrent que le système de QT propose ça ou les autres ne le peuvent pas ...


Je ne sais pas qui dit cela.

Mais j'ai une autre question: ces callbacks, ils interviennent dans une hiérarchie de classes?
Tu peux dériver tes propres widgets en GTK? Parce que si ça n'était pas le cas, tu aurais ta réponse.

----------


## Cwningen

> Dans la syntaxe par défaut, le récepteur précise l'instance qui émet le signal.
> J'ai ptet raté un truc; dans ce cas je veux bien un coup de main.


Style C


```
// Module A
struct A
{
	void add_foo_callback(void (*f)(void *), void *user);
};


// Module B
struct B
{
	void f();
};

// Module C
	A a;
	B b;
	a.add_foo_callback([](void *user) {
		B *b = static_cast<B *>(user);
		b->f();
	}, &b);
```

Style Qt


```
// Module A
class A: public QObject
{
	Q_OBJECT
signals:
	void foo();
};


// Module B
class B: public QObject
{
	Q_OBJECT
public:
	void f();
};


// Module C
	A a;
	B b;
	QObject::connect(&a, &A::foo, &b, &B:::f);
```

Dans les deux cas, seul le module C doit tout connaitre. Les modules A et B sont complètement indépendants.

----------


## Robix66

> C'est pour faire des plugins ? 
> 
> Il y a quelques années je t'aurai dirigé vers le MAF, mais je vois que maintenant ils ont un nouveau truc dans .NET 5.
> 
> T'est dans quel framework de .NET, quel type d'app, c'est pour faire quoi ?


On n'es pas encore en .Net 5 (on y travaille, mais pas pour ce soft), là on est en 4.7.2.
Là notre client nous fournit des dll pour faire des calculs, et voudrait pouvoir les changer sans faire appel à nous quand ils veulent changer des trucs dedans.

J'ai vu plein de trucs pour créer un AppDomain avec une ApplicationBase différente, et charger les dll dedans, mais pas moyen de le faire marcher.

----------


## vectra

> Style C
> 
> 
> ```
> // Module A
> struct A
> {
> 	void add_foo_callback(void (*f)(void *), void *user);
> };
> ...


Au temps pour moi.

----------


## Dross

> On n'es pas encore en .Net 5 (on y travaille, mais pas pour ce soft), là on est en 4.7.2.
> Là notre client nous fournit des dll pour faire des calculs, et voudrait pouvoir les changer sans faire appel à nous quand ils veulent changer des trucs dedans.
> 
> J'ai vu plein de trucs pour créer un AppDomain avec une ApplicationBase différente, et charger les dll dedans, mais pas moyen de le faire marcher.


Les AppDomain c'est une des façons de faire, mais comme souvent dans .NET on a des outils plus haut niveau pour avoir moins de trucs à gérer, tu a notamment le MAF (cf mon lien) et pour ce besoin de chargement dynamique (donc pas le coté isolation mémoire) tu a aussi le MEF.

Ça fait longtemps que j'ai pas utilisé tout ça mais de mémoire MAF et MEF c'est plug&play. Perso dans ton cas je partirai sur le MEF, regarde l'exemple dans la doc il semble être bien fait.

----------


## Robix66

> Les AppDomain c'est une des façons de faire, mais comme souvent dans .NET on a des outils plus haut niveau pour avoir moins de trucs à gérer, tu a notamment le MAF (cf mon lien) et pour ce besoin de chargement dynamique (donc pas le coté isolation mémoire) tu a aussi le MEF.
> 
> Ça fait longtemps que j'ai pas utilisé tout ça mais de mémoire MAF et MEF c'est plug&play. Perso dans ton cas je partirai sur le MEF, regarde l'exemple dans la doc il semble être bien fait.


Merci, je regarderai ça.
En cherchant, je me suis dit plusieurs fois "de toutes façons, je tombe probablement sur des réponses qui correspondent à des vieilles méthodes", chose qui arrivent souvent en .Net, et que j'avais d'ailleurs expliqué à un de mes gars la semaine dernière.  :^_^:

----------


## rOut

Bah Qt ou Gtk c'est la même chose niveau fonctionnalités hein. Gtk supporte tout autant les signaux asynchrones et boucle d'évènements, c'est juste la syntaxe qui change, avec plus de sucre pour Qt (gaffe à l'indigestion).

----------


## Dross

> Merci, je regarderai ça.
> En cherchant, je me suis dit plusieurs fois "de toutes façons, je tombe probablement sur des réponses qui correspondent à des vieilles méthodes", chose qui arrivent souvent en .Net, et que j'avais d'ailleurs expliqué à un de mes gars la semaine dernière.


Yup, après je te conseillerai vivement de tester tout ça sur un projet Proof-of-Concept tout beau tout propre pour tester la techno et bien la comprendre, et une fois que ça marche faire ton intégration dans ton outil de prod (y'a toujours des surprises).

----------


## Robix66

Oh, j'y compte bien.

----------


## Nilsou

> Je ne sais pas qui dit cela.
> 
> Mais j'ai une autre question: ces callbacks, ils interviennent dans une hiérarchie de classes?
> Tu peux dériver tes propres widgets en GTK? Parce que si ça n'était pas le cas, tu aurais ta réponse.


Il y a une encapsulation de gtk en C++ oui. C'est plus brut de décoffrage que QT mais ça fait le taf.

----------


## deathdigger

> Yup, après je te conseillerai vivement de tester tout ça sur un projet Proof-of-Concept tout beau tout propre pour tester la techno et bien la comprendre, et une fois que ça marche faire ton intégration dans ton outil de prod (y'a toujours des surprises).


Faut vérifier surtout ce qu'ils souhaitent faire.
Si le but est d'avoir des DLL qui évoluent indépendamment des projets qui les utilisent (faire des corrections, ajouter de nouvelles méthodes, etc.), ça ne vaut pas le coût de se prendre la tête. Ils te fournissent les DLL qui vont bien en s'assurant de ne pas supprimer les méthodes que t'appelles et voilà.

----------


## Dross

Bah c'est justement pas le besoin de son client : "voudrait pouvoir les changer *sans faire appel à nous*". A partir de là, la compilation avec les liens en dur est à proscrire et mieux vaux passer par du chargement dynamique/etc.

----------


## acdctabs

C'est marrant je me plaignais d'éclipse l'autre fois.
Pour faire court je récupère un projet en +, en php ce coup-ci, avec du symfony mais surtout on me file une licence PhpStorm. A moi la joie de développer dans le luxe !

----------


## Captain_Cowkill

Dites les canards, c'est normal pour un noob comme moi de totalement galérer sur les objets/prototypes/héritage en JS ?  :^_^: 

Je viens de passer le chapitre MDN sur les objets, et j'en ressors totalement paumé. J'y ai passé des heures mais j'ai l'impression d'être totalement à côté de la plaque (concernant l'héritage et les prototypes).

----------


## Robix66

J'ai envie de dire oui, c'est des notions complexes à comprendre tant que tu n'as pas un vrai cas pour les appliquer. Et c'est pas l'objet Voiture qui hérite de Véhicule qui va beaucoup t'aider à les maitriser.

----------


## Dross

Désapprends tout ce que tu a appris padawan, et passe du coté sombre de la force avec le TypeScript. 
Tu aura des vrais objets, des vrais types, et l'héritage sera fait dans la facilité.

----------


## Captain_Cowkill

> J'ai envie de dire oui, c'est des notions complexes à comprendre tant que tu n'as pas un vrai cas pour les appliquer. Et c'est pas l'objet Voiture qui hérite de Véhicule qui va beaucoup t'aider à les maitriser.


Oui, voilà. Le souci de ces leçons c'est qu'elles se servent d'exemples totalement abstrait pour moi (car utilisant souvent du code que je ne connais absolument pas). Et moi quand c'est abstrait, ben ça rentre pas.

- - - Mise à jour - - -




> Désapprends tout ce que tu a appris padawan, et passe du coté sombre de la force avec le TypeScript. 
> Tu aura des vrais objets, des vrais types, et l'héritage sera fait dans la facilité.


Ça m'intéresse  :tired:

----------


## Dross

https://www.typescriptlang.org/docs/...class-heritage

----------


## Kamikaze



----------


## vectra

> Oui, voilà. Le souci de ces leçons c'est qu'elles se servent d'exemples totalement abstrait pour moi (car utilisant souvent du code que je ne connais absolument pas). Et moi quand c'est abstrait, ben ça rentre pas.


Ca vient en programmant et en essayant de maintenir une structure pas trop merdique.
Mais si c'est toi qui cherches des sujets à adresser, forcément, ça va aller beaucoup moins bien que si on t'impose des projets précis.

----------


## Orhin

> Désapprends tout ce que tu a appris padawan, et passe du coté sombre de la force avec le TypeScript. 
> Tu aura des vrais objets, des vrais types, et l'héritage sera fait dans la facilité.


Ceci.

Manipuler directement les prototypes en JS, ça fait un paquet d'année que j'ai pas eu besoin de le faire.

----------


## Nilsou

> http://www.youtube.com/watch?v=bIhUE5uUFOA


C'est beau, c'est très intéressant. Merci pour la vid.

----------


## Captain_Cowkill

> Ceci.
> 
> Manipuler directement les prototypes en JS, ça fait un paquet d'année que j'ai pas eu besoin de le faire.


Vous me rassurez  ::P:

----------


## deathdigger

> Oui, voilà. Le souci de ces leçons c'est qu'elles se servent d'exemples totalement abstrait pour moi (car utilisant souvent du code que je ne connais absolument pas). Et moi quand c'est abstrait, ben ça rentre pas.
> 
> - - - Mise à jour - - -
> 
> 
> 
> Ça m'intéresse


C'est quand même pas mal d'expliquer l'objet par le système de boites et autres, c'est facilement compréhensible.
Après, JS ne sera pas forcément le meilleur langage pour l'utiliser/le démontrer, pour ça, vaut mieux Java ou C#

----------


## Captain_Cowkill

> C'est quand même pas mal d'expliquer l'objet par le système de boites et autres, c'est facilement compréhensible.
> Après, JS ne sera pas forcément le meilleur langage pour l'utiliser/le démontrer, pour ça, vaut mieux Java ou C#


Ouaip, j'ai très bien compris comment fonctionnent les objets à la base (même si j'ai du mal à me projeter quant à leur utilisation, vu que je début). Le truc qui m'a plus faire cuire le cerveau, c'est l'héritage et les prototypes...

Mais oui, les différents chapitre ont aussi expliqué que JS n'est pas le plus simple à comprendre sur ce sujet  :^_^:

----------


## vectra

Y'a regarder, et refaire sur un cas d'étude différent.
Et c'est totalement un autre boulot... Je ne remercierai jamais assez mes études pour m'avoir bombardé de projets: c'est comme ça qu'on imprime.

----------


## MrBeaner

> Dites les canards, c'est normal pour un noob comme moi de totalement galérer sur les objets/prototypes/héritage en JS ? 
> 
> Je viens de passer le chapitre MDN sur les objets, et j'en ressors totalement paumé. J'y ai passé des heures mais j'ai l'impression d'être totalement à côté de la plaque (concernant l'héritage et les prototypes).


Perso, je trouve que Javascript est le langage que j'ai le plus de mal à assimiler jusqu'ici. Donc je compatis  ::P: 

- - - Mise à jour - - -




> https://www.typescriptlang.org/docs/...class-heritage
> 
> https://i.ibb.co/sqFg4Pk/image.png


J'ai passé le cap perso, je commence à me sentir à l'aise avec Typescript (sur Angular, car j'ai laissé React finalement après un tour d'horizon des frameworks JS).

----------


## Captain_Cowkill

> Y'a regarder, et refaire sur un cas d'étude différent.
> Et c'est totalement un autre boulot... Je ne remercierai jamais assez mes études pour m'avoir bombardé de projets: c'est comme ça qu'on imprime.


Oui, voilà. C'est par la pratique que ça rentrera.

----------


## Dross

Oui et y'a plein de trucs qu'on ne comprends vraiment qu'après quelques mois/années d'XP.

----------


## Captain_Cowkill

Bon, du coup il y a des promos sur Udemy. Plein de cours à 9.99€.
Je pense craquer sur quelques uns, surtout niveau JS...

----------


## vectra

Pour ceux qui chercheraient à faire du C++ à Berlin, Thinkcell diffuse une offre d'embauche à 120K (la seconde année).
Les gars on l'air _vraiment_ très pointus dans la maîtrise du C++, raison pour laquelle j'ai décliné poliment.

Si y'a des fans de salades pomme-de-terre/saucisse, ça peut valoir le coup...

----------


## Kamikaze

Haha ça se voit que l'offre est écrite par des passionnés, ça me donne limite envie

----------


## Taro

120k  ::O:   :Bave:   :Emo:

----------


## Dross

Surtout qu'à Berlin le coût de la vie semble assez bas, avec ce genre de salaire ça doit être vraiment pas mal.

----------


## vectra

C'est open, les gars  :;):

----------


## Kamikaze

Je me cherche de bons profilers en C++ vous avez des trucs sympas que vous aimez utiliser? Peu importe le cas d'utilisation, que ce soit pour rapidement trouver des bottleneck ou pour profiler précisément, intrusif, non-intrusif, je prends tout.

----------


## rOut

perf

----------


## Kamikaze

Ouaip et tu connais hotspot? Ca a l'air pas mal je vais tester, ça consomme les résultats de perf et t'affiche ça de manière intéressante

https://github.com/KDAB/hotspot#screenshots

----------


## gros_bidule

Les développeurs Java s'insurgent, "HotSpot" c'est le nom de la JVM la plus utilisée dans le monde Java.
Y nous volent note' VM !

----------


## Lazyjoe

> Ouaip et tu connais hotspot? Ca a l'air pas mal je vais tester, ça consomme les résultats de perf et t'affiche ça de manière intéressante
> 
> https://github.com/KDAB/hotspot#screenshots


Han ils ont copité flamegraph !

Sinon les outils Intel sont pas mal puissants, Vtune Profiler pour l'analyse générale (repérage des hotspots), Advisor pour profiler l'efficacité en détail (vectorisation, bp mémoire...).

----------


## Kamikaze

D'ailleurs je vois que Jetbrains propose aussi son analyzer de fichier perf dans CLion.

Bon je vais tester un peu tout ce qui passe et voir

----------


## Taro

Y'a pas moyen de profiler les profilers pour voir lequel est le plus efficace ?  ::ninja::

----------


## Awake

> Y'a pas moyen de profiler les profilers pour voir lequel est le plus efficace ?


Si. Mais avec lequel  ::sad::  ?

----------


## Taro

> Si. Mais avec lequel  ?


Dans l'idéal si y'a N profilers il faudrait profiler chacun d'entre eux avec les N-1 autres.  :Cigare:

----------


## gros_bidule

Non, tu développes toi-même un profiler pour les profiler tous  :X1: 
Des fois qu'un profiler soit configuré pour truquer les résultats quand il se profile lui-même ou un concurrent.

----------


## Tramb

> Non, tu développes toi-même un profiler pour les profiler tous 
> Des fois qu'un profiler soit configuré pour truquer les résultats quand il se profile lui-même ou un concurrent.


Souvenirs des primitives de perf d'Intel dans une dll qui ne s'activait pas sur un AMD qui avait le CPUID suffisant. La classe. L'élégance.

PS: Du coup évidemment, à la poubelle la dépendance moisie. On recode.

----------


## gros_bidule

Joli, en effet  :^_^:

----------


## rOut

> Ouaip et tu connais hotspot? Ca a l'air pas mal je vais tester, ça consomme les résultats de perf et t'affiche ça de manière intéressante
> 
> https://github.com/KDAB/hotspot#screenshots


Oui c'est pas mal, et Intel VTune aussi est bien foutu (mais probablement que pour Intel), et les deux utilisent perf. J'ai essayé deux trois autres frontends mais au final perf tout seul est assez simple d'utilisation pour me servir directement.

Sinon gpuvis est aussi plutôt bien foutu aussi, et utilise le système de trace du noyau, et y'a une tentative en cours pour lui faire bouffer les données perf pour afficher les samples en superposition.

----------


## deathdigger

Bon y'a bien un truc assez pourri dans Visual Studio : L'intégration de Github  :tired: 
Autant dans VS Code, c'est plutôt bien foutu et ça marche bien, autant dans VS, c'est de la merde. Du coup, c'est plus simple de passer par la console et/ou VsCode (en ouvrant le répertoire) que de passer par leur extension.

----------


## Robix66

T'as la 2019.10 ?

----------


## Dross

C'est pas normal, elle est très bien voir meilleure que Code.

----------


## Orhin

> Autant dans VS Code, c'est plutôt bien foutu et ça marche bien


Et encore, comparé à ce que fait Jetbrains dans IntelliJ/Webstorm/etc, c'est pas ouf.

----------


## Frypolar

> Et encore, comparé à ce que fait Jetbrains dans IntelliJ/Webstorm/etc, c'est pas ouf.


Je lance IntelliJ rien que pour ça  :^_^:

----------


## deathdigger

> T'as la 2019.10 ?


Chépo, je pense être à jour




> C'est pas normal, elle est très bien voir meilleure que Code.


Ben pour moi c’est le bordel et en plus, ils ont traduit les commandes  :tired:

----------


## Robix66

> Chépo, je pense être à jour


Ben lance Visual Studio Installer pour vérifier, ils ont ajouté pas mal de trucs dans la dernière version.

----------


## Dross

> Ben pour moi c’est le bordel et en plus, ils ont traduit les commandes


Tu n'a pas ton OS en anglais.  :tired:

----------


## gros_bidule

Nan il s'est trompé et a installé WinDev  ::ninja::

----------


## Dross

:^_^:

----------


## vectra

Par défaut, Visual compile... en français  :Pouah: 
Rien que pour ça, je purge tout ce qui ressemble de près ou de loin à un module linguistique sur l'installeur de Visual.

----------


## deathdigger

> Ben lance Visual Studio Installer pour vérifier, ils ont ajouté pas mal de trucs dans la dernière version.


Effectivement, je n'ai pas la dernière, mais la 16.8.3. Git est d'ailleurs une extension dans cette version. Je tente la mise à jour.
J'ai l'impression qu'une fois un projet détecté comme géré par Git, il perd totalement l'info du type de projet (ici, une appli console Windows), du coup, tu n'as plus les habituels raccourcis pour ajouter des classes et autres.

Edit : ça a l'air d'être pareil avec la nouvelle version :

----------


## Robix66

Mais ça tu le fais dans la fenêtre de l'explorateur de solutions, non ?

----------


## vectra

Jamais été aussi heureux de payer ma licence Jetbrains  ::lol::

----------


## Taro

TVA comprise ?  ::ninja::

----------


## vectra

Chuuuteuh!!!

----------


## Robix66

Moi je l'aime bien VS, ça aide mon syndrome de l'imposteur.

----------


## deathdigger

> Mais ça tu le fais dans la fenêtre de l'explorateur de solutions, non ?


Nope, j'étais sur Team Explorer.
Sinon y'a aussi ça :


Mais je panne pas tout  ::ninja::

----------


## Robix66

Bah moi ajouter des classes et compagnies je le fais depuis l'explorateur de solutions.  ::ninja:: 
(Ce qui a plus de sens que depuis Team Explorer  ::huh:: )

----------


## deathdigger

> Bah moi ajouter des classes et compagnies je le fais depuis l'explorateur de solutions. 
> (Ce qui a plus de sens que depuis Team Explorer )


Oui, moi aussi, mais là ça merdait  :;):

----------


## war-p

Sinon git en ligne de commande c'est bien aussi hein. Pour celles et ceux qui pannent rien, il y a aussi gitkraken qui semble pas mal (j'ai pas testé personnellement mais j'ai des collègues qui en sont très contents.)

----------


## Taro

> Sinon git en ligne de commande c'est bien aussi hein.


Mais voilà, comme les vrais  :Cigare:  j'apprécie juste un petit Meld à côté pour les diffs et le tour est joué.

----------


## rOut

Je sais pas si c'est moi qui les rate ou quoi mais j'ai eu l'impression que meld me foirait des résolutions de conflit dernièrement, c'est assez désagréable.

----------


## war-p

> Mais voilà, comme les vrais  j'apprécie juste un petit Meld à côté pour les diffs et le tour est joué.


Ah ouais tien je connaissais pas. Quand je bossais avec des rustres en c# avec visual studio j'utilisais kdiff, sinon je me sers de l'outil d'intellij.

----------


## Robix66

Ou Github Desktop hein.

----------


## Taro

> Je sais pas si c'est moi qui les rate ou quoi mais j'ai eu l'impression que meld me foirait des résolutions de conflit dernièrement, c'est assez désagréable.


Je crois qu'il est considéré "en développement". Après perso des merge j'en ai extrêmement peu en ce moment de par la configuration des projets, que ce soit pro ou perso.




> Ah ouais tien je connaissais pas. Quand je bossais avec des rustres en c# avec visual studio j'utilisais kdiff, sinon je me sers de l'outil d'intellij.


Je ne connaissais pas non plus jusqu'à il y a environ 2 ans, il est vraiment super dans sa façon de représenter les différences de bloc. Franchement très cool.

----------


## deathdigger

> Sinon git en ligne de commande c'est bien aussi hein. Pour celles et ceux qui pannent rien, il y a aussi gitkraken qui semble pas mal (j'ai pas testé personnellement mais j'ai des collègues qui en sont très contents.)


Ouais au final, c’est ce que j’ai fait. Après, j’apprends les trucs de base de git, et je ne pense pas avoir un besoin avancé, vu mon utilisation.

----------


## gros_bidule

Au cas où : tu sais *squash*er  avec git ? (et good news, les IDE savent enfin le faire)
Ca change la vie, un peu comme le burger au camembert pané  ::): 
Les worktrees un peu aussi.

----------


## Orhin

> et good news, les IDE savent enfin le faire


Ça fait quand même un petit bout de temps que c'est le cas chez Jetbrains.




> Mais voilà, comme les vrais  j'apprécie juste un petit Meld à côté pour les diffs et le tour est joué.


La GUI c'est quand même aussi pratique pour faire des stage partiel de fichier.

----------


## gros_bidule

> Ça fait quand même un petit bout de temps que c'est le cas chez Jetbrains.


Pas tant que ça, grosso-modo 1 an, 2 grand max. Auparavant, le squash était proposé lors d'un rebase interactif uniquement. Depuis quelques versions, on peut enfin simplement aller dans l'historique git, sélectionner des commits, et paf squash  ::): 
Jusque là j'utilisais SmartGit (excellent produit au passage) pour le faire. Bcp de monde a râlé sur le youtrack pour que JetBrains finisse par se mettre à niveau, et il aura fallu du temps.

----------


## vv221

> La GUI c'est quand même aussi pratique pour faire des stage partiel de fichier.




```
git add --patch
```

  ::P:

----------


## Orhin

> Pas tant que ça, grosso-modo 1 an, 2 grand max. Auparavant, le squash était proposé lors d'un rebase interactif uniquement. Depuis quelques versions, on peut enfin simplement aller dans l'historique git, sélectionner des commits, et paf squash 
> Jusque là j'utilisais SmartGit (excellent produit au passage) pour le faire. Bcp de monde a râlé sur le youtrack pour que JetBrains finisse par se mettre à niveau, et il aura fallu du temps.


Ah oui je pensais que tu parlais du squash en rebase interactif, dans ce cas my bad.




> ```
> git add --patch
> ```


Ouais enfin avoir un diff complet de ton fichier sur lequel tu peux cocher/décocher à la volée ce que tu veux commit, c'est quand même un poil plus pratique et ergonomique.  ::P:

----------


## Sariyah

Salut les canards,

C'est un peu l'angoisse là, est-ce que quelqu'un aurait un Mac avec Xcode d'installer svp ? Grosso modo je dois envoyer mon projet et je n'arrive plus à l'ouvrir. Il est tout petit (6,42mo) j'ai l'impression que le Mac Book de ma femme (mid-2012) veut plus.. 

Je voudrais juste m'assurer qu'il run.  ::cry:: 

edit : Ah non c'est bon en fait, quelle panique  ::ninja::

----------


## deathdigger

> Au cas où : tu sais *squash*er  avec git ? (et good news, les IDE savent enfin le faire)
> Ca change la vie, un peu comme le burger au camembert pané 
> Les worktrees un peu aussi.


Nope, je ne sais même pas ce que c’est  ::ninja:: 
Pour le moment, j’en suis à pull, push et commit. J’ai eu à resolve un conflit, je l’ai fait dans vscode.

----------


## Nilsou

Tu peux le faire avec meld sinon, ou winmerge, c'est plus simple si on ne veut pas passer par des IDE.

Sinon le seul outil git (en plus de git lui même) que je trouve indispensable c'est une arborescence visuelle des branches, comme celle construites sur l'interface d'un gitlab.

----------


## Orhin

> Tu peux le faire avec meld sinon, ou winmerge, c'est plus simple si on ne veut pas passer par des IDE.


Ben après l'intérêt de passer par ton IDE c'est que t'as accès à tes outils d'analyse de code/lint/etc dans ta fenêtre de résolution de conflit/merge.

----------


## vv221

> Ouais enfin avoir un diff complet de ton fichier sur lequel tu peux cocher/décocher à la volée ce que tu veux commit, c'est quand même un poil plus pratique et ergonomique.


Question d’habitude je suppose. Je préfère largement éditer le diff dans vim comme le propose _git add -p_ en console.

----------


## vectra

> Ouais enfin avoir un diff complet de ton fichier sur lequel tu peux cocher/décocher à la volée ce que tu veux commit, c'est quand même un poil plus pratique et ergonomique.


trve savent.
Je ne te remercierai jamais assez de m'avoir recommandé de sauter le pas quand Jetbrains vendait ses licences à 50%.

----------


## Nilsou

> Ben après l'intérêt de passer par ton IDE c'est que t'as accès à tes outils d'analyse de code/lint/etc dans ta fenêtre de résolution de conflit/merge.


C'est vrai mais dans ce cas, autant tout faire avec l'IDE, remontées comprise...

- - - Mise à jour - - -




> Ouais enfin avoir un diff complet de ton fichier sur lequel tu peux cocher/décocher à la volée ce que tu veux commit, c'est quand même un poil plus pratique et ergonomique.


Vous êtes au courant qu'il existe la commande difftool ?  ::ninja::

----------


## gros_bidule

Ouiiiii ^^ mais difftool ne corrige pas les imports, ne détecte pas les erreurs de syntaxe, etc. Le faire en 3 colonnes dans un bon IDE ça a son petit intérêt  ::): 
Du confort quoi. Mais je comprends que certains préfèrent le caleçon clouté, je ne juge pas.
Reste que c'est à cause de gens comme vous (en réalité pas vraiment, je sais bien) que nos boss ne veulent pas payer de licences IntejjiJ. Ducon il travaille est heureux sous Vim. Tss...

----------


## Kamikaze

J'ai converti absolument tous les fans hardcore de Vim à Jetbrains dans ma boite. Ils me remercient maintenant et sont très satisfaits. En plus y'a même un mode Vim dans Jetbrains si tu veux garder un peu le flow Vim.

Tu peux pas te passer d'un bon IDE si tu veux être efficace à mon avis. Notamment très utile sur les codebases existantes et rarement immaculées, cas classique en entreprise.

Perso pour Git j'ai une approche très minimaliste, je parle pour le cas d'utilisation dans une équipe relativement compact, pas gros projet open source international.

En gros j'essaye de me restreindre à:
clone (recursive), fetch/pull
git submodule init/add
création de branche locale, git branch
status, diff, git add, git commit, git push

Trunk based development donc une seule branche (master/main)

Avec une équipe bien synchronisée les merges sont extrêmement rares ou triviaux quand ils se produisent. L'historique est extrêmement lisible, et on peut se concentrer sur l'important: la qualité des commits, les nouvelles fonctionnalités du programme.

Très très rarement besoin de faire plus que ça. La synchronisation est importante, deux personnes sur le même bout de code généralement c'est du manque d'organisation, pas quelque chose qui apporte une quelconque valeur. Donc les rebases/merges sont rares

----------


## Frypolar

> C'est vrai mais dans ce cas, autant tout faire avec l'IDE, remontées comprise...


Ah ben oui. Je reconnais volontiers que pour plein de trucs passer par le terminal est plus rapide/pratique. Mais git est tellement mal branlé que c’est un peu le parfait contre-exemple. Les seules fois où je m’en sers en ligne de commande c’est parce que j’ai des macros enregistrées dans mon clavier. Du coup là c’est plus rapide/pratique qu’un IDE  ::P:  Mais c’est genre pour 3 opérations.

- - - Updated - - -




> Trunk based development donc une seule branche (master/main)
> 
> Avec une équipe bien synchronisée les merges sont extrêmement rares ou triviaux quand ils se produisent. L'historique est extrêmement lisible, et on peut se concentrer sur l'important: la qualité des commits, les nouvelles fonctionnalités du programme.


Mais oui  ::wub::

----------


## Kamikaze

Ah d'ailleurs malpoli que je suis, y'a les vidéos de CppNow 2021 qui sont postées petit à petit, ça se passe ici:

https://pages.jetbrains.com/cppnow2021

Un example de conf intéressante:







- - - Mise à jour - - -

Et je rappelle le channel CppCon qui contient des confs légendaires, vraiment très intéressants et pratiques parfois, beaucoup de sujets sont abordés, même au dela du strict cadre c++:

https://www.youtube.com/channel/UCMl...RUdWX_JbLCukXg

----------


## war-p

> Au cas où : tu sais *squash*er  avec git ? (et good news, les IDE savent enfin le faire)
> Ca change la vie, un peu comme le burger au camembert pané 
> Les worktrees un peu aussi.


Ouais enfin le squash c'est pas terrible quand tu veux garder l'historique, et mis à part pour virer des commit de wip, ça sert à rien surtout avec gitflow. 
Sinon une vraie bonne astuce, saviez vous qu'on peut ressusciter des commit squashé justement ou tout simplement perdu dans un rebase infernal ? Il y a moyen de faire un reflog pour récupérer la référence du commit perdu et ensuite il suffit de faire un cherry pick dessus.
Et encore plus fort, savez vous qu'on peut se servir de git sans que les commit s'enchaînent de cette manière ?  ::ninja::

----------


## deathdigger

Je comprends même pas 1/4 de ce que vous dites, suis trop vieux pour ces conneries  ::ninja:: 
Là je suis en train de chercher la meilleure façon de gérer le versioning du code-source (pour pouvoir faire notamment des rollbacks si besoin).
En gros, j'ai un code source que je veux sauver avant de modifier.
J'imagine que je dois passer par des branches, mais je ne sais pas trop si c'est la bonne façon de faire.

Ce que je ferai spontanément, c'est faire une branche à partir du master et considérer que c'est ma version 1.0
Ensuite, je redéveloppe sur le master pour faire ma version 1.1. En gros, la 1.0 serait une branche morte si je n'ai pas besoin de faire de rollback. J'ai bon, ou ce n'est pas la bonne direction ?

----------


## Dross

Tu devrai plutôt développer tes nouvelles fonctionnalités dans des branches séparées, et merger vers la "master" quand ça part en prod. Tu peux même faire une branche intermédiaire "develop" si tu veux une version de test (à coller dans un CICD par exemple).

Pour les releases, tu as les tags qui te permettent de remonter à une certaine version, souvent c'est largement suffisant. 

Si ça ne l'est pas, tu peux partir sur des branches (mortes et de travail) de type : Master => SP01 => Release01. La release est en lecture seule c'est pour l'archivage. La SP c'est au cas où un de tes clients à un problème et que tu ne veux pas lui donner la dernière version, tu travaille dedans et tu remonte si nécessaire les fixs dans la master à la fin. Mais c'est l'artillerie lourde là par contre.

----------


## deathdigger

C'est un truc que je ne comprends pas. Je peux "naviguer" dans les versions avant mes commit (sur le site, en haut à droite des fichiers), mais comment je fais pour "retourner" à cette étape ?

----------


## Dross

*git checkout <hash-du-commit>* de mémoire

----------


## vv221

Exact, avec la possibilité de n’aller récupérer que certains fichiers donnés plutôt que de basculer complètement sur le commit :


```
git checkout <hash-du-commit> -- <fichier1> <fichier2>
```

----------


## Orhin

> C'est vrai mais dans ce cas, autant tout faire avec l'IDE, remontées comprise...


Ah mais je suis d'accord là dessus.



> Ouiiiii ^^ mais difftool ne corrige pas les imports, ne détecte pas les erreurs de syntaxe, etc. Le faire en 3 colonnes dans un bon IDE ça a son petit intérêt


Ceci.
Pouvoir avoir des merge propres directement c'est quand même pratique.




> Reste que c'est à cause de gens comme vous (en réalité pas vraiment, je sais bien) que nos boss ne veulent pas payer de licences IntejjiJ. Ducon il travaille est heureux sous Vim. Tss...


Ça c'est un truc que j'ai jamais compris de la part de pas mal de boites.
Une licence d'un IDE ça coute généralement entre 200 et 500€, soit le prix d'à peine 2 jours de boulot.
Si tu bosses 218 jours par an, suffit donc que ton IDE améliore ta productivité de 1% pour que ce soit rentable.

Même en s'en foutant totalement du bien être/confort des devs, c'est juste un investissement logique pour une entreprise.

----------


## olih

Prosus se paie Stack Overflow pour 1,8 milliard de dollars  ::O:

----------


## Lazyjoe

> Je comprends même pas 1/4 de ce que vous dites, suis trop vieux pour ces conneries 
> Là je suis en train de chercher la meilleure façon de gérer le versioning du code-source (pour pouvoir faire notamment des rollbacks si besoin).
> En gros, j'ai un code source que je veux sauver avant de modifier.
> J'imagine que je dois passer par des branches, mais je ne sais pas trop si c'est la bonne façon de faire.
> 
> Ce que je ferai spontanément, c'est faire une branche à partir du master et considérer que c'est ma version 1.0
> Ensuite, je redéveloppe sur le master pour faire ma version 1.1. En gros, la 1.0 serait une branche morte si je n'ai pas besoin de faire de rollback. J'ai bon, ou ce n'est pas la bonne direction ?


On ne dit plus "master" c'est stigmatisant.  :Tap:   ::ninja:: 

Mais sinon le versioning à la git il faut un peu changer de point de vue. Tu n'as pas un code monolithique avec différentes versions, tu as ton dépôt qui contient _le code_ dans sa globalité, et ce code aura plein _d'états_ différents, et à chaque commit tu vas créer un nouvel état. L'intérêt c'est de pouvoir y mettre tout ce que tu veux (les versions release bien propres, les betas pas encore sûres à 100%, des fonctionnalités expérimentales pétées....) et de facilement y naviguer (tu passes d'un état à un autre facilement, mais c'est beaucoup plus riche que "faire du rollback"), le défaut c'est que tu dois gérer toi-même où tu mets les choses. ::P: 


En solo il suffit de se cantonner aux recommandations classiques comme dit plus haut : 
 - la branche master contient le code en état "prod" (ça a été testé, ça compile et ça tourne)
 - des branches secondaires pour les évolutions du code qui ajoutent de nouvelles fonctionnalités, modifient la structure fondamentale du code ou ont de gros risques de tout péter

Et à la fin, soit ta branche secondaire est abandonnée et elle reste morte, soit elle arrive à un état satisfaisant pour être intégrée au master et là tu vas faire un _merge_. Le truc un peu délicat à comprendre c'est que ce genre d'opération ne modifie pas le code en lui-même mais l'état du dépôt. 
En faisant le _merge_ tu vas créer un nouvel état où le code contient ce qui a été fait dans le master et dans la branche, la branche en elle-même existe toujours et tu pourras toujours remonter l'historique de ses commits, repartir dans de nouveaux développements indépendants après le merge, etc...

La grosse question dans l'affaire c'est à quelle granularité tu décides de créer une nouvelle branche dans le code... et c'est là que les prises de têtes arrivent quand tu commence à avoir beaucoup de monde qui développe en même temps sur un même dépôt. Certains aiment créer une branche pour le moindre caractère modifié, si tu es seul ou presque à modifier le code c'est pas franchement utile pour ce qui n'a pas ou peu d'impact sur la structure générale du code (bugfixes localisés, docu, fichiers de config pour une nouvelle machine...).

Pour le nommage des versions ça se passe par les _tags_ qui consistent juste à mettre un nom compréhensible sur un commit particulier.

Un exemple de workflow typique : 
 - tu commence le développement de l'appli de manière linéaire
 - moultes commits dans le master (à chaque fois qu'il y a un morceau de plus implémenté qui compile et tourne bien)
 - le code atteint un état où tout ce que tu voulais mettre semble fonctionner correctement => tu le taggue "Version 1.0" ou "beta" ou ce que tu veux
 - tu as une idée de nouvelle fonctionnalité fabuleuse : tu crée la branche "THIS_IS_NOT_A_FEATURE_THIS_IS_A_REVOLUTION" à partir du commit taggué "Version 1.0" et commence des développements dessus
 - entre-temps des utilisateurs t'ont fait remonter 4 bugs 
 - tu corriges ces bugs dans 4 commits individuels que tu push sur la branche master
 - tu te dis que tous ces correctifs méritent d'être mis en avant : tu taggue "Version 1.1" sur le dernier
 - tu reprends le développement dans ta branche révolutionnaire mais tu te dis que c'est dommage de ne pas avoir ces nouveaux correctifs de la 1.1
 - Et là magie de git, tu as ce qui est une des meilleures features de ce système de versioning : le rebase. Tu vas dire à git : je ne veux plus que la base de ma branche parte du commit "Version 1.0" mais qu'elle parte du commit "Version 1.1". Et voilà, en une commande toute simple tu as mis à jour le code de ta branche avec tout ce qui avait évolué parallèlement dans le master.  ::wub::

----------


## Getz

Et pour finit tu merge ta branche THIS_IS_NOT_A_FEATURE_THIS_IS_A_REVOLUTION dans master avec un fast forward, et tu as un historique git parfaitement linéaire sans commit de merge  ::wub::

----------


## Lazyjoe

> Et pour finit tu merge ta branche THIS_IS_NOT_A_FEATURE_THIS_IS_A_REVOLUTION dans master avec un fast forward, et tu as un historique git parfaitement linéaire sans commit de merge


Du calme, ça va faire trop d'un coup faudrait pas lui provoquer un AVC.  ::P:

----------


## Getz

> Du calme, ça va faire trop d'un coup faudrait pas lui provoquer un AVC.


Boh, le plus dur est de passer l'étape du rebase quand même  :^_^: 
Après ça, le fast forward c'est trivial.

----------


## Robix66

Merci pour les infos, chez nous on saute le pas cette semaine.

----------


## Taro

On ne le dira jamais assez, 

```
git pull
```

 c'est le mal.

----------


## Awake

```
git poule
```

est tellement plus fun et facile à faire avec les aliases.

----------


## Taro

J'aurais plutôt tendance à faire un alias pour qu'un *pull* fasse apparaître un message indiquant de faire un *fetch* et ensuite un rebase ou un merge en fonction. Avec insultes en option.
 ::siffle::

----------


## deathdigger

> *git checkout <hash-du-commit>* de mémoire





> On ne dit plus "master" c'est stigmatisant.  
> 
> Mais sinon le versioning à la git il faut un peu changer de point de vue. Tu n'as pas un code monolithique avec différentes versions, tu as ton dépôt qui contient _le code_ dans sa globalité, et ce code aura plein _d'états_ différents, et à chaque commit tu vas créer un nouvel état. L'intérêt c'est de pouvoir y mettre tout ce que tu veux (les versions release bien propres, les betas pas encore sûres à 100%, des fonctionnalités expérimentales pétées....) et de facilement y naviguer (tu passes d'un état à un autre facilement, mais c'est beaucoup plus riche que "faire du rollback"), le défaut c'est que tu dois gérer toi-même où tu mets les choses.
> 
> 
> En solo il suffit de se cantonner aux recommandations classiques comme dit plus haut : 
>  - la branche master contient le code en état "prod" (ça a été testé, ça compile et ça tourne)
>  - des branches secondaires pour les évolutions du code qui ajoutent de nouvelles fonctionnalités, modifient la structure fondamentale du code ou ont de gros risques de tout péter
> 
> ...


Merci pour les infos, faut que je teste ça avec un projet bidon  ::):

----------


## Frypolar

> Je comprends même pas 1/4 de ce que vous dites, suis trop vieux pour ces conneries 
> Là je suis en train de chercher la meilleure façon de gérer le versioning du code-source (pour pouvoir faire notamment des rollbacks si besoin).
> En gros, j'ai un code source que je veux sauver avant de modifier.
> J'imagine que je dois passer par des branches, mais je ne sais pas trop si c'est la bonne façon de faire.
> 
> Ce que je ferai spontanément, c'est faire une branche à partir du master et considérer que c'est ma version 1.0
> Ensuite, je redéveloppe sur le master pour faire ma version 1.1. En gros, la 1.0 serait une branche morte si je n'ai pas besoin de faire de rollback. J'ai bon, ou ce n'est pas la bonne direction ?


Le plus simple (et le plus efficace a priori) c’est ce dont parlait Kamikaze au-dessus : trunk-based development. Les trucs types gitflow c’est la solution parfaite pour avoir un sac de nœuds pas possibles avec ses branches. C’est aussi parfaitement opposé au principe d’intégration continue, par définition.

Le système _trunk-based development_ est aussi particulièrement adapté à un débutant de git. Tu ne rencontreras jamais (ou rarement en équipe) de situations qui te demanderont un usage avancé de git.

Pour le scénario que tu évoques c’est aussi très simple avec ce modèle. C’est comme tu as dit. Si jamais tu veux qu’un changement fait sur la branche principale (master/trunk) arrive sur ta branche de release, typiquement une correction de bug, tu fais un cherry-pick de master vers la branche de release du commit qui a fait ce changement. Tu peux aussi faire dans l’autre sens mais il y a un risque d’oublier de pousser un bugfix de la branche de release vers master. C’est expliqué ici.

T’as aussi d’autres sites moins moches sur le sujet  ::ninja::

----------


## Dross

> C’est aussi parfaitement opposé au principe d’intégration continue, par définition.


J'vois pas bien en quoi. Tu peux avoir des règles de build/test/etc sur toutes les branches, même les temporaires de développement de features. Et ton déploiement automatique sur ta branche develop pour ton environnement de DEV, la master pointant sur ta prod.

Par contre oui, le meilleur workflow dépend de ton équipe/projet/etc. Trop lourd pour un projet trop petit c'est contre-productif. Et l'inverse est vrai aussi.

D'ailleurs c'est vrai pour tout les trucs de gestion en général : Agile tu prends ce qui t'aide, et tu vire ce qui t'emmerde.

----------


## Frypolar

> J'vois pas bien en quoi. Tu peux avoir des règles de build/test/etc sur toutes les branches, même les temporaires de développement de features. Et ton déploiement automatique sur ta branche develop pour ton environnement de DEV, la master pointant sur ta prod.


Le principe de GitFlow c’est de faire des longues branches par feature. Une ou plusieurs personnes bossent dans leur coin, quand elles ont fini la branche est mergée dans develop. Ça peut durer un jour comme plusieurs semaines. D’expérience c’est plutôt une semaine en moyenne. C’est un modèle qui favorise les merges de taille assez conséquente.

Le principe de l’intégration continue c’est que tous les développeurs mergent leurs changements dans la même branche (typiquement master ou trunk) tous les jours voire plusieurs fois par jour. Le but est justement d’éviter les gros merges. À chaque merge on valide les changements par un build et des tests. Aujourd’hui on automatise cette partie et cette automatisation est abusivement appelée "intégration continue" puisque c’est le seul truc qu’on peut te vendre. Sauf que ce n’est pas l’automatisation qui rend le code plus robuste, c’est le fait que les participants mettent tous leurs changements en commun fréquemment. Si tu regardes un peu l’historique de cette pratique c’est très clair : à l’époque il n’existait pas d’outil pour automatiser tout ça :D

C’est comme un œuf à la coque. Si tu veux un œuf à la coque c’est 3 minutes dans l’eau bouillante. Si tu le laisses 10 minutes t’as un œuf dur. C’est bon aussi mais c’est pas pareil  ::):  Pour une branche de dev, moins d’un jour c’est considéré comme "continue". Au-delà ce n’est plus le cas. Mais c’est pas pour autant que ça ne fonctionne pas.

Edit : et l’intégration continue c’est vraiment dur à mettre en place, surtout quand on est habitué à une autre pratique type gitflow. Le principe c’est de changer ta façon de travailler, ça pique un peu  ::(:  C’est d’ailleurs la grosse arnaque des boîtes qui te vendent du CI/CD comme étant une simple case à cocher. Tu te retrouves avec un build continue, rien de plus. C’est déjà bien mais rien ne prouve que cela amènera les bénéfices attribués à l’intégration continue.

----------


## Kamikaze

Par défaut git pull peut rebase depuis un moment ou avoir le comportement que tu veux (ff only), me semble que git te dit même de le configurer via un message si c'est pas le cas, donc c'est clean de nos jours. Et en vrai comme je disais, si tu bosses en communicant bien, y'a 0 conflit lors des pulls et tu peux foncer.

Pendant que tu fatigues tes pauvres doigts avec 2 commandes, le parfait hérisson se contente d'une commande, haha!

----------


## Taro

Oui, à l’installation il te demande quel comportement tu veux.
Sauf que la personne qui fait l’install n’est pas nécessairement la même que celle qui va utiliser la machine pour développer.

Et les gens qui ne connaissent pas bien Git passent par le pull sans savoir que c’est un ensemble de commandes.
Quand ils ont un problème et que tu veux les dépanner, c’est plus compliqué de savoir ce qui s’est passé.
D’expérience les gens s’en branlent tant qu’ils arrivent à récupérer les commits pour pouvoir pousser les leur...

Même quand tu connais bien Git, je trouve ça naze cette commande.
Je préfère faire le fetch et savoir si les branches ont divergé ou si seul une des deux a des commits supplémentaires.

Parmi les bonnes pratiques qu’on m’a enseignées, il y a celle-là : « pas de pull sinon j’t’aide pas ».
Une autre étant : « tu fais un git status entre chaque commande »
Et si je devais en rajouter une à destination de mes collègues actuels : « vas-y, laisse bien tes merdes en unstaged, et surtout pense à appeler ton entrée du stash ‘tmp pull’, je saurai quoi dire au juge quand on me demandera pourquoi je t’ai coupé en rondelles avant de jeter tes restes au fond du Rhône »
 :Vibre:

----------


## Kamikaze

cd ..
git clone 
cp -r /home/collegue/git_corrompu/mes_changements tmp_git_clone
git add -A; git commit -m "update pour Taro <3"; git push

----------


## Taro

Jamais ils mettent de <3 les saligauds  :Emo:

----------


## gros_bidule

Ha ça les branches, une des situations les plus tristes que j'ai vécu c'est lorsque, en SSII, le petit chef de projet voulait que l'on avance sur le sprint actuel + le sprint suivant en même temps, en "avance de phase" comme il se plaisait à dire. Forcément, bossant sur la même base de code, ça donne de sacrés conflits lorsque les trucs faits en avance de phase, mergés dans des feature-branches entre-temps, doivent être mergés dans master. On perdait du temps, surtout les nouveaux qui ne pannaient rien à Git, mais il a toujours persisté dans son idée de prendre de l'avance, malgré le fait que TOUUUUS nos sprints débordaient. On était jamais dans les temps. P'taing, quel débile.

Bizarrement, dans mon nouveau taff, on est plus de 100 personnes sur un ensemble de projets franchement complexes et interconnectés, les chefs sont intelligents, on prend le temps d'être dans les temps (c'est tout un concept ^^) et de planifier les tâches pour éviter les conflits, et les seuls conflits que l'on a sont ultra mineurs, principalement sur des libs partagées par plusieurs projets. En 1 an je n'ai eu qu'un seul conflit, un tout petit de rien du tout. Non mais allô.

----------


## Awake

C'est très intéressant d'entendre parler de l'intégration continue et peut-être que vous y avez répondu, mais comment faire pour que du travail inachevé ne passe passe pas en prod ? Je pense au web entre autre, par exemple un nouveau bloc d'inscription à une newsletter, l'inté est faite mais ce n'est pas connecté au backend, et pourtant commit sur master. Les tests passent et tout, mais il y a un patch urgent sur master à deployer, et on ne peut pas deploy le bloc newsletter inachevé. Comment ce cas est géré ?

----------


## gros_bidule

Je dirais tout d'abord que si les tests passent mais que malgré tout le site n'est pas dans un état convenable, c'est que vous ne testez pas assez ou pas bien (pas assez de tests end-to-end ou d'intégration par ex).

Ensuite, vous devriez merger dans master uniquement ce qui fonctionne et est testé (les e2e sont joués et si ça fail, ça bloque le merge). Si le travail est dans un état intermédiaire, mergez plutôt dans feature-branch, que vous mergerez ensuite dans master quand elle sera complète.

Ainsi, master est toujours stable et reflète la prod. D'ailleurs pour le patch en urgence, tu devrais pouvoir l'intégrer sans soucis sur master. Mais vu que ta master n'est plus stable et ne reflète plus la prod, tu es dans le caca.
Une stratégie dans ce cas c'est de garder master = prod, mais tu merges ton boulot dans une branche de preprod ou de dev (comme par ex develop). Tu pousses develop sur master quand tu veux releaser une version (tu en profites pour faire un tag). C'est ce tag que tu mets en prod. Comme ça, si soucis tu remets le précédent patch en prod. Et ton patch en urgence, tu le fais sur le tag qui est en prod. S'il est éprouvé, tu le cherrypick sur master et/ou develop histoire qu'il ne disparaisse pas à la prochaine release.

Aussi, un article que j'apprécie bcp : https://martinfowler.com/articles/br...-patterns.html
La gestion des branches c'est vite compliqué. Il y a de grandes méthodologies plutôt efficaces et complètes, mais aucune ne prend en charge 100% de tes besoins (c'est plutôt 90%), il faut donc choisir celle qui te convient le plus, et faire quelques ajustements pour les cas particuliers, cas qui sont souvent prise de tête.

---

Mais pour en revenir à ton problème de patch en prod, si c'est du one-shot tu peux faire un truc un peu cra-cra : tu crées une branche à partir d'un commit de master qui date d'avant l'intégration du code qui ne va pas. Tu patch et mets cette branche en prod. Ca te laissera le temps de corriger master.
Tu peux aussi revert les commits qui t'embêtent, et tu reverteras ces reverts plus tard  :^_^: , mais là les dieux de Git t'en voudront.

----------


## Dross

> Le principe de GitFlow c’est de faire des longues branches par feature. Une ou plusieurs personnes bossent dans leur coin, quand elles ont fini la branche est mergée dans develop. Ça peut durer un jour comme plusieurs semaines. D’expérience c’est plutôt une semaine en moyenne. C’est un modèle qui favorise les merges de taille assez conséquente.
> 
> Le principe de l’intégration continue c’est que tous les développeurs mergent leurs changements dans la même branche (typiquement master ou trunk) tous les jours voire plusieurs fois par jour. Le but est justement d’éviter les gros merges. À chaque merge on valide les changements par un build et des tests. Aujourd’hui on automatise cette partie et cette automatisation est abusivement appelée "intégration continue" puisque c’est le seul truc qu’on peut te vendre. Sauf que ce n’est pas l’automatisation qui rend le code plus robuste, c’est le fait que les participants mettent tous leurs changements en commun fréquemment. Si tu regardes un peu l’historique de cette pratique c’est très clair : à l’époque il n’existait pas d’outil pour automatiser tout ça :D
> 
> C’est comme un œuf à la coque. Si tu veux un œuf à la coque c’est 3 minutes dans l’eau bouillante. Si tu le laisses 10 minutes t’as un œuf dur. C’est bon aussi mais c’est pas pareil  Pour une branche de dev, moins d’un jour c’est considéré comme "continue". Au-delà ce n’est plus le cas. Mais c’est pas pour autant que ça ne fonctionne pas.
> 
> Edit : et l’intégration continue c’est vraiment dur à mettre en place, surtout quand on est habitué à une autre pratique type gitflow. Le principe c’est de changer ta façon de travailler, ça pique un peu  C’est d’ailleurs la grosse arnaque des boîtes qui te vendent du CI/CD comme étant une simple case à cocher. Tu te retrouves avec un build continue, rien de plus. C’est déjà bien mais rien ne prouve que cela amènera les bénéfices attribués à l’intégration continue.


C'est comme je disais : faut pas être rigoriste avec tout ça. 

Nous on est en mode gitflow quand on a des features par personnes et qui ne se téléscopent pas (ou alors 2-3 entrées dans la solution par exemple), ça ne pose pas de problème vu que de toutes manières les gens ne bossent pas sur la même partie. Et ça a le bon goût de faire des PR propres qu'on peux superviser facilement (cf les juniors).
Si plusieurs devs bossent sur la même partie, alors là on bosse ensemble sur la même branche avec des commits réguliers, pour éviter justement le problème des merges gargantuesques. 

Dans tout les cas on a le build et les tests. 

Et c'est pas le CI qui rends notre code robuste, c'est notre archi, code et couverture de tests.

----------


## Kamasa

Puisque ça parle de Git et qu'il semble y avoir des gens pas familier avec les commandes. Voici un p'tit tuto bien foutu  :;): 
Ca ne parle pas de gestion du dépot git-flow ou pas git-flow, trunk ou goten. Non, c'est juste les commandes.

----------


## William Vaurien

Franchement les branches de git c'est pas compliqué et ça facilite grandement la vie. (A moins de n'avoir que des branches de R&D avec chacune une base vieille de 6 mois ou plus).

J'ai poussé une équipe de 'vieux dev' qui ne connaissait que CVS à passer sur git (alors que l'équipe d'intégration voulait les faire basculer sur subversion parce que git 'c'est trop compliqué'...).

Le changement s'est fait en douceur, j'ai passé un peu de temps avec eux au début, mais maintenant ils ne peuvent plus s'en passer.  

A part pour un dev seul (et encore) je ne vois pas l'intérêt de rester sur un modèle monobranche.

----------


## Taro

Pareil, même pour mes petits projets perso je bosse couramment avec plusieurs branches.

En gros la branche master compile, tourne, et n'a à priori pas de bugs connus.
A côté de ça les grosses refontes, le "portage" vers une autre plateforme*, etc tout ça ça passe par une petite branche à côté le temps de quelques commits.

_*j'écris du code multiplateforme lorsque c'est possible, mais je commence toujours pas développer sur une même plateforme jusqu'à avoir le coeur du truc qui tourne, donc il arrive qu'il y ait quelques fix à faire en visant autre chose._

----------


## Awake

Merci pour ta réponse @gros_bidule mais du coup si il faut créer une branche dès que le temps de dev de la tâche dépasse quelques heures, je vois pas trop la différence entre trunk based et du flow classique.

----------


## William Vaurien

Tu ne sais pas toujours si ton dev de quelques heures prévues ne va pas durer plus longtemps... 
Avec une branche un dev ne risque jamais de se retrouver "à moitié cuit" sur la branche principale.
Si tu es en équipe et qu'il y a une étape de revue de code, une branche est de toute façon nécessaire.

Et généralement en entreprise tu as un ticket pour le moindre truc, même corriger une coquille dans un label, donc c'est assez simple et limpide de faire ticket -> branche -> pull request -> merge.

Si en plus les outils utilisés s'intègrent dans la chaîne ça donne un ensemble facile à suivre (trouver le ticket du commit et inversement, trouver les tickets d'une release, trouver le commits pour un bug (avec Sentry + intégration Git)...

Le seul truc qui est pénible c'est si tu veux enchaîner plusieurs tickets (pour corriger le bug A, tu veux d'abord faire le refactoring R, et ensuite tu peux dans la foulée corriger le bug B...), en gros quand une branche s'appuie sur une autre.

Après tout seul, ou en équipe restreinte (un dev back-end et un autre front...) ce n'est pas toujours très utile... mais c'est tellement simple que ça ne coûte pas grand chose de prendre l'habitude  d'utiliser les branches.

----------


## Awake

Ouais j'ai déjà bossé de façon classique avec les branches, mais vous avez abordé le trunk based development, et ça m'intéressait parce que comme tu le dis, le flow avec des branches a aussi ses défauts. Je me demandais juste concrètement comment faire dans certains cas comme celui que j'ai décris : du boulot pas terminé, mais qu'il faut commit dans master/main parce qu'il ne faut pas dépasser une journée sans push.

----------


## vectra

> J'aurais plutôt tendance à faire un alias pour qu'un *pull* fasse apparaître un message indiquant de faire un *fetch* et ensuite un rebase ou un merge en fonction. Avec insultes en option.


C'est pour un concours de pulls moches?

----------


## Kamikaze

Y'a des branches si tu veux en TBD, c'est juste des short lived branch, souvent appelées "feature branch"

Si t'as un truc à moitié fini tu fais git checkout -b ma_feature, tu mets tes changements dedans, le lendemain tu reviens et tu commit tes changements sous la forme d'une pull/merge request et voilà la branche peut être supprimée et tu as pu sauver tes changements intermédiaires pendant ce laps de temps.

Mais effectivement ce sont juste des conseils généralistes, chacun peut adapter selon ses besoins. Pour moi ce qui compte c'est d'avoir quelque chose d'extrêmement clair et facile d'utilisation.

N'importe quelle personne, même extérieur au projet/domaine doit pouvoir débarquer, faire git clone, cmake, make/make test, faire un changement, git commit.

Perso je commit souvent directement sur le trunk, mais pour les personnes moins expérimentées j'utilise les pull request au début pour pouvoir revoir le commit et adapter si y'a des problèmes.

Quand j'entreprends un truc un peu plus complexe ou que je débarque sur un projet qui ne m'appartient pas je vais aussi faire une pull request généralement pour que ça puisse être revu. Et ça implique de créer une branche temporaire.

Aucune complexité là dedans, y'a ce site un peu verbeux qui en parle, à l'échelle de google même: https://trunkbaseddevelopment.com/

Si des personnes trouvent un intérêt à d'autres type d'orga y'a aucun problème bien sûr. Je pense que le truc important c'est de régulièrement vérifier que tout soit sain.

Combien de fois j'arrive sur un projet et je vois que la moitié des branches sont obsolètes et que les mecs peinent à faire une release et me dire où ils en sont. Enormes merge pas vraiment revus, contenant parfois des trucs de mecs qui sont partis. Une bonne partie des branches qui ne sont même pas testées dans un système (dev, integration, uat, etc.) ou autre type de runtime (tests unitaires etc.).

Le TBD (encore une fois, adapté pour une équipe compact de manière générale) garanti que le code sur lequel tu bosses est du code vivant utilisé tous les jours, et que tout ne fait qu'avancer, même une erreur sur le trunk, ce qui peut tout à fait arriver, des tests parfaits peuvent tout de même inclure un comportement non souhaitable, bah tu le fix avec un commit qui vient s'inscrire linéairement dans l'historique, ce qui est la réalité de la situation. Succession de commit facile à suivre, release notes facile à produire. Et ça requiert un certain niveau d'exigence sur chaque commit, ce qui évite d'avoir un projet qui se délite avec le temps. Y'a pas du code poussiéreux qui s'accumule dans un coin, tout est très clair, explicite, simple. Succession d'incréments intelligibles

Dans le cadre international open source c'est tout à fait normal, mais dans une team compact, avoir 2 personnes ou plus qui travaillent sur la même zone de code sans se synchroniser pendant une periode de temps étendue, généralement c'est un problème.

----------


## William Vaurien

Ok, donc en fait j'avais pas bien compris le concept du "trunk based dev": c'est à peu de chose ce que nous faisons avec nos branches (il faut être d'accord sur ce qu'est exactement une short lived branch)... Merci d'avoir mis un lien pour que je m'en rende compte ! 
J'imagine que plus l'équipe est grande plus le temps doit être court, mais il y a sûrement d'autres facteurs à prendre en compte, comme l'age et la taille du projet... Pour notre équipe une semaine est tout à fait acceptable, il n'y aura pas de problème car nous sommes peu nombreux, qu'il y a des spécialistes (plutôt front ou back) et que notre projet principal à passé un cap en terme de maturité, nous touchons rarement aux mêmes fichiers...

----------


## Frypolar

> C'est très intéressant d'entendre parler de l'intégration continue et peut-être que vous y avez répondu, mais comment faire pour que du travail inachevé ne passe passe pas en prod ? Je pense au web entre autre, par exemple un nouveau bloc d'inscription à une newsletter, l'inté est faite mais ce n'est pas connecté au backend, et pourtant commit sur master. Les tests passent et tout, mais il y a un patch urgent sur master à deployer, et on ne peut pas deploy le bloc newsletter inachevé. Comment ce cas est géré ?


Tu utilises des features flags pour que cette fonctionnalité pas totalement finie ne soit pas visible en production. Ça peut aussi permettre de donner accès à cette fonctionnalité à certains clients. C’est très pratique quand ton changement est lié à un retour client. Ça te permet de valider le travail en cours de route au lieu de bosser 6 mois en sous-marin et d’avoir des retours négatifs une fois que c’est fini.




> Ensuite, vous devriez merger dans master uniquement ce qui fonctionne et est testé (les e2e sont joués et si ça fail, ça bloque le merge). Si le travail est dans un état intermédiaire, mergez plutôt dans feature-branch, que vous mergerez ensuite dans master quand elle sera complète.


Ce que tu décris est incompatible avec l’intégration continue. C’est pas que ce que tu dis n’est pas bien ou n’est pas une solution valide. Simplement c’est une solution différente de l’intégration continue.




> C'est comme je disais : faut pas être rigoriste avec tout ça.


C’est pas une question d’être rigoriste (là on tombe dans l’attaque personnelle  :;): ), c’est une question de savoir ce qu’on fait pour connaître les conséquences.

L’intégration continue c’est une pratique (c’est très important) établie par une équipe de développeurs il y a plus de 20 ans. En cherchant à résoudre leurs problèmes, ils ont déterminés qu’en faisant A, B et C ils obtenaient les bénéfices X, Y et Z. Et ceci a été vérifié plusieurs fois dans d’autres contextes, tu as même certaines études sur le sujet. Il est donc établi qu’en faisant A, B et C alors on a les bénéfices X, Y et Z.

Gitflow amène un autre ensemble de pratiques J, K, L. Rien ne dit que J, K, L vont apporter les bénéfices X, Y et Z. Le principe central de l’intégration continue c’est d’éviter les gros merges qui sont sources de grosses instabilités et de temps perdu. D’où la définition :




> In software engineering, continuous integration (CI) is the practice of merging all developers' working copies to a shared mainline several times a day.


Là on veut plein de petits changements fréquents pour garantir la stabilité du code dans le temps. Avec gitflow on veut attendre qu’une feature soit terminée avant qu’elle n’arrive dans la branche principale. Les deux sont fondamentalement incompatibles.

Si tu espères obtenir les bénéfices X, Y, Z alors il est important d’être conscient de cette incompatibilité. Si l’intégration continue est utilisée juste en apparence, par exemple pour vendre un produit ou pour faire bien sur un PowerPoint, alors effectivement tu t’en tapes.

Ce n’est pas une question de jugement, c’est une question de définition. D’ailleurs tu pourrais très bien préférer avoir les bénéfices de gitflow plutôt que ceux de l’intégration continue. Le problème c’est que plein d’entreprises font croire que l’intégration continue est facile, accessible à tous et est une question d’outils (à acheter bien sûr) en faisant passer le concept de _continuous build_ pour celui de _continuous integration_. On se retrouve avec plein de gens qui pensent que l’intégration continue est facile (ce qui est faux et amène généralement à deux soucis) ou que c’est un idéal inatteignable (c’est faux aussi, plein d’équipes y arrivent).

Si tu n’es toujours pas d’accord je t’invite fortement à chercher d’où vient l’intégration continue et quel est le raisonnement derrière en prenant bien soin d’éviter les sites qui cherchent à te vendre une solution toute faite. Même si tu penses déjà connaître le sujet.

----------


## Frypolar

> Ok, donc en fait j'avais pas bien compris le concept du "trunk based dev": c'est à peu de chose ce que nous faisons avec nos branches (il faut être d'accord sur ce qu'est exactement une short lived branch)... Merci d'avoir mis un lien pour que je m'en rende compte ! 
> J'imagine que plus l'équipe est grande plus le temps doit être court, mais il y a sûrement d'autres facteurs à prendre en compte, comme l'age et la taille du projet... Pour notre équipe une semaine est tout à fait acceptable, il n'y aura pas de problème car nous sommes peu nombreux, qu'il y a des spécialistes (plutôt front ou back) et que notre projet principal à passé un cap en terme de maturité, nous touchons rarement aux mêmes fichiers...


Mais j’avais mis le lien plus haut déjà  :Emo: 

Une semaine ça n’est plus du TBD/CI. C’est pas que vous faites mal les choses, c’est que c’est différent  :;):  TBD/CI est avant-tout une gestion du risque. Faire autrement peut très bien fonctionner la plupart du temps ce qui fait qu’on a du mal à comprendre la différence avec d’autres pratiques. Cela devient uniquement visible si tu compares au long terme. Ça saute pas aux yeux immédiatement et ça n’est pas facilement vérifiable.

Cela dit même si tu essaies et que tu réussis, vu que l’avantage principal est l’absence de problème (par exemple un merge problématique nécessitant potentiellement de geler le dépôt pendant x heures/jours ou rendant le build cassé pendant x jours), ben tu ne t’en rends pas compte. Dans mon cas ça fait 2-3 ans qu’on est passé à ce modèle dans mon équipe. J’ai percuté uniquement en écrivant ce message que ça faisait 2-3 ans que je n’avais pas rencontré les problèmes relativement habituels dans le reste de l’entreprise.

----------


## Dross

> C’est pas une question d’être rigoriste (là on tombe dans l’attaque personnelle ), c’est une question de savoir ce qu’on fait pour connaître les conséquences.
> 
> L’intégration continue c’est une pratique (c’est très important) établie par une équipe de développeurs il y a plus de 20 ans. En cherchant à résoudre leurs problèmes, ils ont déterminés qu’en faisant A, B et C ils obtenaient les bénéfices X, Y et Z. Et ceci a été vérifié plusieurs fois dans d’autres contextes, tu as même certaines études sur le sujet. Il est donc établi qu’en faisant A, B et C alors on a les bénéfices X, Y et Z.
> 
> Gitflow amène un autre ensemble de pratiques J, K, L. Rien ne dit que J, K, L vont apporter les bénéfices X, Y et Z. Le principe central de l’intégration continue c’est d’éviter les gros merges qui sont sources de grosses instabilités et de temps perdu. D’où la définition :
> 
> 
> 
> Là on veut plein de petits changements fréquents pour garantir la stabilité du code dans le temps. Avec gitflow on veut attendre qu’une feature soit terminée avant qu’elle n’arrive dans la branche principale. Les deux sont fondamentalement incompatibles.
> ...


Il se trouve que justement, j'avais lu sur le sujet. Et cette pratique était arrivée quand des gens travaillaient avec d'autres outils (pas les IDE d'aujourd'hui) et d'autres pratiques (pas des petites classes à portée limitée, injection de dépendance, inversion de contrôle et tout le toutin : du moins pas dans les proportions d'aujourd'hui, les builds étaient aussi infiniment plus long, ce qui pouvais amener des avantages à merger tout ensemble plus rapidement (dans un des exemples antédiluviens du CI ils parlaient de builds de 6h de mémoire)). 

C'est en cela que je dis qu'il ne faut pas être rigoriste (c'est pas une insulte), et vouloir coller au canon car c'était le canon de l'époque. L'époque à changé, les pratiques et les outils aussi. Ce qu'il faut retenir c'est leur enseignement, et c'est : il ne faut pas que deux branches divergent sur le même codebase trop longtemps, quelques heures au pire. Mais faut déjà que deux dev bossent sur le même code pour que ça arrive. Franchement chez nous c'est rare, et quand ça arrive c'est pas grave, soit tu pull stratégiquement les modifs de l'autre quand y'a besoin, soit tu bosse sur la même branche exceptionnellement.

Et j'en suis d'autant plus conscient qu'on a appris ça à la dure : quand je suis arrivé dans ma start-up on était 2 (moi compris), on avais rien, pas même de branches. Quand on a commencé à les mettre en place on s'est inspirés des pratiques MS et on a malheureusement laissé divergé les branches pendant des semaines voir des mois (on était en waterfall et pas en agile à l'époque). On a souffert, beaucoup. Et on a appris. Aujourd'hui on n'a plus de problèmes. 

Et on a tout les avantages liés au CICD. Tous sans exception. 

Mais je le redis : dans ce domaine y'a rien de canonique, ce qui marche chez nous ne marchera pas forcément ailleurs. Faut comprendre ce qui fait l'attrait de la méthode et l'adapter pour en avoir les avantages dans votre équipe. Tant que vous obtenez les avantages, on s'en fout que y'a 20 ans ils faisaient autrement.

----------


## ook4mi

Question naïve : je ne suis pas dev, je l'ai été brievement dans ma précédente boite mais sans entretien avec le client... J'aimerais rebasculer côté technique et je me suis lancé dans le défi 100days of code

Je m'amuse de plus en plus avec Python et j'aimerais me créer une vitrine, je pensais utiliser github mais avoir 2 comptes :
1) pour la vie de tous les jours -> pour rien perdre et faire des erreurs
2) pour quand c'est stable/propre/interressant à montrer -> vitrine

Est-ce une bonne pratique ou à l'inverse : cela ne sert à rien car une vitrine personne n'y va ? Ou il n'est pas grave de push même si il y a encore des anomalies tant qu'à la fin d'un "projet vitrine" le résultat est bon ? Sachant que forcément la vitrine aura un push tous les X jours, l'autre sera surement beaucoup plus actif.

Merci pour le partage du guide sur Git  :;):

----------


## Kamikaze

Je suis sûr la même trajectoire et je pense qu'au final le mieux est de n'avoir qu'un seul compte.

Une fois qu'un projet est fini ou présentable tu peux officialiser la chose avec un readme bien propre ou une page github https://docs.github.com/en/pages/get...hub-pages-site

ou un wiki github. Et tu peux accompagner ça d'une vidéo (genre dans le cas de calculs graphiques lourd c'est très commun) ou n'importe quoi d'autre qui permet de présenter le projet de manière simple, un site web avec une API vers ton app, etc.

Et concernant tous les projets "moches" "en chantier". Bah c'est pas grave, ils sont dans ton repo mais ça montre tes centres d'intérêt, y'a aucun mal à ça. Je pense que c'est plus pratique que d'alterner et transvaser les trucs entre 2 comptes. Tu peux mettre un gros WIP dans le readme au début. Il ne peut t'arriver que des bonnes choses en étant ouvert, quelqu'un qui vient t'aider, un mec qui voit que tu partages certains centre d'intérêts, etc.

Et si jamais tu contribues à un project existant, c'est aussi positif et c'est sur le même compte

----------


## Dross

Github propose aussi des repos privés gratuitement maintenant, c'est pratique pour les WIP qui n'ont pas pour but d'être publiés, ou des tests abandonnés, ou des débuts de projets que vous voulez garder secret au départ (vos plans pour prendre le contrôle du monde en général). 

Ça permet de garder un listing plus propre. Et de toutes manières sur ton profil tu épinglera les repos que tu aime le plus, veux mettre de l'avant.

----------


## Kamikaze

Exemple de projets au pif qui utilise github comme vitrine

Librairie de logs
https://github.com/gabime/spdlog avec un beau readme, et un wiki sur github: https://github.com/gabime/spdlog/wiki/1.-QuickStart

Un blog/projet qui se suffit à lui même en temps que vitrine (il parle des nouveautés en c++20): https://oleksandrkvl.github.io/2021/...-overview.html

----------


## gros_bidule

Yeah, je tendrais vers la même vision.
De toute façon, peu de recruteurs regarderont ton github, déjà qu'ils ne lisent ton CV que le jour de l'entretien  :^_^: .
Mais, en de rares occasions, tu tombes sur qqun qui regarde ton github, et là avoir des repos avec un minimum d'infos peut être intéressant : au moins un readme pour dire ce que fait le projet. Perso, je déteste voir un projet sans readme, ou un readme qui rappelle juste le nom du projet. Tu es là, aucune explication, juste plein de code, youpie joie, tu passes ton chemin.
Quant aux projets moches, honnêtement, personne ne t'en tiendra rigueur car personne n'ira lire ton code. Et quand bien même qqun de très motivé lira du code, il sera assez intelligent pour se dire que c'est un petit projet perso sans grande prétention, donc tu n'as pas 200h à passer dessus non plus.

De ma propre expérience : en 10 ans aucun recruteur ou collègue ne savait que j'avais un github, malgré un gros lien sur mon CV. Puis un jour, une recruteuse (ma boss actuelle en fait) m'a trouvé sur github grâce à mon activité. Et c'est le meilleur taff de ma vie. Mais je pense que c'est un gros coup de chance, et mon profil est particulier (je passe ma vie dessus).
Tu pourrais éventuellement te servir de ton github pour présenter du code lors d'un entretien tech, mais il faut que le type accepte de mettre de côté son test technique à base de QCM et de questions orales ^^, c'est plutôt rare, mais ça arrive.

Perso, github c'est pour :
- m'amuser et apprendre sur des projets, quitte à ce que certains aient leur petite popularité, mais ce n'est pas l'objectif (et ça n'arrive que très rarement ^^). Et du code sale, il y en a  ::): 
- me faire un référentiel de code : j'ai vu comment faire du oauth un jour au taff ? je me monte un petit projet perso qui le met aussi en œuvre, comme ça dans mon prochain taff j'aurais du code exemple (ça permet de préserver la connaissance*** sans garder un zip de tes projets pro****, ce qui est interdit et très dangereux ^^) et ça fait aussi un bon exercice : souvent au taff les technos sont déjà en place, tu ne fais que "modifier" une base existante -> repartir du début, mettre les mains dans le cambouis, c'est super formateur

* je ne sais pas pour vous, mais souvent dans un nouveau taff ou équipe, on me dit "ha mais tu as fait du Truc dans ton précédent taff ? tu peux nous aider ?". Le soucis c'est que le code tu ne l'as plus, tu as juste les grandes lignes en tête, et tu vas perdre du temps à rechercher le code, et les petites subtilités bien reloux. Now je vais sur mon github, projet demo, techno Truc ? Oui, j'ai un exemple qui va bien. Sur des technos bien relou type Spring Security, c'est salutaire.

** d'un employeur

----------


## Kamikaze

Ouais tout à fait ultimement ça te servira d'une manière ou d'une autre t'façon, et c'est gratos en plus. C'est tellement beau l'open source que j'en ai la larme à l'oeil  :Emo:

----------


## gros_bidule

Yeah, et des contributeurs ou curieux pourront même t'apprendre des trucs  ::): 
C'est d'ailleurs un canard qui m'a montré des trucs de ouf en Kotlin  ::love::

----------


## Kamikaze

'Tain chui au taff' là. On m'a demandé de changer une tâche pour qu'elle s'exécute en parallèle du reste des tâches désormais, car trop lente. Avant ça attendait la fin d'une séquence de tâches, puis ça tournait.

Ils m'ont dit, "surtout regarde pas le code, on te connaît, cherche pas à optimiser, juste mets nous ça en parallèle".

Bon forcément je regarde le code, très laid mais j'ai l'habitude. J'optimise 2/3 bricoles, mais je vois rien de trop méchant. Et là je me rends compte, erreur assez classique mais bon, qu'ils ont pas compris leur framework de log. Du coup même dans un mode de log peu verbeux, genre ERROR ou PANIC, ils font quasiment autant d'opérations qu'en DEBUG ou TRACE vu qu'ils font ça au runtime (plutôt que d'avoir des binaires instrumentés de log et d'autres non) et que de toute façon y'a de gros dégueux qui ont rajouté des passes de processing avant d'arriver au log en lui même, indépendamment du niveau de log.

Bref, TL;DR, dans des boucles critiques t'as toujours une bonne quantité de log qui est pondue, même si tu désactives les logs. En plus les logs servent à rien, font que décrire des résultats que tu peux voir à la fin t'façon. Bon ok, y'a 2 ou 3 passages intermédiaire mais très faible valeur, c'est des opérations simples.

Le truc est passé de 14 min de runtime à 60 secondes sur un set de données de prod que j'avais, maintenant va s'agir d'être un peu diplomate pour leur expliquer comment logger proprement

Sachant que parfois avec beaucoup de données ils ont des run d'1 heures. Si on reste sur du *14 d'optimisation ça leur ferait genre du 4 min

EDIT: Allez, 53 secondes en enlevant les derniers logs mal faits, en plein milieu des boucles appelées 10 millions de fois en prod
Le pire c'est qu'il en reste dans une autre librairie qu'on appelle et qui nous appartient mais bon, on verra ça plus tard. J'vais pas toucher à tous les projets d'un coup

----------


## gros_bidule

Joli  :^_^:

----------


## Kamikaze

Bon bah le run de 1 heure 4 min en prod est devenu 110 secondes :/

Je vais quand même mettre ça en parallèle avant de leur montrer histoire d'être safe

----------


## William Vaurien

Protip ne dit rien et chaque vendredi tu retires 3 logs et tu prends ton après midi...Tes collègues ne méritent pas d'explication...

----------


## Kamikaze

Hahaha pas bête.
Le pire c'est que maintenant tourner en parallèle sera potentiellement plus lent. Car il faut que les données arrivent, donc il faudra plusieurs run, chaque run sera très court. Et y'a potentiellement un petit overhead genre si tu relances l'appli régulièrement (bon si je la laisse tourner et genre poll les données ça devrait aller). Donc certes ça devrait terminer un peu plus tôt mais le temps total sera plus long.
M'eeeeenfin, on verra

----------


## Awake

> Tu utilises des features flags pour que cette fonctionnalité pas totalement finie ne soit pas visible en production. Ça peut aussi permettre de donner accès à cette fonctionnalité à certains clients. C’est très pratique quand ton changement est lié à un retour client. Ça te permet de valider le travail en cours de route au lieu de bosser 6 mois en sous-marin et d’avoir des retours négatifs une fois que c’est fini.


Merci pour ta réponse  ::):  Je ne connaissais pas vraiment les features flags et en regardant du côté l'Unleash c'est vraiment une bonne idée. Une moins bonne idée c'est d'aller taper dans une API externe pour voir si chaque feature est dispo (en web ça s'appelle du suicide) mais ça semble facilement implémentable en interne. J'essaierais le Trunk based dev pendant un temps du coup, voir ce que ça donne.

----------


## Tramb

> Folies


Ptain mais cette folie de penser que paralléliser c'est moins cher et moins casse-gueule que d'optimiser (surtout du code moisi où t'as qu'à te baisser).

----------


## vv221

> Je vais quand même mettre ça en parallèle avant de leur montrer histoire d'être safe


« Bon, c’est bien gentil tes histoires de laugues, mais tu vois bien qu’on avait raison : avec la Parallélisation™ on est passé de 1 heure 4 minutes à 110 secondes. Je doute que tes optimisations de laugues fassent aussi bien. »

----------


## Taro

Bon, voyant que Netbeans ne fait quand même pas non plus le café (beans, café, y'a des choses à dire  ::ninja::  ), et vu que CLion est plutôt populaire ici, j'ai téléchargé la version d'essai.

Bordel, je suis perdu, j'arrive même pas à faire un ajout de source existante à un projet tout vide.  ::P: 

Un petit état des lieux : j'utilise assez peu Netbeans au final. Je développe et débogue essentiellement sous Windows, via Visual Studio en version 2017 ou 2019 avec VC++ derrière.
Et de temps en temps, je fais un petit passage par ce bon vieux Netbeans 8.2 avec du G++ derrière. Essentiellement parce qu'Eclipse, je peux pas, c'pas possible.

Du coup, j'entretiens un projet Visual Studio et un projet Netbeans séparément, mais avec des sources communes.
Les paramètres des projets sont semblables dans l'esprit (répertoires de sources, bibliothèques en entrée, etc) mais je dois les maintenir tous les deux. C'est un peu chiant au début, mais après c'est peanuts à maintenir, y'a rarement des modifs. Netbeans derrière il fait une traduction en makefile, donc j'avais espéré pouvoir l'ouvrir en tant que tel sous CLion et roule ma poule, vu qu'ils disent qu'il supporte les projets à makefile, mais c'est pas aussi simple que simplement ouvrir le projet Netbeas apparemment. Oui je suis gourmand.

Avec le temps du coup j'ai peaufiné mon rangement, dont je suis assez content, ce qui donne un truc du genre :


```
LapinRenderer/
 |- bin/
 |   '- x86_64/
 |       |- Debug/
 |       |   |- GNU-Linux/
 |       |   '- MS-Windows/
 |       '- Release/
 |           |- GNU-Linux/
 |           '- MS-Windows/
 |- LapinCore/
 |   '- build/
 |   '- nbproject/
 |   '- src/
 |   '- vsproject/
 '- LapinTests/
     '- build/
     '- nbproject/
     '- src/
     '- vsproject/
```

Donc dans bin sortent les binaires. C'est rangé par plateforme et par configuration, généralement du x86_64 mais des fois j'y glisse autre chose, genre arm_64.
A côté j'ai un répertoire par projet, le plus souvent y'a 2-3 projets, typiquement une lib statique, un projet de tests et un projet d'appli qui linkent vers la lib. Ces répertoires de projets se divisent en build (répertoire intermédiaire), src (sources), nbproject (projet Netbeans) et vsproject (projet/solution Visual Studio).

Dans les projets Visual/Netbeans je bosse avec des chemins relatifs et je remonte puis redescends d'autant de niveaux que nécessaire pour taper dans les sources/les bibliothèques.
Au lieu d'avoir tout au même endroit et mélanger les fichiers "privés" d'IDE séparés, j'ai des sous-dossiers pour garder le tout un peu clean.

Du coup j'avais dans l'idée de créer un dossier "clproject" dans lequel je placerais mon projet CLion.
Vous avez des conseils sur la bonne méthode pour créer des projets avec des sources existantes ?
 ::unsure::

----------


## vectra

Si c'est un projet CMake, tu ouvres juste le dossier. Visual fait pareil.
De Visual vers CMake, tu as le projet cmake-generator en Python qui fait du bon taf. Il transforme un sln en CMakelist.

----------


## Taro

> Si c'est un projet CMake, tu ouvres juste le dossier. Visual fait pareil.


Non malheureusement je ne pense pas. Je pense que Netbeans fonctionne avec des makefile "à l'ancienne".  ::sad:: 




> De Visual vers CMake, tu as le projet cmake-generator en Python qui fait du bon taf. Il transforme un sln en CMakelist.


Alors ça par contre c'est intéressant. Vu que j'ai déjà les solutions/projets VS de concoctés, si y'a moyen d'en tirer un projet CMake en quelques clics, c'est vendu.
Je vais essayer ça ! Merci pour l'astuce.
 :;):

----------


## Kamikaze

(Je connais pas le cmake-generator, mais voilà comment faire ça par toi même, ou comprendre le résultat du cmake-generator)

Avec CLion tu pourras faire fonctionner ça en 2 minutes. CLion est hautement configurable donc tu pourras aller bien plus loin mais j'te donne une idée de base pour démarrer, en gardant tout comme ça, tu pourras adapter pour faire un truc plus propre.

Tout ce que tu as à faire c'est de placer un CMakeLists.txt dans LapinRenderer. (donc LapinRenderer/CMakeLists.txt)

Ensuite dans ce CMakeLists.txt tu inclus tes sources, j'expliquerai après comment faire ça en relatif si tu tiens vraiment au truc "propre" (mettre les trucs dans un dossier). CLion va aussi créer un .idea a la racine du projet quand tu ouvriras LapinRenderer. Si jamais tu te loupes tu peux simplement tout supprimer et recommencer, le .idea/ n'est absolument pas important, j'explique plus tard.

Voilà un exemple de CMakeLists.txt




> cmake_minimum_required(VERSION 3.19)
> project(test_cpp)
> 
> set(CMAKE_CXX_STANDARD 20)
> 
> find_package(glfw3 REQUIRED)
> find_package(Vulkan REQUIRED)
> 
> add_executable(test_cpp main.cpp)
> ...


Donc ici tout ce que tu as à faire c'est de liste chacun de tes fichiers source à la main (seulement les .cpp, les .h seront choppés naturellement en cascade via les inclusions). CLion offre la complétion dans le CMakeLists.txt donc tu pourras facilement voir les chemins.

Donc dans mon cas je n'ai qu'un seul fichier "main.cpp", mais j'aurais pu faire "src/main.cpp" "../mon_dossier/mon_fichier.cpp" "monfichier2.cpp", faut les mettre à la suite avec un espace ou saut de ligne, etc. etc.

Si tu as vraiment beaucoup de fichiers sources, je recommande quand même de les lister tous explicitement, tu peux faire ça via un simple "ls" ou la commande "dir" en gros sous windows. Donc un script qui te liste tes fichiers et tu choppes la liste et là fout dans le cmake.

Ensuite une fois que tu as fait ça tu pourras browser ton code et bénéficier des fonctionnalités d'analyse de code (statique donc).

Mais tu risques de ne pas pouvoir compiler car on ne s'est pas encore occupé des dépendances. Pour tes dépendances c'est comme avec Visual Studio et Netbeans, pas de surprise. Tu peux linker comme je le fais dans l'exemple ci dessus. Pour chopper tes dépendances le plus propre c'est find_package, mais ça requiert un setup peut-être un peu compliqué, que je décrivais plus tôt dans le topic.

Mais pas de panique! Avec CMake de toute façon tu peux faire exactement tout ce que tu fais avec Make, donc inspire toi de ton Make et ajoute les dépendances par un autre moyen.

Mais honnêtement la grande majorité des dépendances qui se respectent sont trouvables via find_package.

Sinon c'est faisable à la main, exemple:
https://github.com/Kitware/CMake/blo...FindALSA.cmake

Une fois que tu as fait ça tu devrais pouvoir compiler. Et là c'est cool car CLion supporte la toolchains windows, exemple chez moi:



Tu peux aussi jetter un oeil à vcpkg et regarder mon post un peu enervé sur la gestion de dépendance sous windows plus tôt dans le topic.



Cette fenêtre que tu vois c'est dans *File -> Settings*, File -> Settingsc'est là où se trouve TOUT dans CLion, y'a pas besoin de chercher, si tu veux configurer un truc, c'est là.

La documentation Jetbrains est aussi excellente sur leur site, donc n'hésiter pas à simplement cherche "clion comment faire mon truc" sur google et tu devrais vite trouver.

-------------

Une fois que t'arrives à compiler tu pourras t'amuser à rendre ça plus propre, toutes les directives CMake (add executable, etc.) supportent les chemins relatifs et absolus, donc tu pourras te faire ton sous dossier clean si tu le souhaites.

CLion par défaut n'a besoin que d'un CMakeLists.txt, c'est tout, c'est ça qui constitue un projet. Dans le .idea/ sont stockés des préférences genre comment formatter le code pour ce projet (ce qui peut aussi être fait via clang-format alternativement, hautement configurable on vous dit). Donc à vrai dire y'a jamais AUCUN risque à simplement dégager le .idea/. Sachant que CLion t'offres toujours le choix de stocker les préférences à l'échelle de CLion (system wide) ou à l'échelle du projet (.idea/).

Par défaut tu vois que mon dossier de build est cmake-build-debug, mais ça aussi tu peux le configurer dans CLion (regarde mon screenshot: build directory) pour aligner sur ce que tu fais. Ce dossier contiendra le make, mais aussi l'exécutable etc.
C'est l'exact équivalent de faire: mkdir build && cd build && cmake .. && make, en gros

Si t'as des questions hésite pas mais je pense vraiment que ça vaut la peine de tenter de faire tourner ça avec CLion.

- - - Mise à jour - - -

Concernant la compatibilité avec Make, je sais que c'est arrivé récemment, mais je n'ai jamais essayé. Normalement c'est comme le CMakeLists.txt, il faut ouvrir un dossier avec un fichier make viable, mais ouais jamais testé donc je ne sais pas.

EDIT:

Ah oui j'oubliais, le plus simple c'est peut-être de démarrer un nouveau projet sous CLion, par défaut t'auras un hello world, comme ça tu verras à quoi ça ressemble. 
La toolchain windows sera trouvée automatiquement par CLion, tu pourras compiler et tester

----------


## Taro

Wow  ::w00t::  merci Kamikaze ! Tu gères !
J'aurai ptet pas la possibilité de tester ça ce soir mais je vais essayer au plus vite. Ptet ce midi au taf, mais la pause d'1h passe vite.
 ::): 

Effectivement je pourrais partir d'un projet de Hello World et m'inspirer de ce projet + tes instructions très complètes pour arriver à mettre d'aplomb un projet qui analyze, compile, linke, se lance et se débogue via CLion. Ou tenter la méthode auto.
J'ai à peu près zéro doute que ce sera plus confortable que Netbeans une fois que ce sera d'aplomb.

Et puis c'est comme pour mes projets VS et NB, une fois que je me suis fait iech' à configurer une arbo et des projets qui vont avec, ça fait une base réutilisable pour d'autres dépôts plus tard.
 ::): 

S'il suffit d'un cmakelists et c'est tout, ptet pas besoin d'un sous-dossier clproject, faut que j'y réflechisse !
Merci encore !
 :Mellow2:

----------


## Cwningen

Je découvre qu'en C++, on ne peut pas écrire :


```
#include <windows.h>

constexpr HANDLE NullHandle = INVALID_HANDLE_VALUE;
```

ou utiliser INVALID_HANDLE_VALUE comme paramètre de template. Merci Windows et son type HANDLE tout pourri. C'est dur d'aimer la programmation système avec Windows (moi, je n'y arrive pas).

----------


## Kamikaze

Mais ouais§ Cwningen qui vient supporter notre assaut contre l'oppression grosoft

----------


## Cwningen

Tu aimes mettre des -1 dans des pointeurs ?

----------


## Kamikaze

Non  :Emo: 

J'faisais référence au topac https://forum.canardpc.com/threads/9...c-rien-dedans/

Ou je médis (gentiment) microsoft

- - - Mise à jour - - -

Sur linux on a aussi du -1 mais les file descriptor c'est du int au moins pas du pointeur. M'enfin je descend rarement à ce niveau j'utilise une lib crossp de preférence

----------


## Kamikaze

Me rend curieux ton histoire, il font des merdes du genre du coup? Je pige pas leur logique, ça sonne hacky voire plateform dependent?




> #include <iostream>
> 
> int main() {
>     // auto object = 0;
>     auto my_address = 0x123456789fffffff; // 0xffffffffffffffff invalid
>     void* handle = reinterpret_cast<void*>(my_address); // ou genre handle = &object;
> 
>     void* invalid_handle = reinterpret_cast<void*>(-1);
>     std::cout << (int*)invalid_handle << std::endl;
> ...

----------


## Nilsou

En même temps, si c'est de la programmation système ils peuvent se permettre d'être plateforme dépendant  ::P:

----------


## Kamikaze

J'pensais au CPU genre 32bit vs 64

----------


## Cwningen

Je pense pas qu'il y ait de problèmes en C, mais en C++, le compilateur est plus strict sur ce qu'on peut assigner à un pointeur dans les expressions constexpr ou en paramètre non-type de template. INVALID_HANDLE_VALUE (un define pour, en gros, (void *)(intptr_t)-1), n'est ni un pointeur valide, ni une constante (parce que ça contient un reinterpret_cast). HANDLE est censé être un type opaque et on ne doit pas te préoccuper de ce qu'il contient. Mais là ça ressort. Tant pis, je laisse tomber ma programmation générique, je ferais du copier-coller.

----------


## Tramb

Et en même temps merci de ne pas faire des APIs système en C++ hein.

----------


## Nilsou

> J'pensais au CPU genre 32bit vs 64


Je dirais : même réponse, à partir du moment ou tu a deux systèmes distincts pour 32bit vs 64bit, et que tu code pour l'un de ces systèmes, tu peux te permettre de ne pas faire de code compatible avec l'autre.

----------


## Kamikaze

Ouais je pensais à des trucs idiots. Perso quand je pense à void pointer je pense à stocker une adresse, dont la taille dépend de ton système, du coup si tu transmets ça via réseau ou autre si t'as des proc connectés et convertit etc. Je sais pas. Mais bref j'imagine que le post de Cwningen résume bien "censé être un type opaque et on ne doit pas te préoccuper de ce qu'il contient"

----------


## Taro

Des news suite aux conseils de Kamikaze et Vectra  ::): 

J'ai récupéré CMake mais la GUI semble prévue pour permettre de générer des projets Visual Studio à partir d'une config CMakeLists.
Voulant faire l'inverse, j'ai cherché à trouver un tool qui automatise ça.
J'ai chopé un lien sur StackOverflow qui renvoyait vers deux tools, dont un des deux est maintenu, j'ai pas le nom en tête mais ça doit être celui dont parlait Vectra vu que c'était un module Python à récupérer via pip.

Je lui ai fait manger la solution VS2017 de mon projet de tests (qui contient, elle, le projet appli console de test et le projet lib statique à linker) et il m'a sorti le CMakeLists qui a l'air assez complet.
Pas encore zieuté dans les détails, j'ai balancé ça dans un dossier "clproject" comme je le souhaitais et CLion me l'a reconnu comme un projet.
Je l'ai ouvert, il me propose une config Debug de base, je peux lancer le débogage mais il s'est foiré au build, apparemment il n'arrive pas à choper des sources.

Je regarderai plus en détail en rentrant du taf, doit y avoir des chemins à rectifier ou des includes manquants, j'espère que ce sera rapide à corriger  ::): 

Je vous tiens au jus  :;):

----------


## Kamikaze

Je conseille fortement de ne pas utiliser de GUI pour CMake, honnêtement. C'est des fichiers à éditer à la main, c'est fait pour. Enfin rien de grave bien sûr, tu peux utiliser la GUI, mais si ça te prend la tête, pas besoin.

Et ouais, vraiment, essaye le "nouveau projet" avec CLion, ça te fera un Hello World, et tu verras tout sera très clair.

Aussi CLion inclus CMake par défaut

- - - Mise à jour - - -

Files -> Settings -> Build, Execution, Deployment -> Toolchains

Et tu verras dans CMake, y'a un choix "Bundled"


----

Oui et en plus CLion t'offre la complétion quand tu édites le CMake depuis CLion. Je recommande fortement.

----------


## vectra

Oui, malheureusement, le cmake generator, il oublie quelques fichiers source des fois.
Tu les vois dans le fichier principal et il en manque parfois.

Faut pas lui en vouloir; c'est un projet Python à la base  ::trollface:: 
Mais les scripts CMake qu'il contient sont de qualitay en général.


Si tu fais ton projet, autant commencer ton CMake from scratch évidemment.
Mais quand tu dois te démerder avec une solution dont tu hérites sans savoir comment le projet est fait, cmake-generator aide bien.
Autant je me démerde toujours avec CMake, autant les solutions visual me laissent circonspect.

----------


## Nilsou

Après franchement, si c'est un projet avec du Vulkain et cie, sans milliers de fichiers etc. Un simple make fait le job pour ce genre de projet.

Et sinon je rejoint l'avis de Kamikaze : si tu pars sur du Clion, ne modifie que le Cmakelist à la main sans te prendre le chou avec le reste.

----------


## Cwningen

> Je dirais : même réponse, à partir du moment ou tu a deux systèmes distincts pour 32bit vs 64bit, et que tu code pour l'un de ces systèmes, tu peux te permettre de ne pas faire de code compatible avec l'autre.





> Ouais je pensais à des trucs idiots. Perso quand je pense à void pointer je pense à stocker une adresse, dont la taille dépend de ton système, du coup si tu transmets ça via réseau ou autre si t'as des proc connectés et convertit etc. Je sais pas. Mais bref j'imagine que le post de Cwningen résume bien "censé être un type opaque et on ne doit pas te préoccuper de ce qu'il contient"


Non, ce n'est pas un problème de taille, le -1 est bien de la même taille que le pointeur. Et on ne transmet pas un handle sur le réseaux, donc pas de problème de ce coté là non plus. Mon problème c'est que INVALID_HANDLE_VALUE avec ses allures de constante n'est pas une expression constante (dans le sens du C++). Alors qu'en utilisant intptr_t (ou LONG_PTR pour parler en Windows), il n'y aurait aucun problème. Mais à l'époque ou windows.h a été écrit ça paraissait sûrement être une bonne idée d'utiliser void * et -1 (il n'y avait pas de types chiants qui voulaient faire du C++).

----------


## Taro

Re ! Merci pour vos réponses  ::): 

Après enquête, il y a probablement plein de choses "en trop" dans le CMakeLists.txt généré (notamment, les groupes de sources de Visual Studio, avec les accents dedans, genre "Fichiers d'entête", etc).
Rien de grave, mais du superflu que j'essaierai de cleaner pour arriver à mon CMakeLists.txt minimal fonctionnel.
 ::): 

Et ça tombe bien, il sera suivi par Git donc je vais pouvoir y aller étape par étape.  :;): 

Et sinon, il ne manquait qu'une seule chose pour que ça fonctionne : les sous-dossiers du dossier des sources du projet de lib statique.
Section d'include dans le fichier tel qu'il a été généré par le tool Python :


```
################################################################################
# Include directories
################################################################################
target_include_directories(${PROJECT_NAME} PUBLIC
    "${CMAKE_CURRENT_SOURCE_DIR}/../../LapinCore/src"
)
```

Que j'ai donc modifié comme suit :


```
################################################################################
# Include directories
################################################################################
target_include_directories(${PROJECT_NAME} PUBLIC
    "${CMAKE_CURRENT_SOURCE_DIR}/../../LapinCore/src"
    "${CMAKE_CURRENT_SOURCE_DIR}/../../LapinCore/src/io"
    "${CMAKE_CURRENT_SOURCE_DIR}/../../LapinCore/src/maths"
    "${CMAKE_CURRENT_SOURCE_DIR}/../../LapinCore/src/rendering"
    "${CMAKE_CURRENT_SOURCE_DIR}/../../LapinCore/src/utils"
)
```

Et boom, un p'tit clic sur "Run" :


```
F:\Developpement\Repositories\LapinRenderer\bin\x86_64\Debug\MS-Windows\LapinTests.exe
Exercizing 3 suites :
  Exercizing suite 'LrPoint'... PASSED
  Exercizing suite 'LrVector'... PASSED
  Exercizing suite 'LrMatrix'... PASSED

All suites : PASSED

Appuyez sur une touche pour continuer...
```

Et voilààà...
Donc au final : solution du tool retenue, y'avait juste à rajouter quelques entrées de sous-dossiers de sources dans les include. EZ.
 :Cigare: 

Je vais pouvoir utiliser CLion sur le mois qui va s'écouler, pendant la période d'essai, et voir ce que ça donne. Sous Linux comme sous Windows.  :Mellow2: 
Visual Studio  "non Code" me convient très bien, mais Netbeans j'avoue qu'il est un peu austère (même si infiniment mieux qu'Eclipse, en ce qui me concerne).

Ah et sinon, c'est pas un projet Vulkan/OpenGL/whatever, c'est un projet de ray tracer.  ::P:

----------


## Kamikaze

Ah ok je vois c'est le truc classique de certaines API qui te passe un void* et tu convertis selon le contexte, genre le callback dans lequel t'es tu sais quel type tu veux. J'étais à l'ouest. J'ai jamais utilisé windows.h

Mais au final ça reste de l'arithmétique sur des adresses d'une certaine taille non, et INVALID machin c'est juste une adresse spéciale? 

Je suis également pas sûr de piger pourquoi C++ interdit ça puisqu'il me semble que:




> #define INVALID_HANDLE_VALUE ((HANDLE)(LONG_PTR)-1)


est forcément connu à la compilation donc dans la logique de ce que veut être constexpr.

Y'a une explication ici, mais ça me passe au dessus de la tête: https://en.cppreference.com/w/cpp/la...#Type_aliasing




> reinterpret_cast (or equivalent explicit cast) between pointer or  reference types shall not be used to reinterpret object representation  in most cases because of the type aliasing rule.





> This rule enables type-based alias analysis, in which a compiler  assumes that the value read through a glvalue of one type is not  modified by a write to a glvalue of a different type (subject to the  exceptions noted above).
> 
> Note that many C++ compilers relax this rule, as a non-standard language  extension, to allow wrong-type access through the inactive member of a  union (such access is not undefined in C).


Donc bref, ne pourrais tu pas faire tout ton dirty business via un truc propre comme tu disais que t'aurais voulu que ce soit, et tu cast les HANDLE.



```
#include <iostream>
#include <windows.h>

constexpr std::uintptr_t invalid_handle = 0xFFFFFFFFFFFFFFFF; // on se démerde pour avoir ça correct

template<class T>
void dirty_business(T input) {
    std::cout << "haha! " << (void*)input << std::endl;
}

int main() {
    auto object = 0;
    HANDLE test_handle = &object;
    std::cout << test_handle << std::endl;

    if((HANDLE) invalid_handle == INVALID_HANDLE_VALUE) {
        std::cout << "mais oui" << std::endl;
    }

    dirty_business((std::uintptr_t)(test_handle));

    return 0;
}
```

On est bien d'accord que c'est une idée de merde hein, mais bon en continuant comme ça, ça fonctionnerait non?

- - - Mise à jour - - -




> Re ! Merci pour vos réponses


 ::lol::  Bravo, ça tourne!!!

J'espère que t'aimeras CLion, j'aime beaucoup (c'est pas encore parfait mais bon, j'ai pas trouvé mieux).

Si t'as des questions repasse ici

----------


## calixie

Une question ( j'y connais rien au langage informatique ) on peut changer l'ia dans un vieux jeux sur dos ou amiga des années 90, debugger le jeu, rajouté des élements graphiques ?

----------


## Cwningen

Pour être précis, je voulais faire une classe pour avoir un type un peu plus propre pour gérer ce genre de ressource, puis ensuite utiliser le nouveau type avec quelque chose dans le style de unique_ptr.



```
template <typename T, T NullValue>
class nullable_resource
{
    // ...
};

using windows_handle = nullable_resource<HANDLE, INVALID_HANDLE_VALUE>;
using unique_handle = unique_resource<unique_handle, CloseHandle>;

using posix_fd = nullable_resource<int, -1>;
using unique_fd = unique_resource<unique_fd, close>;
```

----------


## ducon

> Une question ( j'y connais rien au langage informatique ) on peut changer l'ia dans un vieux jeux sur dos ou amiga des années 90, debugger le jeu, rajouté des élements graphiques ?


Si on avait le code source, ça serait plus facile (mais pas forcément légal).

----------


## Nilsou

> Non, ce n'est pas un problème de taille, le -1 est bien de la même taille que le pointeur. Et on ne transmet pas un handle sur le réseaux, donc pas de problème de ce coté là non plus. Mon problème c'est que INVALID_HANDLE_VALUE avec ses allures de constante n'est pas une expression constante (dans le sens du C++). Alors qu'en utilisant intptr_t (ou LONG_PTR pour parler en Windows), il n'y aurait aucun problème. Mais à l'époque ou windows.h a été écrit ça paraissait sûrement être une bonne idée d'utiliser void * et -1 (il n'y avait pas de types chiants qui voulaient faire du C++).


Hum, en quoi ce n'est pas une expression constante ? À la compilation on sait parfaitement comment transformer -1 en void* ...
En plus ton post initial laisse entendre qu'il y a un intptr_t quelques part : 




> INVALID_HANDLE_VALUE (un define pour, en gros, (void *)(intptr_t)-1)


En plus reinterpret_cast c'est bien fait à la compilation, donc je vois pas trop le soucis, surtout qu'il est bien précisé dans la doc de reinterpret_cast : 



> 3) A value of any integral or enumeration type can be converted to a pointer type. A pointer converted to an integer of sufficient size and back to the same pointer type is guaranteed to have its original value, otherwise the resulting pointer cannot be dereferenced safely (the round-trip conversion in the opposite direction is not guaranteed; the same pointer may have multiple integer representations) The null pointer constant NULL or integer zero is not guaranteed to yield the null pointer value of the target type; static_cast or implicit conversion should be used for this purpose.


En plus, comment tu peux être certains que c'est bien un reinterpret_cast qui est fait si la syntaxe c'est (void*)-1 ?? Le compilateur appelle les cast dans cet ordre sur les cast de type C : 




> 1) When the C-style cast expression is encountered, the compiler attempts to interpret it as the following cast expressions, in this order:
> a) const_cast<new_type>(expression);
> b) static_cast<new_type>(expression), with extensions: pointer or reference to a derived class is additionally allowed to be cast to pointer or reference to unambiguous base class (and vice versa) even if the base class is inaccessible (that is, this cast ignores the private inheritance specifier). Same applies to casting pointer to member to pointer to member of unambiguous non-virtual base;
> c) static_cast (with extensions) followed by const_cast;
> d) reinterpret_cast<new_type>(expression);
> e) reinterpret_cast followed by const_cast.



*edit :* en fouillant un peu, c'est bel et bien un reinterpret_cast qui est fait et c'est bel et bien un problème connu des constexpr de ne pas manger de reinterpret_cast au motif que « si c'est mal utilisé on peut aboutir à des comportement indéfini »  ::|:  . Donc voila, toutes les conversions d'adresses en autres choses et vice-versa ne semblent pas pouvoir être des constexpr.

Il y a ce genre de méthode pour passer outre : https://arne-mertz.de/2017/06/steppi...y-from-define/
Mais mon dieu que c'est laid ...

On trouve pas mal de demande de devs pour que C++ allège cette contrainte en détectant les cas ou le reinterpret_cast est foireux. Parce que bon, là, faut avouer que c'est un brin ridicule quand même que (void*)-1 ne puisse pas être vu comme constante à la compilation alors que n'importe quel débutant peut écrire la chose en binaire sur papier ...

----------


## Taro

> Bravo, ça tourne!!!
> 
> J'espère que t'aimeras CLion, j'aime beaucoup (c'est pas encore parfait mais bon, j'ai pas trouvé mieux).
> 
> Si t'as des questions repasse ici


Merci  :Mellow2: 

Et deux modifs de plus ! J'ai fetch+rebase (oui, je le rappelle, pull c'est le mal  ::P:  ) sous Linux et j'ai essayé de faire un Run depuis CLion.
Deux trucs à changer, tout d'abord la définition de préprocesseur __WINDOWS_ à virer dans le cas d'un build sous Linux (non bloquant, mais l'appli de test s'en sert pour faire un _system("pause")_ à la fin si on est sous Windows, et j'veux pas que ça le fasse sous Linux), et ensuite des dépendances vers des libs Microsoft à virer également (bloquant, link en échec si je les garde). Même pas sûr que ces dernières soient vraiment nécessaires, en tout cas pour la plupart j'ai un grooos doute. Je tenterai un clean, mais sous Windows du coup, pour tester le link après modifs.

Du coup, j'ai vu un peu plus haut dans le _CMakeLists.txt_, des _if(MSVC)_ avec des trucs derrière, donc j'ai repris cette syntaxe pour distinguer les deux OS pour mes définitions de préprocesseur et de dépendances.

Maintenant que je peux compiler, linker, et faire tourner l'exécutable sous Windows comme sous Linux via CLion (avec Vc++ ou G++ derrière), je peux attaquer le clean du projet pour virer les trucs qui ont l'air inutiles.  ::lol:: 
J'ai vu différentes section de "stub" (genre pour Nuget, jamais utilisé perso) et puis y'a pas mal de trucs qui ont été repris de la solution Visual Studio qui ont l'air inutiles, comme je le disais plus haut.

J'ai l'impression que CLion n'est pas vraiment prévu pour bosser avec des sources en dehors du dossier du projet.
Tel qu'est mon _CMakeLists_, les fichiers sources de "LapinTests" sont listés mais pas ceux de "LapinCore". Et si je les drag'n'drop pour les éditer, c'est possible, après avertissement que je suis hors-projet. Y'a sûrement des choses à faire dans mon projet pour les lister correctement, ça fera partie du boulot à faire après cleaning.

Je vais arriver à voir un truc équivalent au vsproject et au nbproject, j'vous l'dit !  :Cocolol:

----------


## Kamikaze

CLion utilise le CMake pour déterminer si un truc fait partie du projet. Donc si tu ouvres un fichier source qui n'est pas dans le CMake, ou qui est dans le CMake, mais pas vraiment résolvable (mauvais chemin), il sera indiqué comme faisant pas partie du projet. Aussi si tu linkes une library déjà compilé et que tu n'en liste pas les sources, bah ça fait pas partie du projet. C'est logique tu verras, y'a aucune embrouille, faut juste s'habituer un peu au début, mais y'a rien de "caché" c'est très explicite.

Le mieux serait que tu suives cet example:

https://github.com/ttroy50/cmake-exa...ojects/A-basic

Clone le github, ensuite avec CLion tu ouvres le dossier A-basic.

Prends le temps de piger en regardant les cmake un par un et tu seras le roi du pétrole.

Dans ton cas subbinary devrait correspondre à LapinTest et une library jouera le role de Core.

----------


## Taro

Oui ça semble logique  ::): 

C'est pas bien différent d'un projet vscode ou netbeans, si ce n'est que tu définis tout dans un .txt et si t'es pas familier avec la syntaxe ça paraît insurmontable au début.  ::P: 
Là où pour un projet configuré via des menus dans un IDE la syntaxe importe peu, t'as juste à faire le tour des options pour spécifier celles qui t'intéressent.

Mais je dois pouvoir lister mes sources et les inclure, pour qu'il ne couine pas quand je les édite, et surtout qu'il me les affiche dans la vue du projet.
Idéalement avec les sous-dossiers (io, maths, rendering, etc).
 :Bave: 

Je vais m'y faire  :;):  c'est juste le début qui est un peu perturbant.

----------


## vectra

> Une question ( j'y connais rien au langage informatique ) on peut changer l'ia dans un vieux jeux sur dos ou amiga des années 90, debugger le jeu, rajouté des élements graphiques ?


Le code source de la grosse majorité des jeux Amiga qui pèsent, c'est de l'assembleur.
68000 parfois, mais aussi spécifiques aux chips sonores et surtout graphiques.
Dans de rares cas, des jeux en C ou en Blitz Basic.

Donc, la réponse est 'non'.

Rares exceptions, si tu trouves des fichiers .mod ou .iff sur la disquette du jeu, tu serais en position de modifier les musiques ou les éléments graphiques. Mais en général ce sont les jeux perraves qui sont comme ça; les jeux optimisés sont à la fois compressés, packagés et protégés contre la copie. D'autant que les chipsets réels ou émulés sont toujours aussi limités, donc ne pas espérer faire de miracles.

- - - Mise à jour - - -




> Oui ça semble logique 
> 
> C'est pas bien différent d'un projet vscode ou netbeans, si ce n'est que tu définis tout dans un .txt et si t'es pas familier avec la syntaxe ça paraît insurmontable au début. 
> Là où pour un projet configuré via des menus dans un IDE la syntaxe importe peu, t'as juste à faire le tour des options pour spécifier celles qui t'intéressent.
> 
> Mais je dois pouvoir lister mes sources et les inclure, pour qu'il ne couine pas quand je les édite, et surtout qu'il me les affiche dans la vue du projet.
> Idéalement avec les sous-dossiers (io, maths, rendering, etc).
> 
> 
> Je vais m'y faire  c'est juste le début qui est un peu perturbant.


Ton projet, c'est simplement un dépôt git avec un CMakelist à la racine.
Tu peux avoir des sources qui ne sont pas traitées par le CMake, elles apparaitront quand-même dans l'arborescence que tu définis comme tu veux.
Idéalement, un CMakelist par répertoire et un add_subdirectory(monrep) qui est fait à partir du CMake du dessus et c'est marre.

Un tel projet sera maintenant reconnu et avalé par Visual, c'est tout.
Même QT s'est mis à CMake.

Très franchement, je ne supporte pas l'idée d'avoir un fichier projet qui soit géré en interne par un IDE. Le CMake que tu fais pour CLion, il passe en ligne de commande sous Unix sans aucun souci.
Je viens de faire de même sous Windows, dans le but de passer le truc en CICD: c'est un peu plus délicat et tricky mais ça passe également. 
Un projet ne doit pas être lié à un IDE, il doit exister par lui-même. Que l'IDE aide à le définir, OK.

----------


## Tramb

> Très franchement, je ne supporte pas l'idée d'avoir un fichier projet qui soit géré en interne par un IDE. Le CMake que tu fais pour CLion, il passe en ligne de commande sous Unix sans aucun souci.
> Je viens de faire de même sous Windows, dans le but de passer le truc en CICD: c'est un peu plus délicat et tricky mais ça passe également. 
> Un projet ne doit pas être lié à un IDE, il doit exister par lui-même. Que l'IDE aide à le définir, OK.


Oui.

----------


## rOut

Perso je suis pour les conventions qui définissent la structure du projet en fonction de l'organisation de ses fichiers. Rust fait ça pas mal mais malheureusement cargo est quand même passé par là. Les systèmes de builds sont tous plus pourris les uns que les autres et franchement ça serait pas mal de s'en soustraire, et ça aiderait aussi grandement l'intégration.

Raz le cul des trucs "modernes" comme Meson qui régressent complètement en fonctionnalités et ne supportent par exemple que Ninja pour l’exécution du build. Tous les projets open-source précédemment sous autotools migrent vers cette merde. Oui autotools c'est pourri, mais au moins ça s'intègre correctement.

----------


## gros_bidule

Faut tout passer sous Gradle  ::ninja:: 
En vrai, Gradle gère plutôt bien le C/C++, très bien le web frontend avec JS/TS et trucs utilisant gulp/webpack/angular/vue etc, y'a pas que les langages basés sur la JVM. Il existe même des plugins pour Rust, mais je ne sais pas encore ce qu'ils valent.
Et si c'est l'install Gradle (et donc d'une JVM ou JDK) qui vous fait peur, ça se fait en deux lignes de commande avec brew ou sdkman. Y'a même des paquets au moins pour debian et arch. Sous Windows + IntelliJ y'a rien à installer : il contient déjà un Gradle, et il (IJ ou Gradle si récent) permet de télécharger tout seul un JDK.
En tous les cas ça vaut le coup de zieuter ça. Les sources du site de la conf MiXiT sont un bon exemple d'intégration backend Java + fontend JS, tout (dont Gulp) géré par Gradle : https://github.com/mixitconf/mixit

----------


## rOut

Non mais en vrai c'est tout autant de la merde. C'est le genre de truc qui ne marche bien que si tout le monde utilise le même système de build. Quand tu intègres des projets hétérogènes c'est vachement plus sympa si les trucs fonctionnent ensemble sans avoir à réécrire les règles pour les recompiler.

Et ensuite, si tu as un dénominateur commun pas trop mal foutu, disons Make par exemple, tu peux gérer proprement l'ordonnancement et le parallélisme de la compilation et gagner énormément de temps. Mais quand au milieux tu as des projets trop malins™ qui préfèrent se limiter à des outils modernes™, genre Ninja, et qui ne sont même pas foutus de s'ordonnancer entre eux, bah tu te retrouves à devoir sérialiser la compilation des différents composants, quitte à flinguer un gros potentiel d'optimisation, pour ne pas exploser ta machine de build quand tous les ninjas vont se dire que c'est une super idée de démarrer chacun #CPU process pour compiler du C++.

----------


## Taro

De retour pour des news  ::): 

J'ai fait encore du cleaning additionnel dans les configs pour mon projet version CMake.
Je comprenais pas pourquoi la bibliothèque statique sortait bien dans ma hiérarchie bin/x86_64/<conf>/<os>/, et pas l'exécutable qui lui sortait dans un dossier bin/ à partir du dossier clpoject/ du projet. Tout en ayant un link qui se passait bien.
 ::wacko:: 

Bref, j'ai identifié que ça venait de la masse de trucs un peu obscurs qu'il y avait dans le dossier CMake/ créé par le tool python.
J'ai viré les références à ces fichiers-là, ça m'a sorti quelques erreurs mais au final ces lignes n'étaient pas indispensables donc je les ai virées dans la foulée.

Magie, j'arrive à choisir mon dossier de sortie pour les binaires  ::lol:: . Bon j'ai découvert après m'être arraché quelques cheveux qu'il s'agit de ARCHIVE_OUTPUT_DIRECTORY et non LIBRARY_OUTPUT_DIRECTORY quand on sort une bibliothèque statique.

Bref ça y est c'est bon, j'ai viré la grosse majorité de la config, il reste à priori uniquement le strict nécessaire, ça compile, ça linke et ça tourne via CLion/VC++ sous Windows, je file pousser mes modifs pour tester dans la foulée que je peux faire la même chose sous Linux (compiler, linker, tourner, sans modifs additionnelles en théorie !).
 :Halmet:

----------


## Taro

C'est validé : ça fonctionne impecc avec CLion/G++ sur ma petite OpenSUSE. Nickel !  :Cigare: 
Il me reste donc à continuer de coder sur le projet et, tout naturellement, je vais me familiariser avec ce nouvel IDE.

Vous savez s'ils font des promos de temps en temps sur leurs licences ? 89€, ça reste acceptable, mais si y'a moyen de toper ça pour moins, je ne cracherai pas dessus.  ::P:

----------


## vectra

Dans un an ça sera moins cher  ::trollface:: 
Ou tu déclares une adresse à Jersey  ::siffle::

----------


## gros_bidule

Tu t’inscris pour visionner des meetups type Java User Group, Php User Group, bref des Machin User Group. Il  ya souvent des licences JetBrains à gagner. Et vu qu'il n'y a généralement que peu de spectateurs (j'aurais cru l'inverse avec le côté online depuis la pandémie ^^ mais les JUG n'ont jamais été aussi désertés, triste), tu as plus de chances d'être le grand gagnant de la loterie.
En plus tu apprends des choses.

----------


## Kamikaze

Yo les canards y'en a parmi vous qui touche du Mongo? Vous utilisez quel client?

Ma boite me paye Studio 3T mais je trouve pas l'outil plus fantasse que ça. La seule fonctionnalité cool c'est la comparaison de base de données, qu'on peut sûrement programmer soi même mais bon, pour un truc quick & dirty c'est ok.

Je me cherche quelque chose de mieux, avec de meilleures visualisations des données, une interface plus modulaire, etc.

----------


## Getz

Hello, on utilise pas mal Mongodb ici, et on a la version gratuite de Studio3T, robo3T.
Autant te dire que tu as déjà de la chance d'avoir la version payante   ::P: 

Pour la visualisation des données, peut-être que le client officiel te donnera plus d'infos selon ce que tu souhaites faire (mais c'est pas la panacée): https://www.mongodb.com/products/compass

Mais sinon c'est un peu le vide niveau GUI, je n'ai jamais trouvé un client vraiment satisfaisant honnêtement...

----------


## Kamikaze

Ok je vois. Je trouve les interfaces vraiment vieillottes ouais. Une couche graphique un peu pauvre qui ne fait que masquer quelques appels en ligne de commande.

J'ai l'impression que y'a tellement peu de concurrences que ces produits dominent et font de l'argent facile sur les allergiques de la ligne de commande

----------


## gros_bidule

Yeah, mongo c'est un peu comme kafka, les bons clients - même payants - se font hélas rare.
D'ailleurs pour Kafka on m'a conseillé _Offset Explorer 2_. Pas transcendant, un peu relou mais fait le taff (et gère bien les params de connexion, c'est très complet à ce niveau), mais je peine à trouver plus agréable ou aussi léger (y'a des GUI type serveur web avec un dockerfile... ouch, ou des trucs de plusieurs Go, merci bien). Vous auriez une bonne adresse pour manger du kafka ?

[edit] Pour MongoDB, JetBrains a intégré le support Mongo dans son client de bases de données. Donc plugin IntelliJ Ultimate (déjà intégré), sinon DataGrip. Je ne sais pas ce qu'il vaut, pas touché à mongo depuis.

----------


## Teocali

Bon, les gens, questions Spring Boot, et plus particulièrement Spring Rest. Description (simplifiée) du problème :  

J'ai une méthode de mon API pour créer des profil utilisateurs au sein d'un client. l'Id (business, pas technique) du profil est fourni par le client. Chaque création se fait au sein d'une transaction, oeuf corse

Bien entendu, chaque profil utilisateur doit avoir un id différent. J'ai donc une contrainte DB, ainsi une petite vérification au début de ma méthode qui renvoie benoitement une 409 en cas de conflit. Sauf que.

un utilisateur de mon api fait de la merde (normal, vous me direz, c'est a ça qu'ils servent) et m'envoie coup sur coup deux fois la même requête de création. Les deux transactions démarrent quasiment immédiatement.

Ce qui fait que ça merde à la clôture de la seconde transaction, avec une erreur de contrainte au niveau de la business key, et ça me balance une exception bien merdique en erreur 500, au lieu de ma 409 toute propre.

D'ou ma question : 

Connaitriez-vous un moyen simple de "locker" une transaction ou un appel Spring Rest en fonction des paramètres de la fonction appelante (ici, le business id). 

Je pourrais faire un lock niveau BdD sur l'objet client, mais ça m'emmerde un peu, parce que ça serait pas très propre et que parce ça bloquerait toutes les modifications du client.

----------


## gros_bidule

Tu peux gérer les créations de profils dans une file ?
Le endpoint de créa de profil attend que sa demande sorte de la file pour donner une réponse.
Voir si Spring propose des trucs déjà intégrés pour gérer ça. Voir aussi si ton API est hébergée sur un seul serveur, ou plusieurs. Si un seul, et si ça ne changera jamais (mauvais pari, mais bon...), tu mets un synchronized ou équivalent (de mémoire ton endpoint rest c'est un singleton donc un synchronized devrait aller) là où il faut et vala, les saves seront séquentiels.

----------


## Kamikaze

Ah intéressant bidule, je vais tester l'option jetbrains!

----------


## Teocali

> Tu peux gérer les créations de profils dans une file ?
> Le endpoint de créa de profil attend que sa demande sorte de la file pour donner une réponse.
> Voir si Spring propose des trucs déjà intégrés pour gérer ça. Voir aussi si ton API est hébergée sur un seul serveur, ou plusieurs. Si un seul, et si ça ne changera jamais (mauvais pari, mais bon...), tu mets un synchronized ou équivalent (de mémoire ton endpoint rest c'est un singleton donc un synchronized devrait aller) là où il faut et vala, les saves seront séquentiels.


Le problème de la file, c'est que ça reste complètement séquentiel. En gros, si deux utilisateurs veulent créer deux profile qui ne rentre pas en conflit, leurs demandes s'effectueront de manière séquentielle. Pas glop, et à ce niveau, autant lock le client au niveau DB, ça sera plus simple.

Synchronized, j'y ai pensé, le souci, c'est qu'il porte sur une instance, pas une valeur. Donc pas possible de synchroniser sur la valeur du paramètres, comme je le souhaitais. Après, y'a la librairie XSync qui gère ça, c'est p'têt une solution

j'ai p'têt moyen de me démerder avec une collection "Thread safe", soit en passant par les coroutines Kotlin, soit via un singleton dédié, mais bon, a ce niveau, beaucoup de boulot pour un ROI faible, autant locker le client et corriger le souci quand ça deviendra un problème.

L'idée, c'était surtout de voir si des gens avaient déjà rencontré ce souci dans une app Spring, et si y'avait une solution "toute faite".

----------


## Shinosha

> Le problème de la file, c'est que ça reste complètement séquentiel. En gros, si deux utilisateurs veulent créer deux profile qui ne rentre pas en conflit, leurs demandes s'effectueront de manière séquentielle. Pas glop, et à ce niveau, autant lock le client au niveau DB, ça sera plus simple.
> 
> Synchronized, j'y ai pensé, le souci, c'est qu'il porte sur une instance, pas une valeur. Donc pas possible de synchroniser sur la valeur du paramètres, comme je le souhaitais. Après, y'a la librairie XSync qui gère ça, c'est p'têt une solution
> 
> j'ai p'têt moyen de me démerder avec une collection "Thread safe", soit en passant par les coroutines Kotlin, soit via un singleton dédié, mais bon, a ce niveau, beaucoup de boulot pour un ROI faible, autant locker le client et corriger le souci quand ça deviendra un problème.
> 
> L'idée, c'était surtout de voir si des gens avaient déjà rencontré ce souci dans une app Spring, et si y'avait une solution "toute faite".


Pour moi c'est un cas aux limites, pas la peine de te prendre la tête avec ça, sauf si ça gêne vraiment le métier. Si c'est la 500 qui te gêne il y a sûrement moyen de distinguer l'exception produite par la DB et de recover avec un 409 non ? Si le double send vient d'un front, ce serait plus simple de gérer ça niveau front.

----------


## vectra

Coucou les gens,


J'aurais besoin d'un coup de main sur Gitlab!
J'utilise le Trigger pour, en gros, cloner et compiler un sous-projet 'api_common' qui est une dépendance de mon projet actuel.

Je fais ça deux fois, car j'ai deux projets 'project_1' et 'project_2' qui ont besoin de l'api.

Chaque fois que je push dans master sur projet_1 ou projet_2, le gitlab-ci s'active, va cloner localement l'api_common, la builder, puis builder le projet. Ca marche nickel.

Sauf que, ce que je voudrais maintenant, c'est forcer une update des pipelines de projet 1&2 chaque fois que je fais un push dans 'api_common'.

On a essayé de gérer les 'project subscriptions' du projet 1 & 2 pour y ajouter l'apo_common, mais ça n'a pas été possible (les dépôts ne sont pas publics).
Je voulais savoir si quelqu'un avait une idée pour mon cas, ou de manière générale pouvait m'éclairer sur les bonnes pratiques qui sont d'usage dans ce cas là. J'ai vu passer les webhooks aussi, mais pas sûr que ce soit ce qu'il me faut  ::unsure::

----------


## Patate

Un projet bidon qui déclencherait le build des 3 autres en le modifiant, genre note de version.

----------


## Orhin

Ben en fait plus qu'un projet bidon faudrait surtout une gestion propre des dépendances.
Ton projet *api_common* devrait être versionné, et tes *project_1* et *project_2* devraient déclarer explicitement la version qu'ils utilisent (soit en allant chercher le bon tag sur git si rebuild de *api_common* au sein des projets, soit en allant chercher sur un dépôt quelconque).
Du coup quand tu augmenteras le numéro de version utilisé, ben ça rebuildera les projets.

Sinon ça va être le bordel quand tu vas faire des breaking changes dans *api_common* et que tu veux pas tout casser ou que t'as le temps de migrer qu'un des 2 projets.

Bon ça répond pas vraiment à ta question par contre.  ::ninja::

----------


## vectra

L'api évolue très peu, ce ne sont que des correctifs mineurs, mineurs.
Par contre elle est très utilisée. Et je développe deux programmes qui l'utilisent, et qui sont chacun sollicités par plusieurs testeurs. Les testeurs ne veulent pas aller ailleurs que sur la page du projet dont ils ont la charge, donc exit ta solution, ami Patate  ::cry:: 

L'idée, c'était que lorsque le mainteneur de l'api fait une modif, les pipe-line CICD de mes deux programmes sont automatiquement relancés pour générer un nouvel exécutable (et surtout une dll à jour). L'idée est surtout que les testeurs n'aient pas à se prendre la tête, notamment vérifier si le build CICD de leur programme est postérieur ou non au dernier commit/ dernier build de l'api, dont ils n'ont cure.

Là, chaque fois que je regénère l'un des projets, il a l'api à jour avec le trigger (clone en local + compile). Mais si toto fait bouger l'api, il tient vraiment à ce que les serveurs soient MAJ de suite.

----------


## gros_bidule

Un trigger ou webhook apparemment ça irait : https://stackoverflow.com/a/42841567/4856922
Du coup c'est ton projet api_common qui déclenche les builds sur les projets clients, il doit donc les connaitre (et tu devras générer un token sur chaque projet client), mais si tu n'en a que deux ça va. Deux cent ça serait plus chiant ^^.

----------


## zifox

J'ai une question pour les pros de cmake.

Je veux créer, pour certains fichiers qui sont dans un repertoire (extension toto), une version zippée (extension titi) qui est ensuite prise en charge si je fais un "install". L'idée c'est lister les fichiers sources, créer les zip dans un sous rep du répertoire de build, et ajouter ces fichiers à la target pour qu'il soient pris en charge lors de l'install. (je précise que myZip n'est pas un truc compilé dans mon projet, c'est un exe banal du système, qui prends en argument la destination et la source)

J'ai un truc qui fonctionne en utilisant add_custom_command, mais pour une raison inexpliquée, la commande est tout le temps executée pour tous les fichiers, même quand les fichiers de départ ne changent pas.

Voici le code:



```
set(zipped_files)
file(GLOB_RECURSE srcFileList CONFIGURE_DEPENDS *.toto)
foreach(srcFile ${srcFileList})
    string(REGEX REPLACE "${CMAKE_CURRENT_SOURCE_DIR}/(.*)\.toto" "${BUILD_DIR}/\\1\.titi" zipFile ${srcFile})
    add_custom_command(
            OUTPUT ${zipFile}
            COMMAND myzip ARGS ${zipFile} ${srcFile}
            DEPENDS ${srcFile}
        )

    set(zipped_files ${zipped_files} ${zipFile})
endforeach()


add_custom_target(ZipProj SOURCES ${zipped_files})
```

Y'a t il un truc que je fais mal ? Est ce voué à l'échec parce que les custom targets sont des fichiers générés ?

----------


## vectra

Il manque TARGET ${EXE_NAME}
C'est ce qui va lier le déclenchement du truc à la réalisation de l'exe en question.

----------


## zifox

> Il manque TARGET ${EXE_NAME}
> C'est ce qui va lier le déclenchement du truc à la réalisation de l'exe en question.


J'ai pas d'exe. C'est un répertoire avec des fichierse à zippé pour mettre dans une install.

----------


## Mr Slurp

> J
> 
> 
> 
> ```
> set(zipped_files)
> file(GLOB_RECURSE srcFileList CONFIGURE_DEPENDS *.toto)
> foreach(srcFile ${srcFileList})
>     string(REGEX REPLACE "${CMAKE_CURRENT_SOURCE_DIR}/(.*)\.toto" "${BUILD_DIR}/\\1\.titi" zipFile ${srcFile})
> ...


Normalement, ça devrait marcher avec ça.


```
add_custom_target(ZipProj DEPENDS ${zipFile})
```

----------


## zifox

> Normalement, ça devrait marcher avec ça.
> 
> 
> ```
> add_custom_target(ZipProj DEPENDS ${zipFile})
> ```


C'est pareil en pire: les fichiers zippés sont plus copiés à l'install.
Ca m'étonnait d'ailleurs que ça puisse être ça: normalement toute SOURCE est forcément une dépendance non ?

edit: j'ai trouvé le problème. Forcément, c'était pas ce bout de code qui était en cause, mais un truc en amont qui purgeait les fichiers générés par erreur.  :Facepalm: 

Merci à vous !

----------


## ducon



----------


## acdctabs

Base case c'est cas d'arrêt ?

----------


## Shosuro Phil

Cas de base, cas d'arrêt, cas terminal: c'est la même chose, un cas qui ne provoque pas d'appel récursif. En espérant que tous les autres cas ne mènent, ultimement, qu'à des cas de base.

----------


## acdctabs

Oui c'est la traduction que je ne connaissais pas ^^

Quand j'ai appris à faire du récursif (c'était du Scheme en 99) on m'a appris à d'abord écrire le cas d'arrêt avant de faire la récursive. C'était un bon conseil.

----------


## Shosuro Phil

C'est un bon conseil pour ne pas l'oublier, mais ça ne suffit pas forcément. La bonne pratique, c'est de toujours se poser la question de pourquoi le calcul termine toujours, mais ça peut mener loin...

----------


## Lazyjoe

> C'est un bon conseil pour ne pas l'oublier, mais ça ne suffit pas forcément. La bonne pratique, c'est de toujours se poser la question de pourquoi le calcul termine toujours, mais ça peut mener loin...


C'est un coup à finir par vouloir prouver ses récursions en Coq, ça !  ::P:

----------


## vectra

Ouais heu, la récursion, c'est d'abord le base case. Sinon ça s'appelle de la merde.

Sinon, des gens connaissent Meson Build/ comme alternative à CMake?

Au début, j'avais surtout envie de sortir les fourches parce que ça repose sur Python et que ça crée inutilement un autre standard sans pour autant révolutionner le game  :Cell: 
Ca me faisait vraiment chier par rapport à CMake qui me semblait à la base du fonctionnement de CLion.

Bon puis finalement, j'ai trouvé un post de blog Jetbrains qui détaille bien comment bosser en CLion avec un projet Meson, donc là c'est juste 'meh'.
C'est vrai que c'est plus simple. Mais de là à éluder le standard du marché juste parce qu'on n'a pas envie de bosser son CMakelists.txt, c'est un peu léger comme argumentaire. Je viens chercher des avis plus matures.

----------


## Sahnvour

Y'a pas de fierté à avoir à se péter les dents sur toutes les bizarreries de CMake juste pour prouver qu'on est un bonhomme, ni à l'imposer à des gens parce qu'on en a chié à l'utiliser, tout le monde a le droit à une vie meilleure.  ::ninja:: 
Oui les standards tout ça, mais c'est aussi une bonne chose d'avoir différentes options pour faire du logiciel (qui n'est pas un marché).

J'utilise Meson et je trouve ça pas mal, même si c'est pas parfait. Les fonctionnalités intéressantes pour moi sont évidemment le script beaucoup moins prise de tête, et les subprojects qui permettent nativement de bien découper ses projets dans des dépôts séparés et offrent une gestion à peu près automatisée (oubliez les git submodules). Il est capable d'interagir avec des projets/dépendances CMake dans une certaine mesure aussi.
Par contre pour l'intégration avec des package managers, c'est pas encore ça. Il a wrapdb qui est censé remplir ce rôle mais c'est pas à jour ni à la hauteur, et faut bidouiller un peu pour utiliser conan par exemple.

----------


## vectra

Je suis pas sûr de comprendre la différence avec les sous-projets CMake. D'ailleurs ma team me l'a vendu comme étant pareil (mais vite fait).

----------


## Nattefrost

Quid du simple script shell ?  ::ninja::  
Pas assez "cadré" et comme dirait Larry Wall TMTOWTDI  - ce qui peut poser des problèmes de maintenabilité dans le temps ?

----------


## Shosuro Phil

> C'est un coup à finir par vouloir prouver ses récursions en Coq, ça !


Ce serait une démarche saine, mais que je me vois dans l'obligation de déconseiller dans la plupart des cas... 

(Pour rappel, Coq n'accepte pas la définition d'une fonction de tri rapide: il n'arrive pas à voir tout seul pourquoi ça termine, il faut le lui prouve. Heureusement, c'est pas _trop_ difficile)

----------


## Whiskey

Hello

J'ai un petit problème en C# et particulièrement avec l'IDE Rider, voici ma configuration :

- .net core installé : 3.1 et 5.0
- .net framework : 4.8

Je n'ai aucun soucis de compilation que cela soit console ou WPF et quel que soit le sdk. Rider est configurer de base comme il viens, pas de plugin particulier.

Je m'intéresse à Monogame (https://www.monogame.net/) et j'ai essayer de m'y plonger avec Rider, pour ce faire, j'ai installer Monogame avec la commande :



```
dotnet new --install MonoGame.Templates.CSharp
```

Cela a marcher, j'ai bien les templates qui se sont rajouter dans dotnet et également sur Rider.

Dans Rider je lance le template Monogame pour DirectX. (J'ai également tester avec OpenGL). Et Rider (ou dotnet) me génère un tas de fichier pour le projet et a la fin, m'affiche un message d'avertissement :




> 15:50	Project 'CPCMonogameTest' load finished with warnings: [MSB3073] La commande "dotnet C:\Users\Whiskey\.nuget\packages\monogame.content.  builder.task\3.8.0.1641\build\\..\tools\netcoreapp  3.1\any\mgcb.dll /quiet /@:"F:\Dev\dotnet\CPCMonogameTest\CPCMonogameTest\C  ontent\Content.mgcb" /platform:Windows /outputDir:"F:/Dev/dotnet/CPCMonogameTest/CPCMonogameTest/Content/bin/Windows/Content" /intermediateDir:"F:/Dev/dotnet/CPCMonogameTest/CPCMonogameTest/Content/obj/Windows/Content" /workingDir:"F:/Dev/dotnet/CPCMonogameTest/CPCMonogameTest/Content/"" s'est arrêtée avec le code 1. at (138:5)


Effectivement Rider me souligne aussi plein de truc dans le code généré, même les using...


J'ai un peu de mal a comprendre l'erreur/avertissement, je précise que le projet est censé utilisé le sdk 3.1 qui est installé  ::cry::  

Quelqu'un a t-il une idée ? Merci d'avance.

----------


## vectra

De ce que j'ai vu de Rider, il ne prend pas de libertés par rapport à Visual Studio. Au vu de ma modeste expérience.
Tu pourrais DL Visual pour vérifier que c'est un problème spécifique à l'IDE ou pas?

----------


## Whiskey

> De ce que j'ai vu de Rider, il ne prend pas de libertés par rapport à Visual Studio. Au vu de ma modeste expérience.
> Tu pourrais DL Visual pour vérifier que c'est un problème spécifique à l'IDE ou pas?


Je vais voir.

EDIT

Bon tester avec VS2019 j'ai la meme erreur :/ Un soucis peut etre avec le template pourtant officiel  ::(:

----------


## Dross

Essaye donc de compiler/publier avec le CLI https://docs.monogame.net/articles/packaging_games.html voir si c'est un soucis de l'IDE ou pas.

----------


## Whiskey

> Essaye donc de compiler/publier avec le CLI https://docs.monogame.net/articles/packaging_games.html voir si c'est un soucis de l'IDE ou pas.


Non cela ne passe pas meme erreur en ligne de commande. Donc je dois conclure que l'ide ni est pour rien. Au moins j'avance  ::P: 

Est ce le fait que net5.0 soit installé en plus du 3.1  qui peut poser problème ?

Sur le message d'erreur à la place de Whiskey il y a mon prénom et mon nom (ce qui figure sur mon compte de session). Ce que je veux dire c'est que ca contient un espace, ca peut jouer sur l'erreur ?

-----------

Bon problème résolu ca marche sur Rider. Le soucis etait bien l'espace.... J'ai changer le chemin du reposity de nuget via la variable d'environnement NUGET_PACKAGES et cela marche parfaitement.



Comment péter un plombs avec un truc totalement idiot  ::(:  Merci en tout cas  ::P:

----------


## Dross

A oui j'ai déjà eu des soucis à la con avec les chemins, depuis je fais gaffe aussi.

----------


## Ewestyr

Hello les canards,

Je viens trainer par ici au bout de 2 jours à me galérer pour mettre en place une appli React.

Un peu de contexte:
- Je n'y connais RIEN en React. J'ai quelques bases de code (HTML, Python) qui me permettent à peu près de comprendre et me débrouiller la plupart du temps.
- A la base, je cherche une solution pour déployer un site Web à partir de ma page Notion, de façon un peu plus propre et surtout plus rapide que juste en partageant mon lien Notion. L'idée est d'en faire un blog, et pouvoir ajouter du CSS personnalisé + améliorer le SEO.
- J'ai déjà expérimenté le truc sous Potion.so mais je veux un truc plus artisanal et qui me coûtera au passage moins cher.

Partant de ça, j'ai trouvé une solution sur Github :
https://github.com/transitive-bullsh...on-starter-kit

Sur le papier c'est top et ça fait exactement ce que je veux. Sauf que je galère à le déployer même en local, à cause d'une erreur détaillée par quelqu'un d'autre ici, liée à une dépendance :
https://github.com/transitive-bullsh...kit/issues/122

Une solution a été proposée en PR ici :
https://github.com/transitive-bullsh...tweets/pull/34

Et c'est là que ça coince, je ne sais absolument pas comment faire pour mettre en place ce correctif. J'ai essayé de regarder des tutos et autres pour voir comment tout ça fonctionnait, mais ça dépasse clairement ma compréhension ici.

Quelqu'un saurait m'aiguiller ?

Merci

----------


## Kamikaze

Yo, je vais peut-être travailler sur du C#, ça fait un moment que je n'y ai pas touché (2014/2015). Vous recommandez des ressources en particulier? J'aimerais un truc qui liste toutes les releases et toutes les nouveautés jusqu'à aujourd'hui. 

Je vais démarrer avec ça: https://docs.microsoft.com/en-us/dot...ersion-history

ça a l'air pas mal, mais c'est exhaustif et j'aime bien les trucs plus orientés pratiques, qui soulignent ce que tu utilises vraiment tous les jours.

Et si vous avez un avis sur le C# moderne, ou un truc qui vous passe par la tête n'hésitez pas.

Je vais aussi checker Rider vs. Visual Studio + Resharper

----------


## Kamasa

> Hello les canards,
> 
> Je viens trainer par ici au bout de 2 jours à me galérer pour mettre en place une appli React.
> 
> Un peu de contexte:
> - Je n'y connais RIEN en React. J'ai quelques bases de code (HTML, Python) qui me permettent à peu près de comprendre et me débrouiller la plupart du temps.
> - A la base, je cherche une solution pour déployer un site Web à partir de ma page Notion, de façon un peu plus propre et surtout plus rapide que juste en partageant mon lien Notion. L'idée est d'en faire un blog, et pouvoir ajouter du CSS personnalisé + améliorer le SEO.
> - J'ai déjà expérimenté le truc sous Potion.so mais je veux un truc plus artisanal et qui me coûtera au passage moins cher.
> 
> ...


Utiliser le workaround du 2ème lien ne fait pas l'affaire ? Si le downgrade de la version de la librairie résout le soucis, c'est juste 2 lignes dans ton fichier package.json.

----------


## Dross

> Yo, je vais peut-être travailler sur du C#, ça fait un moment que je n'y ai pas touché (2014/2015). Vous recommandez des ressources en particulier? J'aimerais un truc qui liste toutes les releases et toutes les nouveautés jusqu'à aujourd'hui. 
> 
> Je vais démarrer avec ça: https://docs.microsoft.com/en-us/dot...ersion-history
> 
> ça a l'air pas mal, mais c'est exhaustif et j'aime bien les trucs plus orientés pratiques, qui soulignent ce que tu utilises vraiment tous les jours.
> 
> Et si vous avez un avis sur le C# moderne, ou un truc qui vous passe par la tête n'hésitez pas.
> 
> Je vais aussi checker Rider vs. Visual Studio + Resharper


J'ai les mains dedans depuis 2012, l'écosystème a énormément progressé. 

Ce qui a changé depuis 2014-2015 : .NET Core et ses copains (ASP.NET Core qui a mergé ASP.NET MVC et API et les aberrations qui existait entre les deux, multiplate-forme, etc) qui est resté en parallèle du .NET Framework (l'originel) pendant quelques années, avec des ponts entre les deux (.NET Standard) et qui viens tout juste d'être réunifié au travers de .NET 5. 

Je te conseillerai de regarder un peu les notions derrière tout ce petit monde, même si fondamentalement rien n'a été révolutionné, juste une longue évolution, profonde et réelle.

Tu peux aussi aller voir les ajouts dans C# des nouvelles versions, il y a énormément de sucre syntaxique qui rends le langage très agréable, mais si t'en faisait en 2015 tu sera pas dépaysé.

Globalement WPF est le parent pauvre de tout ça, ça n'a pas vraiment évolué, et s'il a été rajouté à .NET 5 c'est vraiment juste pour que la réunification soit totale, mais on sent que c'est le grand père dont on ne sait plus trop quoi faire.

----------


## Robix66

> Globalement WPF est le parent pauvre de tout ça, ça n'a pas vraiment évolué, et s'il a été rajouté à .NET 5 c'est vraiment juste pour que la réunification soit totale, mais on sent que c'est le grand père dont on ne sait plus trop quoi faire.


Ca bouge un peu quand même, même si du coup c'est un peu le bordel avec les différents dialectes de XAML et qu'ils vont pousser vers WinUI3 et MAUI. Ils ont même ajouté ARM64 pour WPF en .Net 5.

Sinon dans les ajouts récents, il y a les types reference nullables : https://docs.microsoft.com/en-us/dot...eference-types

----------


## Taro

Ah mince, le WPF n'a pas évolué ? Pour moi le grand-papi dans la famille C# c'était WinForms.  :^_^: 

Mais faut dire aussi que j'ai fait assez peu de C#, surtout avec du graphique derrière, ces dernières années.
D'une manière générale j'ai fait très peu de C# tout court hors quelques scènes de prototypage sur Unity3D en fait.

----------


## Dross

A non mais WinForm c'était déjà dépassé il y a 10 ans, ressortez pas les zombies !

Pour WPF je sais pas trop ce que MS veux faire avec, on aurai pus imaginer un merge avec Xamarin après leur rachat mais non. Et du coté des outils MS eux même ils sont parti du coté Electron, ça fait pas très prosélyte sur leurs propres techno disons. Les gros soucis du WPF sont encore là (lourdeur, etc) même si j'en fais encore sur une base régulière.

----------


## Robix66

Ben oui, ils vont probablement laisser en grande partie la communauté s'occuper de WPF.
Eux ils vont pousser WinUI3 et MAUI (et Blazor aussi), sauf que bon, après avoir fait ce genre de coups pour SilverLight, WinRT, UWP, je pense que beaucoup vont rester sur WPF et attendre voir.  ::ninja::

----------


## vectra

> Je vais aussi checker Rider vs. Visual Studio + Resharper


Chez moi, l'expérience a tourné au désastre et reboot en boucle de VS.
Je suis passé sur Rider et je n'ai pas de regrets. En gros, respect total de la structure de projets de Visual pour ce que j'ai pu voir, mais avec une interface 100% Jetbrains.

Par contre, la licence Rider est la plus chère de tout le pack Jetbrains.  Comme j'avais une licence CLion en cours, j'en ai profité pour faire une culbute vers le 'all products pack' et j'ai eu une grosse ristourne (ancienneté de Clion et mois restants pris en charge).
Ca me fait une licence à vie pour l'ensemble de la suite même si je ne renouvelle pas.

----------


## Kamikaze

Yes j'avais déjà le all products, je vais juste la renouveler. J'avais envie de changement donc je pars sur Rider pour me remettre dans le bain. Cimer

----------


## ducon

> Ah mince, le WPF n'a pas évolué ? Pour moi le grand-papi dans la famille C# c'était WinForms.


Et WinDev, c’est qui ?

----------


## Taro

> Et WinDev, c’est qui ?


Enterré, et on n'a même pas attendu sa mort  ::P:

----------


## GrandFather

> Et WinDev, c’est qui ?


Le cousin un peu stupide et ignare, mais qui s'affiche en voiture de sport et avec des mannequins au bras sans qu'on comprenne d'où vient sa réussite.  ::ninja::

----------


## vectra

Windev, c'est un langage 100% français que le monde nous envie.
C'est fait par PCsoft vers Monptellier ou Nice je crois. Et non, ça n'a aucun rapport avec Microsoft.


Les mecs se sont offerts un publi-dossier énorme:
https://pcsoft.fr/pcsoft/temoignages/

Ca manque de femmes à poil, ils ont faibli avec l'âge on dirait...  ::ninja::

----------


## Kamikaze

Mais putain même une parodie aurait pas fait mieux  ::XD:: 

- - - Mise à jour - - -

L'homéopathie française

----------


## gros_bidule

Surtout ne prends jamais contact avec eux, car non seulement tu vas recevoir 1kg de magazines plastifiés, mais c'est tellement de bon goût que madame te fera une crise pensant que c'est le mag de Jacquie et Michel.
PS : c'est PCSoft, pas Labsoft. Labsoft c'est des polonais ^^.

----------


## Mr Slurp

> https://pcsoft.fr/pcsoft/temoignages/


Non mais ils ont embauché tout les recalé du jeu de mots qui sont passé en entretien chez CPC pour leur titres ?  ::O:

----------


## war-p

> Windev, c'est un langage 100% français que le monde nous envie.
> C'est fait par Labsoft vers Monptellier ou Nice je crois. Et non, ça n'a aucun rapport avec Microsoft.
> 
> 
> Les mecs se sont offerts un publi-dossier énorme:
> https://pcsoft.fr/pcsoft/temoignages/
> 
> Ca manque de femmes à poil, ils ont faibli avec l'âge on dirait...


PcSoft, ils sont de mtp  ::P:

----------


## gros_bidule

C'est monsieur "Prut" qui te perturbe ?  ::): 
[edit] Pardon, j'avais pas encore vu la page 18... purée...  ::): 
Et 22.... rhoputain nan c'est trop pour moi. Assez ! Nan mais sérieux, une page sur 2 c'est un jeu de mot pourri.

----------


## ducon

> Non mais ils ont embauché tout les recalé du jeu de mots qui sont passé en entretien chez CPC pour leur titres ?


Rien fait.  ::P:

----------


## Robix66

> Non mais ils ont embauché tout les recalé du jeu de mots qui sont passé en entretien chez CPC pour leur titres ?


Et de mémoire ils sont assez chauds sur les menaces de poursuites dès qu'on critique leur machin.

----------


## GrandFather

> Et de mémoire ils sont assez chauds sur les menaces de poursuites dès qu'on critique leur machin.


Je confirme, pour avoir été il y a (très) longtemps modérateur/rédacteur sur Developpez.com. Leur section du forum nécessitait une attention toute particulière de la part de l'équipe de modération...

----------


## Captain_Cowkill

Je poste juste un BMDJ : je viens de terminer une formation Udemy complète sur JavaScript et du coup je suis super fier. Une pierre de plus à l'édifice de ma reconversion.

Pour ceux que ça intéresserait, la formation s'intitule "La formation JavaScript ULTIME" par Louis-Nicolas Neuillet.  Alors oui, le titre fait un peu clickbait mais c'était vraiment bien.

----------


## Dross

C'est bien d'avoir vu les bases, mais j'ai jeté un œil au tuto et c'est une manière assez dépassée d'un point de vu entreprise (on est clairement dans le cliché JS pur + JQuery à papa).

Pour aller plus du coté "code industriel" et non plus "artisanal", je te conseillerai de commencer à regarder un des framework frontend (Angular2, React, Vue, etc) pour voir des manières plus modernes de faire du front-end.
Tu n'a pas perdu ton temps ceci dit, c'est bien d'avoir vu l'ancien monde, car tout les devs senior aujourd'hui on fait du JQuery il y a 10-15 ans, et ce background n'est pas inutile, mais d'un point de vu banquable pour une reconversion ça sera moins vendeur.

----------


## Kamasa

Il y a également de plus en plus l'utilisation de TypeScript. C'est du javascript avec avec une surcouche qui permet un typage fort et qui est compilé (ça, c'est pratique pour éviter de constater les bourdes avant du code déployé, mais en vrai la plupart des IDE sont capables de pointer du doigt les erreurs Javascript)

Enfin bon, c'est autre chose, moi je préfère (mais bon, développeur Java à la base, ça doit être pour ça que je préfère les typages et la compil'  ::P:  ) et TS fait bien plus que ces 2 points-là : interfaces, types statiques et autres...

----------


## Awake

Gros +1 pour TypeScript. En plus des avantages dits par Kamasa, pour apprendre et comprendre comment faire du code propre c'est bien mieux que js.

Je ne peux que te conseiller de te mettre à un projet perso aussitôt que possible aussi. Pas besoin de refaire facebook, un tout petit projet simple que tu fais de A à Z pour faire de la pratique en plus de la théorie des cours (c'est vraiment capital en code).

----------


## gros_bidule

Y a des gens qui se sont mis à *JetPack Compose* pour du dev Android ? Jusque là j'évitais autant que possible Android : le dev avec le sdk java/kotlin me donne des boutons (les API Android sont une horreur quoi, surtout pour faire des écrans, des listes... qu'est ce que c'est brouillon...), et les technos à la Cordova etc... j'aime l'idée mais pas les technos front. Et le dotnet, pfiouuu, pas envie d'installer encore un autre IDE. #vieuxcon #devjvm
En regardant vite fait JetPack Comose ça semble permettre de faire des UI assez facilement, sans manifest (là chui pas super sûr) etc (nota : mes connaissances en dev Android datent, j'ai peut être raté des super features). Bref, ça semble moderne. Vous avez essayé ?
J'y pense car il vient de passer en v1.0 (lien de la news)  ::):

----------


## Kamasa

Ha oui, autre chose concernant Javascript/Typescript.
Si jamais vous partez ou faites déjà du React et que vous voulez une gestion des états un peu plus élaborée que ce que React Nativement (quoi qu'avec les dernières versions c'est vraiment pas mal) et qu'on vous parle de Redux/Saga, renseignez-vous plutôt sur Recoil !
C'est fait par les équipes Facebook (comme React donc) et même si c'est encore catalogué en "exotic feature" et en beta, c'est infiniment plus pratique à utiliser que Redux/Saga. Franchement, j'essaie d'évangéliser les gens sur le sujet parce que c'est vraiment le jour à la nuit pour des résultats quasi-identique  :;):

----------


## Orhin

> Y a des gens qui se sont mis à *JetPack Compose* pour du dev Android ? Jusque là j'évitais autant que possible Android : le dev avec le sdk java/kotlin me donne des boutons (les API Android sont une horreur quoi, surtout pour faire des écrans, des listes... qu'est ce que c'est brouillon...), et les technos à la Cordova etc... j'aime l'idée mais pas les technos front. Et le dotnet, pfiouuu, pas envie d'installer encore un autre IDE. #vieuxcon #devjvm
> En regardant vite fait JetPack Comose ça semble permettre de faire des UI assez facilement, sans manifest (là chui pas super sûr) etc (nota : mes connaissances en dev Android datent, j'ai peut être raté des super features). Bref, ça semble moderne. Vous avez essayé ?
> J'y pense car il vient de passer en v1.0 (lien de la news)


Faudra que je demande à mes collègues la semaine prochaine, y'en a peut être qui ont testé.
Sinon pour le dev mobile, t'as aussi Reactnative et Flutter qui proposent de très bonnes choses.




> Ha oui, autre chose concernant Javascript/Typescript.
> Si jamais vous partez ou faites déjà du React et que vous voulez une gestion des états un peu plus élaborée que ce que React Nativement (quoi qu'avec les dernières versions c'est vraiment pas mal) et qu'on vous parle de Redux/Saga, renseignez-vous plutôt sur Recoil !
> C'est fait par les équipes Facebook (comme React donc) et même si c'est encore catalogué en "exotic feature" et en beta, c'est infiniment plus pratique à utiliser que Redux/Saga. Franchement, j'essaie d'évangéliser les gens sur le sujet parce que c'est vraiment le jour à la nuit pour des résultats quasi-identique


Pas eu l'occasion de tester mais j'avais eu des bons retours en effet.
Par contre Redux ne vient pas systématiquement avec redux-saga hein, tu peux utiliser redux-observable ou redux-thunk.  :;): 

Et pour la simplification du boilerplate liée à Redux, rien qu'utiliser redux-toolkit fait gagner pas mal de temps (et de lignes de code).




> Je poste juste un BMDJ : je viens de terminer une formation Udemy complète sur JavaScript et du coup je suis super fier. Une pierre de plus à l'édifice de ma reconversion.
> 
> Pour ceux que ça intéresserait, la formation s'intitule "La formation JavaScript ULTIME" par Louis-Nicolas Neuillet.  Alors oui, le titre fait un peu clickbait mais c'était vraiment bien.


Félicitations, c'est bien cool d'avoir réussi.  :;): 

Comme les autres je te conseille de t'intéresser maintenant à Typescript et à un framework JS moderne (React, Angular ou Vue, tu choisis).

----------


## Captain_Cowkill

> C'est bien d'avoir vu les bases, mais j'ai jeté un œil au tuto et c'est une manière assez dépassée d'un point de vu entreprise (on est clairement dans le cliché JS pur + JQuery à papa).
> 
> Pour aller plus du coté "code industriel" et non plus "artisanal", je te conseillerai de commencer à regarder un des framework frontend (Angular2, React, Vue, etc) pour voir des manières plus modernes de faire du front-end.
> Tu n'a pas perdu ton temps ceci dit, c'est bien d'avoir vu l'ancien monde, car tout les devs senior aujourd'hui on fait du JQuery il y a 10-15 ans, et ce background n'est pas inutile, mais d'un point de vu banquable pour une reconversion ça sera moins vendeur.


Oui, mais je ne voulais pas mettre la charrue avant les boeufs  ::P: 
Me jeter dans un framework sans même savoir à quoi ressemble JS ne m'aurait clairement pas aidé je pense. Mais la formation était vraiment intéressante, parce que bourrée d'infos pratiques autre que du bête coding.

J'hésite encore sur quel framework me pencher, entre React et Angular.

Concernant Typescript, vous me parlez chinois, j'ai du mal à mettre le doigt sur ce que ça représente. C'est un langage à part ? Une extension de JS ?

Et je voulais me renseigner sur bootstrap aussi...

- - - Mise à jour - - -

Genre j'ai trouvé cette formation Angular + Typescript. Vous en pensez quoi ? https://www.udemy.com/course/formati...-fondamentaux/

----------


## Hideo

> Me jeter dans un framework sans même savoir à quoi ressemble JS ne m'aurait clairement pas aidé je pense.


C'est pas une mauvaise chose effectivement, et c'est clairement pas impossible que t'en vois dans ta future carriere de web dev.




> J'hésite encore sur quel framework me pencher, entre React et Angular.


Les vrais me corrigeront si je dis de la merde: 

React et Angular ne sont pas totalement 'equivalents', React est plus vue comme une librairie et Angular comme un framework. 
React s'occupe de gerer l'affichage des tes composants, tout le reste (routing, store,...) tu le geres comme tu veux avec ce que tu veux. 
Angular est un framework, du coup il offre des outils pour tout (composants, routing, store etc..). 

Je trouve React plus simple a approcher vu que c'est un peu moins lourd, j'ai commence a taffer sur Angular et putain (bien) utiliser RxJS c'est quand meme pas evident. 
J'aurai p'tet meme tendance a te conseiller de checker Vue.js qui est le plus 'leger' des trois et rapide a prendre en main. Une fois que t'as bien compris l'approche 'composant' tu pourras peut etre te rediriger vers un autre. 




> Concernant Typescript, vous me parlez chinois, j'ai du mal à mettre le doigt sur ce que ça représente. C'est un langage à part ? Une extension de JS ?


C'est une extension de JS. Ca rajoute du typage, ca permet d'etre beaucoup plus consistant dans ce qu'on ecris et d'eviter de foutre une string dans une variable qui devrait etre un nombre.
Aujourd'hui on ne fait plus vraiment de JS pure. Mais c'est juste une surcouche ca va etre un peu relou au debut mais c'est bon signe, c'est comme quand tu desinfectes avec de l'alcool a 80, apres tu te sentiras mieux  :;): 




> Et je voulais me renseigner sur bootstrap aussi...


C'est pas une necessite. Bootstrap etait tres utilise a l'epoque JQuery pour pouvoir prototyper rapidement avec des jolis boutons / champs, maintenant on partirai plutot sur du Material Design avec la lib qui va bien (celle pour vue, React ou Angular).

----------


## gros_bidule

> Faudra que je demande à mes collègues la semaine prochaine, y'en a peut être qui ont testé.
> Sinon pour le dev mobile, t'as aussi Reactnative et Flutter qui proposent de très bonnes choses.


Pas con Flutter! En plus ça sera l'occasion de découvrir Dart.
Je regarde cela. Merci  :;):

----------


## Captain_Cowkill

Bon du coup, je suis me suis penché sur le sujet à travers vidéos et articles. Je pense pencher vers VueJS, pour l'accessibilité principalement.

----------


## Kamasa

> React et Angular ne sont pas totalement 'equivalents', React est plus vue comme une librairie et Angular comme un framework. 
> React s'occupe de gerer l'affichage des tes composants, tout le reste (routing, store,...) tu le geres comme tu veux avec ce que tu veux. 
> Angular est un framework, du coup il offre des outils pour tout (composants, routing, store etc..).


C'est ça.
Angular c'est vraiment un framework MVC.
Rien à voir avec React qui fait, comme l'a bien dit Hideo, de l'affichage de composants. Tu peux le comparer à Vue JS (d'après ce que j'en sais, c'est à dire pas beaucoup  ::ninja::  )

----------


## Orhin

> Concernant Typescript, vous me parlez chinois, j'ai du mal à mettre le doigt sur ce que ça représente. C'est un langage à part ? Une extension de JS ?


C'est en effet une "extension" du JS qui rajoute un certain nombre de fonctionnalité au langage.
La principale étant le typage statique, qui va te permettre de déclarer quels sont les types de valeurs acceptées par une variable/fonction/etc (par exemple des entiers ou des chaines de caractère).

Après le langage est compilé en JS pour pouvoir fonctionner sur les navigateurs.




> Et je voulais me renseigner sur bootstrap aussi...


C'est pas forcément nécessaire.
C'est intéressant si tu fais des sites sans framework mais avec du React/Angular + les librairies qui vont bien t'en as pas forcément besoin.

Et surtout ça limite l'apprentissage du CSS alors qu'il y a plein de trucs intéressant à maitriser (flex, grid, variables CSS4, etc).




> Genre j'ai trouvé cette formation Angular + Typescript. Vous en pensez quoi ? https://www.udemy.com/course/formati...-fondamentaux/


Ça me parait une bonne base pour commencer, les sujets non traités (comme l'internationalisation) s'apprendront plus tard sur le tas.




> React et Angular ne sont pas totalement 'equivalents', React est plus vue comme une librairie et Angular comme un framework. 
> React s'occupe de gerer l'affichage des tes composants, tout le reste  (routing, store,...) tu le geres comme tu veux avec ce que tu veux. 
> Angular est un framework, du coup il offre des outils pour tout (composants, routing, store etc..).


Alors ça c'est la théorie, en pratique quand tu fais du React tu vas presque tout le temps te retrouver à utiliser les mêmes librairies (react-router, react-intl, react-redux, etc), donc au final l'écosystème te fournit l'équivalent d'un framework.

Et il n'y a pas de store en Angular par défaut, pour ça faut utiliser des librairies comme NGXS ou NgRx (voir du Redux pur, m'enfin je vois pas l'intérêt).




> Je trouve React plus simple a approcher vu que c'est un peu moins lourd,  j'ai commence a taffer sur Angular et putain (bien) utiliser RxJS c'est  quand meme pas evident.


Pour l'apprentissage React est en effet assez simple vu que tu peux commencer à faire des pages simples avec juste des composants.
Ça te permet de commencer à comprendre certains principes de base que tu retrouves dans les gros framework web JS.

Après dès que tu veux commencer à faire des "vrais" site, la complexité sera la même qu'Angular vu que tu vas devoir importer pas mal de librairies.

Pou RxJS ouais c'est un peu velu au départ, après tu peux faire de l'Angular en ne l'utilisant que très peu (en dehors des subscribe venant des services comme HttpProvider).




> J'aurai p'tet meme tendance a te conseiller de checker Vue.js qui est le  plus 'leger' des trois et rapide a prendre en main. Une fois que t'as  bien compris l'approche 'composant' tu pourras peut etre te rediriger  vers un autre.


En vrai tu peux faire la même chose avec du React "de base" (sans aucune librairie importée).

----------


## Captain_Cowkill

Du coup la phrase que je vois souvent "Vue c'est bien pour débuter" est pas forcément vraie ? On peut partir sur Angular ?
Je vois aussi que Vue est de plus en plus demandé.

----------


## Orhin

> Du coup la phrase que je vois souvent "Vue c'est bien pour débuter" est pas forcément vraie ? On peut partir sur Angular ?


Ah si, Vue c'est bien débuter.  ::P: 

Mais ce n'est pas non plus le seul moyen.
React reste très abordable aussi.

Pour Angular c'est mieux d'être bien guidé vu que c'est plus touffu mais quelqu'un qui a pas mal d'xp de dev s'y retrouvera sans trop de soucis.

----------


## Dross

Quand je me suis mis à jour sur les techno web je suis parti direct sur Angular2, car Vue existait pas et y'avais des soucis de licence avec React à l'époque, j'ai pas eu de problème particulier, je pense pas qu'il soit plus ou moins dur qu'un autre. 

A savoir qu'avant de me mettre aux frameworks j'avais tranquillement commencé à redévelopper la roue : ajouter le support de TS, des modules JS, outil de templating, etc. 
Avec un framework comme Angular, t'a tout qui viens avec, paramétré correctement et qui marche out-of-the-box. 

En ressources, le ngBook est un must au niveau cookbook, après je suis certain qu'il doit y avoir des formations udemy très bien sur le sujet. J'ai mis ce cookbook dans les mains de juniors, ils n'ont pas eu de soucis particulier, il est très accessible.

----------


## Captain_Cowkill

Bon allez, je vais partir sur Vue. Et TypeScript. Programme chargé déjà  ::o:

----------


## Awake

Très bonne stack  ::):  Tu n'auras pas de mal à trouver un job.

----------


## Sangoon

> Bon allez, je vais partir sur Vue. Et TypeScript. Programme chargé déjà


Et juste par curiosité côté back tu t'orientes sur quelque chose en particulier pour accompagner ca ? ou tu te concentre principalement sur le front pour le moment ?

----------


## Captain_Cowkill

Je vise le front pour le moment. Full stack ce serait du suicide pour ma reconversion, beaucoup trop de choses à assimiler et à faire vendre par la suite. Je pars de rien.

----------


## Kamasa

Il est tout à fait possible de faire du back en Javascript/Typescript depuis la prolifération Node.js.
Et si tu fais du cloud du peux carrément faire du back sans avoir de serveur (sur AWS avec des lambdas par exemple).

----------


## Teocali

Bon, alors, je sais pas si le bon thread pour ça, mais je me lance : je découvre terraform, et j'aime bien.

Voila, fallait que je le dise.

----------


## r4T0n

> Bon, alors, je sais pas si le bon thread pour ça, mais je me lance : je découvre terraform, et j'aime bien.
> 
> Voila, fallait que je le dise.


J'ai découvert terraform il y a quelques mois, et j'aime bien aussi.  ::happy2::

----------


## MrBeaner

@Cowkill : je suis une formation Udemy Angular en ce moment. J'ai acquis pas mal de bases depuis le début de l'année, mais par rapport à mes formations précédentes, je m'ennuie davantage pour celle-ci (c'est pas le même prix non plus).

C'est cool d'apprendre un framework JS. J'ai fait des aller-retours avec React, mais je dois avoir un cerveau Google, vu que je préfère généralement les technologies qui sortent de chez eux (idem avec GCP)  ::happy2:: 

J'ai aussi assez vite compris qu'un framework JS est assez optionnel pour la plupart des projets  ::):

----------


## Captain_Cowkill

> @Cowkill : je suis une formation Udemy Angular pour en ce moment. J'ai acquis pas mal de bases depuis le début de l'année, mais par rapport à mes formations précédentes, je m'ennuie davantage pour celle-ci (c'est pas le même prix non plus).


C'est le souci, je trouve, avec ce genre de formation. T'es un peu seul devant ton écran. Même si le formateur est motivé et qu'il répond vite aux questions, le cours n'est qu'une VOD et manque d'interactivité...

----------


## raaaahman

Rien ne t'empêche cela dit de trouver d'autres personnes qui apprennent la même techno et d'échanger avec eux (sur reddit, meetup, voire directement les autres apprenants du cours Udemy). Personnellement, j'utilise les e-books récupérés gratuitement sur Packt Publishing (conseillé par un canard d'ici d'ailleurs), ça me permet de me mettre à la page sur plein de technos et techniques et j'imagine mal pouvoir passer tout le temps que j'y ai investi entièrement en formations présentielles.

Après, être seul devant mon écran toute la journée ne m'a jamais dérangé, donc je ne suis peut-être pas la meilleure personne pour en discuter.  ::): 



EDIT: Au risque de passer pour le vilain petit canard: Typescript ça n'a pas d'intérêt tant que tu n'a pas de bonnes bases dans un des paradigmes de programmation: Programmation Orientée Objet, Programmation Fonctionnelle (Programmation Réactive?),...

Sans ça tu risque de tout typer "any" faute d'avoir une meilleure solution.

----------


## MrBeaner

@Cowkill : C'était pas évident pour moi au début aussi, mais le format me convient bien. Si tu as des questions et que tu es patient, tu peux toujours utiliser Stack Overflow pour trouver des réponses (déjà posées ou que tu poses toi-même).

Je t'ai recommandé la formation CS50, parce que c'est à mon sens la meilleure pour aborder les bases. Et la communauté autour des cours est très fournie  ::):

----------


## Captain_Cowkill

Oh mais je m'en sors bien, c'est simplement qu'en cas de "coup de mou" il est parfois plus dur de se mettre un coup de pied au cul pour se relancer. Surtout que pour la plus grande partie, c'était la formation le soir de 18h00 à 20h00 après mon boulot (qui est épuisant physiquement et moralement).
Depuis que je suis arrêté, ça va beaucoup mieux niveau motivation (même si encore assez aléatoire vu mon état mental actuel)  :^_^:

----------


## Lafrite

> Non mais AMOS, ça a été top au moins un jour, et ça n'a fait honte à personne contrairement à un certain IDE 
> 
> Scratch, ça a l'air d'être un truc pour les enfants qui n'arrivent pas à faire du Flash, mais genre plutôt logiciel que langage de programmation.
> Là, AMOS est un vrai Basic des familles avec un accès natif et simple à la plupart des fonctions de l'Amiga, même si elles étaient plus simples d'accès que je le pensais à l'époque.
> 
> Mais je pense que c'est plus du trip rétro qu'un langage 'sérieux' ou 'moderne'. D'ailleurs, le but est surtout de faire du rétrogaming plus vrai que nature et sans émulation, mais avec des gros pixels derrière.
> 
> J'ai regardé certaines vidéo youtube: ça a l'air de bien marcher mais c'est vraiment "à l'ancienne" et "dans son jus" on va dire, avec encore pas mal de bugs.
> Moi ça l'intéresse surtout pour faire tourner mes premiers programmes, et y'en avait de marrants quand-même.


Il y a une grosse mise à jour qui sort ce vendredi 20/08 avec entre autre le debuger et le designer

Présentation sur https://www.youtube.com/watch?v=yfS4H4KQJXo 

 :;):

----------


## Awake

Salut, j'ai une question sur la sécurité en général, en espérant que ce soit le bon topic.

Par rapport à la sécurité les données critiques des applications (sur linux surtout) : les apps tel que firefox ou chrome stockent des identifiants de session ou même plus important (les accès à tous les identifiants de tous les sites par exemple si on utilise les password manager de ces browsers). Si quelqu'un arrive à exécuter un bout de code sur ma machine, est-ce qu'il peut avoir accès à ces informations ?

J'ai du mal à voir comment chrome ou firefox peuvent stocker ces infos sans qu'elles ne soient accessibles depuis l’extérieur.

Merci  ::):

----------


## Cwningen

https://xkcd.com/1200/

D'où l’intérêt d'isoler chaque application dans sa sandbox. Sinon, certaines applications (genre les gestionnaire de mot de passe) peuvent demander des protections supplémentaires pour pas que leur mémoire puisse être lue, mais ça n'inclue pas les fichiers. On peut lire ta clé SSH chiffrée sur le disque mais pas sa version déchiffrée dans la mémoire de ton ssh-agent.

----------


## Kamikaze

Bah Firefox, et me semble que Chrome c'est pareil, c'est juste un dossier, aucune protection par défaut. Donc n'importe quelle appli ou personne qui y a accès, c'est compromis

----------


## Awake

Donc un paquet npm corrompu avec une exécution auto à l'install peut théoriquement piquer tous les cookies/toutes les sessions actives du navigateur ?

(ça ne m'est pas arrivé, mais je suis surpris que ce ne soit pas plus sécurisé)

----------


## gros_bidule

Sous Firefox tu peux protéger (et ça chiffre le fichier avec le mot de passe "principal") les mots de passe enregistrés  ::): 
Sinon oui, Firefox non protégé ou Chrome, il est super facile de pomper tous les logins/mdp. Y'a plein d'outils qui le font.

----------


## Kamikaze

Même pas besoin, on parle du file system ici. N'importe quel exécutable peut voler tous les passwords sauvés et tu peux les utiliser pour te connecter et voilà.

S'pour ça que gmail va parfois refuser la connexion même avec des identifiants valide parce qu'il pense que l'adresse IP que tu utilises est louche

- - - Mise à jour - - -

Mais de manière générale à partir du moment où tu peux exécuter du code sur une machine c'est mal barré (un simple key logger se moque bien de la plupart des approches défensives), s'pour ça que windows se dirige vers les TPM notamment. S'pour ça aussi qu'en entreprise, quand ça utilise windows tu ne peux exécuter que des softwares fourni par le software center de la boite, clefs usb bloquées, etc. Pour ça aussi qu'une grande partie des attaques consistent à infiltrer une appli existante et reconnue (ccleaner, etc.), pour ça que la plupart des navigateurs refusent désormais les extensions non validées, etc. etc.

le soucis est le même, ne pas exécuter du code inconnu

----------


## Awake

:Emo: 

C'est dingue.

Merci pour l'astuce du primary password sous firefox.

Pour le coup les apps sur smartphone sont beaucoup plus secures avec leur sandboxes.

----------


## GrandFather

Dans le cas de Chrome les mots de passe ne sont pas stockés localement, ils sont associés à un compte Google et stockés dans le Cloud. En attendant le hacking du siècle, c'est ce qui me semble être la solution la plus secure à ce jour...

----------


## gros_bidule

> C'est dingue.
> 
> Merci pour l'astuce du primary password sous firefox.
> 
> Pour le coup les apps sur smartphone sont beaucoup plus secures avec leur sandboxes.



Oui et non, il y a eu un petit scandale sur la sécu Android, où l'on apprenait que les apps préinstallées (et seulement elles) avaient... un peu trop de privilèges, et peut être la capacité de lire les fichiers des autres apps.
Ce sont juste les apps préinstallées, ça limite bcp le risque, mais pas totalement.

----------


## Awake

> Dans le cas de Chrome les mots de passe ne sont pas stockés localement, ils sont associés à un compte Google et stockés dans le Cloud. En attendant le hacking du siècle, c'est ce qui me semble être la solution la plus secure à ce jour...


Pareil pour firefox mais si la session pour se connecter au password manager dans le cloud est stocké localement, l'intérêt est limité. L'intru peut simplement faire une requête à partir de ton pc avec la session et récupérer les password décryptés ?

----------


## GrandFather

> Pareil pour firefox mais si la session pour se connecter au password manager dans le cloud est stocké localement, l'intérêt est limité. L'intru peut simplement faire une requête à partir de ton pc avec la session et récupérer les password décryptés ?


Je ne pense pas que cette session soit facilement détournable, en tout cas pas sans craquer Chrome dans lequel est implémentée la couche d'authentification et de connexion au compte Google. S'il existe un exploit, il ne doit pas être à la portée du premier script kiddie venu...

Par contre, je ne ferais effectivement pas confiance à un stockage seulement dans le système de fichiers local.

----------


## Foksadure

> Pareil pour firefox


Je ne sais pas si on parle de la même chose, mais Firefox stocke les cookies dans le fichier cookies.sqlite du profil utilisateur.
https://support.mozilla.org/en-US/kb...ores-user-data
Une sauvegarde de ce fichier est bien pratique pour ne pas avoir à se loguer sur certains sites habituels à chaque changement de machine ou réinitialisation de profil.
On peut aussi copier les fichiers key4.db & logins.json...

----------


## Cwningen

Même si les fichiers étaient chiffrés, ça ne suffirait pas. Firefox n'est pas protégé contre les debuggers, on peut aller lire ses secrets directement dans la mémoire du processus ou faire des injections de code.

----------


## gros_bidule

> Même si les fichiers étaient chiffrés, ça ne suffirait pas. Firefox n'est pas protégé contre les debuggers, on peut aller lire ses secrets directement dans la mémoire du processus ou faire des injections de code.


Il y a tout de même plusieurs niveaux de compromission  :^_^: . Avoir une copie dudit fichier VS avoir un accès total ou privilégié à la machine, ce n'est pas la même affaire.
Parcontre je ne comprends pas : si le fichier est chiffré, et que donc tu ne connais pas le clef de déchiffrement, à quoi ça sert d'injecter du code ou déboguer Ffox ? Ffox ne saura pas le déchiffrer sans le mot de passe. A moins que tu ne parles du cas où Ffox est déjà lancé et a déjà déchiffré le fichier ? Dans ce cas tu as déjà lu le mot de passe via ton keylogger ^^.

----------


## Cwningen

Il n'y a pas besoin de privilèges pour débugger (sur la plupart des distributions mais on peut activer des options). Le keylogger, ça dépend, avec X11 c'est la fête, avec wayland il parait que c'est plus difficile.

Et j'oubliais, oui, c'est dans le cas où le navigateur est déjà lancé avec les mots de passes déchiffrés en mémoire. Dans le cas où on s'installe pour le long terme, LD_PRELOAD peut faire beaucoup de choses, il y a des protections mais je ne pense pas que Firefox s'en serve non plus (sinon il ne serait pas debuggable).

----------


## Oropher

Salut tout le monde

J'ai un fichier issu de Windows dont je ne connais pas le langage, est-ce que ça vous parle un truc comme ça :



Spoiler Alert! 




```
{
"class":"content",
"collections":[],
"name":"LockScreen",
"propertyManifest":{
	"landscapeImage":{
		"type":"image"
	},
	"portraitImage":{
		"type":"image"
	},
	"showImageOnSecureLock":{
		"isOptional":true,
		"type":"boolean"
	},
	"onRender":{
		"type":"action"
	}
},
"properties":{
	"landscapeImage":{
		"fileSize":507494,
		"height":1080,
		"sha256":"MbjYr/0W9d6ajPYXLz6FjqF4mrMGJkHZk8l0T38eVAM=",
		"width":1920,
		"image":"C:\\Users\\A319642\\AppData\\Local\\Packages\\Microsoft.Windows.ContentDeliveryManager_cw5n1h2txyewy\\LocalState\\Assets\\6549557292af701cfb5e523d8e762bd3035fb6af448277e1a1310d6a28036006"
	},
	"portraitImage":{
		"fileSize":577287,
		"height":1920,
		"sha256":"kse2RykVslVVpUs2TLDNkD9zq6fCp+k5UfhJiwyUFcw=",
		"width":1080,
		"image":"C:\\Users\\A319642\\AppData\\Local\\Packages\\Microsoft.Windows.ContentDeliveryManager_cw5n1h2txyewy\\LocalState\\Assets\\9b0cc3e93d6f7a353923906002833e5c1d87ed89b5e187e4a2189ab940c76b63"
	},
	"showImageOnSecureLock":{
		"bool":true
	},
	"onRender":{
		"event":"none",
		"parameters":{
			"ctx.action":"setLockScreenHotspots",
			"ctx.containerPath":"",
			"ctx.contentId":"53ed6cf9a0af41b29e61e5093f784572",
			"ctx.creativeId":"1629874013`WW_128000000002750849_FR-FR`0`53ed6cf9a0af41b29e61e5093f784572`82800`338387`132829020000000000",
			"ctx.cv":"lqxkd5ShtEO/Ab+g.0",
			"ctx.expiration":"132829020000000000",
			"ctx.placementId":"SubscribedContent-338387",
			"landscapeImage":"C:\\Users\\A319642\\AppData\\Local\\Packages\\Microsoft.Windows.ContentDeliveryManager_cw5n1h2txyewy\\LocalState\\Assets\\6549557292af701cfb5e523d8e762bd3035fb6af448277e1a1310d6a28036006",
			"onRender":"//property[onRender]",
			"portraitImage":"C:\\Users\\A319642\\AppData\\Local\\Packages\\Microsoft.Windows.ContentDeliveryManager_cw5n1h2txyewy\\LocalState\\Assets\\9b0cc3e93d6f7a353923906002833e5c1d87ed89b5e187e4a2189ab940c76b63",
			"showImageOnSecureLock":"true"
		},
		"action":"setLockScreenHotspots"
	}
...
```





C'est moi qui l'ai indenté complètement à l'arrache, pardon d'avance si vous faites une syncope (enfin, remarquez que je vous préviens après que vous ayez lu le bout de code  ::trollface:: )
C'est un fichier issu de dossiers qui gèrent les fonds d'écrans de l'écran de verrouillage, ptetre lié à du wpf du coup, mais je voudrais savoir si c'est un langage précis

Question subsidiaire : un truc de ce genre, vous le _parseriez_ avec quoi?
(Amis de la langue française, bonsoir)

----------


## Calys

C'est du JSON, tout simplement  ::): 

Pas vraiment un langage de programmation, mais un format de données

----------


## vectra

Des Json parsers, y'en a dans tous les langages. En C++, Qt le fait, et plein de libs opensource.
En python ça doit être standard, etc...

Fun fact: pas de commentaires possibles en Json  ::siffle:: 
Tester c'est douter, commenter c'est mentir?

----------


## Oropher

Cool, merci les lapins !

C'est là que je me rends compte que je suis complètement dépassé par le dev, depuis mes années fac

----------


## vectra

Ca fait combien de temps?

----------


## Teocali

> Des Json parsers, y'en a dans tous les langages. En C++, Qt le fait, et plein de libs opensource.
> En python ça doit être standard, etc...
> 
> Fun fact: pas de commentaires possibles en Json 
> Tester c'est douter, commenter c'est mentir?


Sachant que y’a pas de standard officiel, rien ne t’empêche d’en rajouter. faut juste que ton parser le gère.

Édit : Mybad. y’a bien une spécification officielle. j’ai du confondre avec un autre format.

----------


## Oropher

> Ca fait combien de temps?


J'ai quitté la fac il y a 11 ans
J'avais un peu suivi et continué simplement en tant que loisir de développer un peu, mais là ça fait bien 5 ans que je n'ai rien touché à part un peu de batch ou du SQL (sur des choses très simples)
J'ai entendu parler du JSON mais je suis bien incapable de le reconnaitre ou de l'intégrer dans du code!

----------


## Dross

Pas besoin de l'intégrer dans du code, c'est un format d'échange, comme le XML.

----------


## Taro

> Fun fact: pas de commentaires possibles en Json


Ptain ça j'avoue ça me les brise un peu. Au boulot on fait beaucoup de Python et on utilise beaucoup le format JSON, et j'aimerais glisser un commentaire de temps en temps dedans.

----------


## Kamasa

tu ajoutes un attribut "comment":"bla bla bla" sans le (dé)sérialiser et le tour est joué  ::ninja::

----------


## gros_bidule

> tu ajoutes un attribut "comment":"bla bla bla" sans le (dé)sérialiser et le tour est joué


Hélas selon l'archi ça peut bloquer.
Lors d'une mission dans de grandes banques par ex, on avait plein de gateways à faire traverser à nos payloads (pour la sécu), et le contenu des JSON est vérifié. Si un JSON a un champ non autorisé -> requête rejetée. Et bien évidemment l'admin qui fait les schémas autorisés ne veut pas de champs _inutiles_  ::): 
Cas un peu extrême, mais pas tant que ça, pour peu que ton produit soit sensible.

Mais tellement d'accord, de vrais commentaires en JSON ça serait pas mal. Enfin sauf si c'est juste pour mettre un copyright en header  ::ninja::

----------


## William Vaurien

pas moyen de filtrer les commentaires au moment du packaging ?

----------


## Orhin

Ben en même temps, autant un commentaire dans un JSON qui sert de fichier de configuration ou autre, je vois bien l'intérêt.
Autant pour le payload d'une API, ça n'a effectivement pas grand chose à y faire.

----------


## Awake

Puisqu'on parle de JSON, j'aurais une question technique. J'aimerais réduire le poids de gros json, qui ont énormément de propriétés imbriquées (il s'agit de definition d'interfaces web). Je pensais serialiser les noms des propriétés ("children" : [] devient "c" : []) et les deserialiser au runtime. Déjà est ce que ça vous semble bien comme idée ?

Et pour l'application, pour optimiser tout ça, je pensais faire (en javascript) :
jsonstr.replaceAll('"c": ', '"children": ') 

a partir du json sous forme de chaine de caractère. Je pense que ce sera beaucoup plus rapide que de parcourir tout l'arbre et de renommer toutes les propriétés. Est ce que vous voyez un moment où cette méthode pourrait poser problème ?

----------


## Mr Slurp

> Ben en même temps, autant un commentaire dans un JSON qui sert de fichier de configuration ou autre, je vois bien l'intérêt.
> Autant pour le payload d'une API, ça n'a effectivement pas grand chose à y faire.


Ouai voilà, si c'est une payload d'échange entre deux système et qu'on se fout un peu qu'un humain au milieu puisse la lire, mettre des commentaires serait clairement contre productif en terme de bande passante.

----------


## raaaahman

Je ne comprend pas trop ce que vous voulez raconter en commentaire dans du JSON, et surtout à qui? Vu qu'est c'est un format destiné à l'échange entre programmes...

EDIT: @hijopr As-tu cherché s'il n'existe pas déjà des minificateurs? Genre Json Minimizer Plugin pour webpack?

----------


## Awake

> Je ne comprend pas trop ce que vous voulez raconter en commentaire dans du JSON, et surtout à qui? Vu qu'est c'est un format destiné à l'échange entre programmes...


Dans un fichier de conf tu peux indiquer quelles valeurs sont autorisées pour une propriété par exemple.

----------


## Kamikaze

Pourquoi t'utilises pas plutôt un algo de compression existant? On parle de quelle taille là, et pour quelle utilisation exactement, genre est ce que ça doit être échangé à travers le réseau ou bien, quel est l'impératif de réduction de taille?

Ta solution sonne très "hacky" et a priori c'est un problème courant donc déjà résolu par pas mal de solutions existantes.

Là tu viens de décrire plus ou moins un algo de compression, comme ce que fait zip ou autre. Sinon regarde du côté de Protobuf ou équivalent, ça sera relativement trivial de passer de l'un à l'autre.

- - - Mise à jour - - -

Json c'est vraiment pas ce que je qualifierais de destiné à l'échange de données entre programmes, c'est pas du binaire, s'pas compressé, c'est précisément human readable.

L'abscence de commentaire est un choix de design pas vraiment génant. De manière générale les commentaires sont une mauvaise pratique dans le code quand on ne sait pas ce qu'on fait. Pour documenter le code vaut mieux des tests et une doc qui découle des tests.

Un commentaire ne garanti jamais d'être maintenu à jour ou d'avoir une quelconque pertinence. Le mieux c'est de bien nommer ses variables et de crasher tôt quand y'a une valeur qui n'a pas de sens.

----------


## Awake

> Pourquoi t'utilises pas plutôt un algo de compression existant? On parle de quelle taille là, et pour quelle utilisation exactement, genre est ce que ça doit être échangé à travers le réseau ou bien, quel est l'impératif de réduction de taille?
> 
> Ta solution sonne très "hacky" et a priori c'est un problème courant donc déjà résolu par pas mal de solutions existantes.
> 
> Là tu viens de décrire plus ou moins un algo de compression, comme ce que fait zip ou autre. Sinon regarde du côté de Protobuf ou équivalent, ça sera relativement trivial de passer de l'un à l'autre.


Il s'agit de json entre 500kb et 4mo qui sont stockés en BDD en échangés via HTTP très souvent. J'aimerais faire d'une pierre deux coups et réduire l'espace en base et la bande passante.

Effectivement ma solution fait un peu...noob. J'avais pensé à de la compression classique mais je craint la corruption des données (peut-être à tort). Il y a des gens qui passent des heures/jours sur l'interface qui permet de construire ces json, je ne peut pas les perdre...

----------


## Getz

> Dans un fichier de conf tu peux indiquer quelles valeurs sont autorisées pour une propriété par exemple.


Et c'est la raison pour laquelle il ne vaut mieux pas mettre sa configuration dans des fichiers JSON.

----------


## Orhin

> Il s'agit de json entre 500kb et 4mo qui sont stockés en BDD en échangés via HTTP très souvent. J'aimerais faire d'une pierre deux coups et réduire l'espace en base et la bande passante.


Si c'est accessible via HTTP, met plutôt en place du gzip ou du brotli, tu vas déjà avoir des gains trèèèès significatifs.




> Dans un fichier de conf tu peux indiquer quelles valeurs sont autorisées pour une propriété par exemple.


Ben après c'est le boulot de la doc (et du typage du code) et de l'appli de vérifier ça au runtime.




> Et c'est la raison pour laquelle il ne vaut mieux pas mettre sa configuration dans des fichiers JSON.


Ouais enfin c'est contrebalancé par tous les avantages que ça apporte lorsque tu bosses dans un environnement JS.




> Json c'est vraiment pas ce que je qualifierais de destiné à l'échange de données entre programmes, c'est pas du binaire, s'pas compressé, c'est précisément human readable.


Vu l'immense majorité des requête HTTP utilise le JSON comme format de payload, dans les faits c'est bien utilisé pour de l'échange de données entre programmes.

----------


## Kamikaze

J'te recommande de rapidement tester divers algo de compression en ligne de commande sur tes fichiers gros (4mo) et tes fichiers petits (500kb).

Si tu obtiens des taux de compression satisfaisant (la compression est toujours dépendante des données compressées), je te conseille de partir là dessus.

Je n'ai plus les chiffres en tête mais pour du texte relativement classique tu pourrais atteindre des taux de compression élevé, et ça sera a priori proche du/ou le maximum. Dans le sens ou en théorie de l'information tu peux déterminer le taux de compression max avant d'avoir des pertes (max lossless).

----------


## Orhin

Ben y'a pas grand chose à tester, la compression de payload de requête HTTP via gzip ou brotli c'est standard et supporté par tous les navigateurs côté client.
Et ça se configure très facilement côté backend si t'utilises pas des technos exotiques ou vieillottes.

Avec ça t'auras déjà des taux de compression de 60 à 90% en fonction du contenu.

----------


## William Vaurien

Mais la compression ça peut s'activer au niveau du protocol http via des flags dans le header, non ?

----------


## Orhin

> Mais la compression ça peut s'activer au niveau du protocol http via des flags dans le header, non ?


Oui : https://developer.mozilla.org/en-US/...ntent-Encoding

----------


## Awake

Merci pour les conseils  ::wub:: 

Je ne connaissais pas brotli, et il y a un portage js  :Bave:

----------


## GrandFather

Faut aussi que ça soit supporté côté serveur HTTP. Généralement ça l'est.

----------


## Orhin

> Je ne connaissais pas brotli, et il y a un portage js


Quel cas d'usage te ferais utiliser le portage JS ?  ::huh::

----------


## Awake

> Quel cas d'usage te ferais utiliser le portage JS ?


Mon backend est en js. Donc pour compresser les jsons envoyés par les clients par exemple.

Edit : Ha ben encore mieux, node le supporte nativement maintenant : https://nodejs.org/api/zlib.html

----------


## Getz

> Ouais enfin c'est contrebalancé par tous les avantages que ça apporte lorsque tu bosses dans un environnement JS.


Pour un fichier de conf, tu auras le coût de la mise en place une fois au début du projet (car oui je te rejoins, c'est beaucoup plus trivial en JS quand tu as du JSON).
Par contre avoir des commentaires dans le fichier de conf est utile tout au long du projet.

----------


## Orhin

> Pour un fichier de conf, tu auras le coût de la mise en place une fois au début du projet (car oui je te rejoins, c'est beaucoup plus trivial en JS quand tu as du JSON).
> Par contre avoir des commentaires dans le fichier de conf est utile tout au long du projet.


Ben dans ce cas du met des fichiers de config en JS/TS aussi et comme ça plus de soucis.  ::P: 




> Mon backend est en js. Donc pour compresser les jsons envoyés par les clients par exemple.


Si t'utilises un reverse-proxy (genre nginx), je gérerais plutôt la compression à ce niveau.
Si c'est pas le cas, ben node contient déjà "zlib" qui gère gzpi et brotli (et qui est utilisé par le middleware "compression" pour "express" par exemple).

----------


## raaaahman

> Par contre avoir des commentaires dans le fichier de conf est utile tout au long du projet.


S'ils sont tenus à jour...  ::trollface::  Mais oui pourquoi pas en effet.

Sinon vous utilisez les schemas JSON dans vos projets?

----------


## gros_bidule

Perso oui, pour valider des configs de routeurs  ::): 
Mais c'est tout, c'est le premier taff où j'en ai eu l'utilité. Le reste du temps c'est du json généré à partir d'entités en base de données, ou des formulaires soumis par un frontend, donc on s'en fiche un peu, on fait les validations autrement (par ex on charge l'entité, puis un coup de hibernate validator etc). Peut être par méconnaissance de la chose aussi.. car maintenant que je l'ai vu, j'aime bien.

----------


## Awake

Je l'utilise aussi, pour valider des requêtes websocket. C'est plutôt bien foutu.

Par contre sur des plus gros fichiers complexes (les json de 4mo justement), c'est même pas la peine, le script timeout. Un code de validation sur mesure est beaucoup plus efficace.

----------


## gros_bidule

JSON de 4mo -> c'est donc toi qui a optimisé les temps de chargement dans GTA V ?  :^_^:  (pour la petite histoire, grosso-modo, le jeu mettait bcp de temps à charger à cause du parsing _pas très optimisé_ d'un gros json. C'est un moddeur a trouvé ça)

----------


## raaaahman

> Par contre sur des plus gros fichiers complexes (les json de 4mo justement), c'est même pas la peine, le script timeout. Un code de validation sur mesure est beaucoup plus efficace.


Lequel de script? Il y a plusieurs implémentations de validateur par langage, ils sont tous trop lents? On peut récupérer celui de GTA V ou pas?  ::trollface::

----------


## Awake

C'etait une des principales libs pour PHP. J'avoue ne pas en avoir testé d'autres une fois que celle ci à timeout à 30s. Maintenant j'ai mon propre code pour clean/validate les jsons avec des messages d'erreur au poil et qui est rapide  ::): 

Mais il s'agit d'objets avec des milliers de propriétés à valider, en arbre en plus. Il y a surement moyen d'utiliser json schema dessus avec des optimisations mais je suis satisfait de mon implémentation.

----------


## William Vaurien

"objets avec des milliers de propriétés" ça fait un peu peur je dois avouer  ::):

----------


## raaaahman

> C'etait une des principales libs pour PHP. J'avoue ne pas en avoir testé d'autres une fois que celle ci à timeout à 30s. Maintenant j'ai mon propre code pour clean/validate les jsons avec des messages d'erreur au poil et qui est rapide


Tant mieux. J'imagine que ce code est très spécifique à ton utilisation du coup.

----------


## Awake

On fait fuire tous les barbus avec nos discussions sur les tech web.

Vite parlons de l'allocation mémoire de références de pointeur de pointeur de reference de pointeur.

----------


## raaaahman

Bah tu codes des algos de compression a la mano, je pense que tu es au bon endroit.  :^_^:

----------


## vectra

> On fait fuire tous les barbus avec nos discussions sur les tech web.


Je penserais plutôt à des arts créatifs qu'à de la tech  :;): 
De rien  ::ninja::

----------


## rOut

> On fait fuire tous les barbus avec nos discussions sur les tech web.
> 
> Vite parlons de l'allocation mémoire de références de pointeur de pointeur de reference de pointeur.


Depuis que je fais du C toute la journée j'ai vraiment plus aucune frustration à déverser ici perso, vous pouvez parler de vos emmerdes haut niveau tant que vous voulez.

----------


## raaaahman

> Je penserais plutôt à des arts créatifs qu'à de la tech 
> De rien


 :^_^:  Ecran blanc sur fond d'IE 11, Lapinsky 2021.




> Depuis que je fais du C toute la journée j'ai vraiment plus aucune frustration à déverser ici perso, vous pouvez parler de vos emmerdes haut niveau tant que vous voulez.


D'ailleurs tu n'as même plus le temps de passer avec toutes ces cases mémoires à libérer.  ::trollface:: 

:amorce une shitstorm sur les garbage collector:

----------


## rOut

Alors la solution c'est juste de tuer le process de temps en temps et de le relancer.

----------


## Cwningen

Est-ce que utiliser une MMU c'est faire du haut niveau ? C'est un peu facile, ça libère la mémoire automatiquement quand on ferme le processus.

----------


## raaaahman

@hijopr, tu vois, on ne les a pas trop perturbés.  ::P:

----------


## Awake

Bien sûr qu'on ne les a pas perturbé. Ces gens codent en C/C++, ils ont atteint l'éveil spirituel.

----------


## rOut

Les mecs qui font du C++ c'est les pires.

----------


## TheMothMan

Gloire à Bjarne Stroustrup !  :Prey:

----------


## vectra

Juste pour éviter d'écrire trop de bêtises dans un topic _presque_ sérieux...

En usage courant, on n'utilise a priori jamais de pointeurs pour une appli C++. On fait juste le distinguo entre copie et référence dans les cas usuels, c'est tout.
Les smart pointers sont là pour la désallocation automatique si tu as besoin de pointeurs: c'est dans la norme depuis 10 ans, c'était généralisé dans les grosses appli depuis 15.

TL;DR, le C++ a énormément évolué depuis l'époque où il m'a été enseigné. Et même pour de l'embarqué, on trouve souvent du C++11 -comprendre: moderne- comme base de départ. Surtout s'il y a du QT derrière pour l'interface.

----------


## Garrluk

> [...]c'est dans la norme depuis 10 ans, c'était généralisé dans les grosses appli depuis 15.


Ça c'est la théorie. Malheureusement il reste des tonnes de code en C++98, et il y a pas mal de boîtes qui continuent à ne pas vouloir passer en 11 pour ne pas avoir à installer autre chose que leur vielle Centos 6 ou du msvc13 qui tourne encore sous XP.
On a même eu une presta ya pas longtemps avec du code compilé avec un gcc 2.jesaisplusquoi parce que c'était la dernière version supporté sur l'OS qu'ils avaient sur leur serveur.
Ils voulaient passer sur une version plus récente, mais pas plus que la 4.5 donc pas de vrai support du C++11.
Et c'était même pas une histoire de vieux code legacy qui tourne depuis 20 ans, le truc était toujours en développement actif (et en prod) et était buggué jusqu'à la moelle.

----------


## vectra

Comme tu le dis, buggué jusqu'à la moelle.
C'est là que tu découvres l'intérêt de Qt et de boost, quand applicables. Parce que quand tu ne peux te faire une béquille avec ni l'un ni l'autre, je sais pas comment tu tiens tes programmeurs pour qu'ils restent. Ca devrait être interdit par la convention de Genève  ::sad::

----------


## Taro

C'est marrant parce que j'ai eu des expériences à l'opposé.

Tantôt de l'allocation explicite en tout début d'initialisation de l'appli, aucun mécanisme de smart-pointer, ni de libération de la mémoire (!). Plutôt pour ce qui est embarqué avec des notions de safety (avionique).
Tantôt de l'allocation explicite, et libération de la mémoire explicite également lorsque cohérent, sans mécanisme de smart-pointer (parce que ça ne sert à rien, en soi, si tu sais où et quand allouer/libérer et que y'a pas 36 cas possibles pour chacun). Plutôt dans des applis multimédia/calcul/besoin-de-perf.

----------


## vectra

Quand t'as de la perf, entre le SSE et le GPU, déjà tu alloues à la main pour respecter les contraintes d'alignement.
Mais vu le taf que tu vas faire dessus par la suite, tu peux te permettre de désallouer à la main ces buffers "spéciaux" sans "salir" ton code.

Dans le cas que tu cites, avec des buffers qui sont nécessaires toute la durée de vie du système, je ne vois pas l'intérêt de désallouer en effet.

----------


## Taro

En fait, plus que _"on va l'utiliser durant tout le cycle de vie de l'appli"_ c'était du _"on va devoir prouver par A+B qu'on a assez de mémoire, à tout instant, pour toutes les fonctionnalités du bouzin"_.

Une solution simple et qui permet de chiffrer et prouver le résultat étant alors : on alloue tout, TOUT, au démarrage de l'appli, et on ne libère plus rien.
Rien à redire sur cette solution, pour ce cas d'usage.

J'aurais à redire sur plein d'autres trucs, bien sûr.
 ::ninja::

----------


## Garrluk

> Comme tu le dis, buggué jusqu'à la moelle.
> C'est là que tu découvres l'intérêt de Qt et de boost, quand applicables. Parce que quand tu ne peux te faire une béquille avec ni l'un ni l'autre, je sais pas comment tu tiens tes programmeurs pour qu'ils restent. Ca devrait être interdit par la convention de Genève


Dans le cas dont je parle, je pense que boost ou qt ou ce que tu veux n'aurait pas changé grand chose au problème.
Les gars avaient déjà du mal à se servir des hashmap correctement alors rajouter de l'abstraction par dessus je ne suis pas sûr que ça les aurait aidé.

----------


## vectra

Pour info, std::map est présent depuis c++98 et QMap est supporté depuis un bail aussi, dans des versions qui tolèrent de vieux compilos.

----------


## acdctabs

Quelqu'un a déjà migré du symfony 3 en symfony 4 ?
Quelqu'un aurait genre un vrai "tuto" bien détaillé pour ça ?
La difficulté étant de passer d'un symfony/symfony à un truc moins lourd mais je ne sais pas vraiment par où commencer (j'en suis encore à l'étude) et c'est un peu la galère car je dois plus ou moins travailler hors ligne (mais j'ai l'équivalent de packagist.org en interne, rien pour flex par contre).
(ouais c'est pas clair comme post mais avant d'aller sur des sites +spécialisés je demande au cas où)

----------


## GrandFather

Je pense que les excellents tutos de SymfonyCasts devraient t’aider à bien débroussailler le problème : https://symfonycasts.com/screencast/...4-deprecations

Tu n’auras alors plus qu’à compléter avec la doc officielle de Symfony.

----------


## acdctabs

> Je pense que les excellents tutos de SymfonyCasts devraient t’aider à bien débroussailler le problème : https://symfonycasts.com/screencast/...4-deprecations
> 
> Tu n’auras alors plus qu’à compléter avec la doc officielle de Symfony.


Ouais je connaissais celui-là, je l'avais trouvé rapidement au début de mes recherches.
Je sais pas si ça vaut le coup de payer en fait pour ce genre de tuto. Après je monte en compétence tranquillement. Le gros problème que j'ai c'est que j'ai genre 1400+ truc dépréciés alors que dans les tutos les mecs en ont 5.
Je sais pas trop comment je dois évaluer derrière les trucs dépréciés dans le sens est-ce que ça veut vraiment dire que ça sera incompatible symfony 4 ?
Puis dans le même temps j'ai des bugs/evols à faire, des problèmes de serveurs à gérer, on me demande de rajouter des contextes par rapport à un truc de login externe mais j'ai pas trop compris encore ce que ça impliquait... Puis forcément comme il y a trop de "chefs" faut aussi remplir plein de fiche et faire de la doc sur à peu près tout.
Bref, vivement la retraite  ::ninja::

----------


## Awake

Surtout que Symfony 5 est sorti depuis un moment  ::P: 

Les pages de migration de version sur la doc officielle sont une source sûre. Mais de mémoire il y a de très gros changements niveau services/dependency injection entre la 3 et 4, ça ne se fera pas sans mettre les mains dans le cambouis.

----------


## acdctabs

Non mais la migration Symfony 4 vers Symfony 5 ne m'inquiète absolument pas.
Ils ont par contre changé la structure entre le 3 et le 4 et le fait de devoir faire ça en ligne complique la tâche pour Flex.

----------


## Kamikaze

Yo les copains je me cherche un truc bien pour faire de la data visualization, je pars sur C++ mais je reste ouvert.

Pour l'instant j'ai repéré le projet ROOT du CERN https://root.cern/
matplotlib-cpp qui est simplement un wrapper autour de la lib python https://github.com/lava/matplotlib-cpp

https://www.qcustomplot.com/ que je viens de tester et qui fonctionne bien avec des fonctionnalités de base sympa (zoom à la molette etc.)

- - - Mise à jour - - -

Je sais qu'en python y'aura sûrement de quoi faire mon bonheur.

En gros je veux faire surtout de la visualisation de time series, si possible avec possibilité de zoom etc.
Et idéalement avec un module web basique qui permet d'embed le résulat dans une page sans prise de tête

----------


## Orhin

https://plotly.com/python/ ?

Après pour de web, ben le mieux serait d'utiliser une librairie JS (au hasard https://plotly.com/javascript/  ::ninja:: ) non ?
Sauf si tu n'as pas besoin que tes graphes soient interactifs en web.

----------


## Kamikaze

Parfait et belle doc, je prends

----------


## Helix

> https://plotly.com/python/ ?
> 
> Après pour de web, ben le mieux serait d'utiliser une librairie JS (au hasard https://plotly.com/javascript/ ) non ?
> Sauf si tu n'as pas besoin que tes graphes soient interactifs en web.


Si besoin (ou pas) d'interaction en web, R est une bonne solution avec Shiny : https://shiny.rstudio.com
Plotly est d'ailleurs dispo en R.

----------


## GrandFather

Sir Clive Sinclair vient de nous quitter. Je lui dois - et je ne suis certainement pas le seul - une partie de ma vocation.  :Emo:

----------


## gros_bidule

En toute franchise, combien ont eu un vieil ordi (amstrad, sinclair, amiga, etc) très jeune pour jouer, puis ont complètement oublié l'informatique (si on peut appeler ça de l'informatique) au profit des consoles qui étaient quand même 1000 fois mieux, pour tomber finalement plus ou moins par hasard sur un cours d'info au lycée 10~15 ans plus tard ?  ::P: 
Les figures de l'info c'est un peu comme les artistes et les politiques : à leur décès, on se sent redevable de leur héritage, alors que ça fait 15 ans qu'on les avait complètement oublié, voir pire, on n'en avait jamais entendu parler (eux ou leurs travaux) jusque là.

Ca n'enlève rien au crédit de l'artiste, bien entendu.

PS : je ne te vise absolument pas ^^, je pense plutôt à tous les tweet que l'on va lire sur Twitter de gens qui disent devoir leur passion de l'info à Sinclair. Et dans 6 mois ils la devront aussi à TrucBidule, puis Machin. La purge.

----------


## GrandFather

J'ai eu mon premier micro, un ZX81 - pas vraiment taillé pour le jeu  ::ninja::  -, à 12 ans et je n'ai jamais cessé d'en posséder depuis. Je n'ai eu ma première console - une game boy - qu'à vingt ans révolus, donc non je ne me sens pas vraiment visé. Et dans ma génération, parmi ceux qui peuvent se considérer comme des "geeks" (le terme était alors inconnu), on est assez nombreux à avoir ce profil, et à entretenir avec cette époque et ses acteurs un rapport affectif forcément teinté de nostalgie.  ::): 

TL;DR : Oui, je suis vieux  :Fouras:

----------


## gros_bidule

Yeah, une sacrée époque quand même  ::):  C'est peut être une chance qui ne se reproduira pas dans l'informatique.

----------


## Teocali

> En toute franchise, combien ont eu un vieil ordi (amstrad, sinclair, amiga, etc) très jeune pour jouer, puis ont complètement oublié l'informatique (si on peut appeler ça de l'informatique) au profit des consoles qui étaient quand même 1000 fois mieux, pour tomber finalement plus ou moins par hasard sur un cours d'info au lycée 10~15 ans plus tard ? 
> Les figures de l'info c'est un peu comme les artistes et les politiques : à leur décès, on se sent redevable de leur héritage, alors que ça fait 15 ans qu'on les avait complètement oublié, voir pire, on n'en avait jamais entendu parler (eux ou leurs travaux) jusque là.
> 
> Ca n'enlève rien au crédit de l'artiste, bien entendu.
> 
> PS : je ne te vise absolument pas ^^, je pense plutôt à tous les tweet que l'on va lire sur Twitter de gens qui disent devoir leur passion de l'info à Sinclair. Et dans 6 mois ils la devront aussi à TrucBidule, puis Machin. La purge.


je me sens bizarrement visé  :tired:

----------


## vectra

Ben disons que quand tu commences un peu plus tard par un Amiga, c'est un peu plus facile de rester du côté "lumineux" de la force. Transition directe au PC et puis marre...
Les Amiga avaient un OS moderne frère de sang des Unix, un interprète et un manuel BASIC en dotation standard, et emacs (ok je l'utilisais pas). Donc il n'y avait pas que les jeux, ne serait-ce que pour apprendre à pirater les jeux  ::ninja:: 

Le meilleur magazine Amiga de l'époque (Amiga Format), t'avais au moins une disquette de jeux et une disquette d'utilitaires par numéro. C'est comme ça que j'ai chopé Amos Pro notamment: y'a pire pour commencer la programmation des jeux voire tout court.

----------


## Kamikaze

Yo des canards qui utilisent mongocxx ici?

J'ai des perfs de merde quand j'itère sur un cursor (j'itère juste sur le cursor, j'accède à rien, références, pas de copies) pour une petite requête et j'essaye de trouver comment investiguer (6 putain de secondes pour 500 items)

Quand je fais la même requête via un soft tier j'ai des perfs convenables.

Je vais check que c'est pas une histoire de projection car y'a des données binaires dans les objets (oui c'est idiot mais ça vient pas de moi), rien d'énorme mais p'têt que ça ralentit?

Je testerai demain en projetant dans mon code et en forçant l'affichage de tous les objets dans le logiciel tier (studio 3T), voir si ça change un truc.

J'ai testé si c'était pas du caching et s'pas ça. J'pige pas la diff entre mon appli et Studio 3T. Ultime alternative c'est que le driver mongocxx est codé à la pisse, j'utilise la dernière version.

----------


## Kamikaze

Wokay c'était bien une affaire de projection (et mongo c'est de la merde) j'ai des documents assez "volumineux", 0.5MB (t'façon mongo est limité à 16MB). Et si je choppe tout le document les perfs puent la merde, ce qui est inacceptable car en terme de vitesse de transfert vis à vis de ma bandwidth et du volume de données dont on parle ça n'a aucun sens.

Je vais farfouiller un peu voir si y'a moyen d'avoir des perfs correctes. Je veux que le download d'une collection entière via le code soit environ aussi rapide que ce que ma bandwidth permet.

(et j'arrive à faire crasher studio 3T juste avec 300MB...)

---

Bon en vrai c'est juste que l'usage de Mongo fait par ma boite est stupide, si on veut stocker du binaire """volumineux""" vaut mieux utiliser autre chose, simplement le filesystem, je sais pas si y'a des alternatives dédiées pour des blobs binaires dans une DB. En 2s sur stack overflow ça parle de simplement pointer vers le FS via la DB, ce qui me parait honnête.

----------


## war-p

> Wokay c'était bien une affaire de projection (et mongo c'est de la merde) j'ai des documents assez "volumineux", 0.5MB (t'façon mongo est limité à 16MB). Et si je choppe tout le document les perfs puent la merde, ce qui est inacceptable car en terme de vitesse de transfert vis à vis de ma bandwidth et du volume de données dont on parle ça n'a aucun sens.
> 
> Je vais farfouiller un peu voir si y'a moyen d'avoir des perfs correctes. Je veux que le download d'une collection entière via le code soit environ aussi rapide que ce que ma bandwidth permet.
> 
> (et j'arrive à faire crasher studio 3T juste avec 300MB...)
> 
> ---
> 
> Bon en vrai c'est juste que l'usage de Mongo fait par ma boite est stupide, si on veut stocker du binaire """volumineux""" vaut mieux utiliser autre chose, simplement le filesystem, je sais pas si y'a des alternatives dédiées pour des blobs binaires dans une DB. En 2s sur stack overflow ça parle de simplement pointer vers le FS via la DB, ce qui me parait honnête.


Beaucoup de DB permettent de stocker des blob binaires, mais c'est rarement une bonne idée (pour pas dire autre chose) le mieux, comme tu le dis est un pointer vers un fs (distant ou local  :;): ).

----------


## Tramb

> En toute franchise, combien ont eu un vieil ordi (amstrad, sinclair, amiga, etc) très jeune pour jouer, puis ont complètement oublié l'informatique (si on peut appeler ça de l'informatique) au profit des consoles qui étaient quand même 1000 fois mieux


Folie, hérésie.

----------


## Dross

> Bon en vrai c'est juste que l'usage de Mongo fait par ma boite est stupide, si on veut stocker du binaire """volumineux""" vaut mieux utiliser autre chose, simplement le filesystem, je sais pas si y'a des alternatives dédiées pour des blobs binaires dans une DB. En 2s sur stack overflow ça parle de simplement pointer vers le FS via la DB, ce qui me parait honnête.


Si tu veux un truc local comme un stockage de blob cloud (Azure Blob etc) t'a MinIO aussi. Sinon FS en effet.

----------


## Getz

Mongodb propose gridFS sinon, ça n'a pas l'air ce qui est utilisé dans ton cas de figure non ?

----------


## Kamikaze

Ouais c'est ce que je leur ai dit, mais ils m'ont répondu "on a eu des mauvais retours concernant gridFS, parait que c'est nul". M'enfin s'pas grave je réglerai ça plus tard

----------


## Kamikaze

C'est dingue les trucs qu'on me demande au taff, des trucs à la limite de la légalité. Les mecs n'ont vraiment aucune culture informatique, ça me rappelle, dans une moindre mesure, les histoires "à la Kerviel" ou Tom Hayes pour ceux qui connaissent. Le management qui te demande un truc borderline illégal. Et si jamais ça pète je suis pas sûr qu'ils assument leurs conneries le torse bombé.

Mais bon du coup je les éduque un peu sur le sujet. 

Je suis curieux de savoir si vous avez rencontré des situations similaires en dev.

Genre grosso modo un mec qui te demande de déchiffrer du traffic réseau privé ou d'automatiser des trucs avec des implications légales alors que l'heuristique n'est pas parfaite.

Genre imaginez devoir fabriquer un robocop avec de la reconnaissance faciale, au moindre glitch c'est coup de fusil à pompe sur un innocent. Bon dans mon cas loin d'être aussi extrême, mais c'est pour donner une idée

----------


## gros_bidule

Pas à ce point ^^. Le pire que j'ai vu, c'est un projet pour un gros FAI où l'on stockait les infos client sur le cloud US de MS (version pro de onedrive), et les chefs nous ont bien demandé - lors d'une réunion - de ne surtout pas ébruiter cela (grosses sanctions si ça venait à se savoir, la loi nous obligeant à stocker ces infos en France).
C'était il y a qques années, ils ont du rentrer dans l'ordre depuis (je dis ça, je n'en sais rien), ché pas, je ne bosse plus pour ces andouilles (grosse ESN).

Aussi, lors de premier vrai taff, petite boite avec un vieux patron bien patriarcal biclassé commercial véreux, il demandait (en riant à moitié, il insistait bien..) que qqun postule chez le gros concurrent pour qu'il nous révèle des infos stratégiques. Je me dis qu'un stagiaire un peu crédule aurait pu accepter, car à cet âge on se prostitue un peu qd même ^^.

Enfin voilà, de petites magouilles aux conséquences potentiellement bien sales, mais pas de mise en danger de la vie d'autrui ^^.
Le dev c'est cool  :Cigare:

----------


## Awake

Quand je débutait, mon boss m'avait demandé de faire des fausses captures d'écran sous photoshop pour montrer l'avancée du dev à un client (j'avais refusé). Rien de dramatique donc.

----------


## Taro

De mon côté la triche était plutôt vers la loi côté salarié, quand j'étais en ESN/SSII. En gros ils essayaient de me gruger sur des trucs à droite à gauche.
Pas eu de manips complètement pétées à faire au détriment des clients de l'ESN/SSII.

Et dans les boites où j'étais embauché en direct j'ai pas eu à faire de trucs comme ça au détriment des clients/utilisateurs finaux.

----------


## Teocali

le plius gros que j'ai eu c'est "On sait que c'est pas très clean si la CNIL tombe dessus, mais si on veut sortir dans les temps, faut le faire. On corrigera quand on aura le temps"... après, est=ce que le temps venait, ça....

----------


## Taro

Le coup du "on corrigera/améliorera plus tard" c'est du pipeau, une fois le truc en prod plus jamais ça ne bougera.  :^_^:

----------


## canardgrincheux

par tout hasard est ce que quelqu'un a déjà utilisé WSO2 APIManager , c'est un outil de gestion des api (rest/soap et co.) , j'aurais quelques questions au cas où ?

----------


## Whiskey

Ola

Pardon si ce n'est pas la bonne section, mais j'aurais aimer savoir si quelqu'un a déjà utiliser Flutter pour du développement mobile ? Est ce que c'est puissant ? Ca vaut la peine de ce former dessus (avenir, capacité, etc) ? Mieux vaut passer par Flutter ou rester sur Kotlin/Java ?

merci.

----------


## Orhin

> Ola
> 
> Pardon si ce n'est pas la bonne section, mais j'aurais aimer savoir si quelqu'un a déjà utiliser Flutter pour du développement mobile ? Est ce que c'est puissant ? Ca vaut la peine de ce former dessus (avenir, capacité, etc) ? Mieux vaut passer par Flutter ou rester sur Kotlin/Java ?
> 
> merci.


Pas de soucis, ça a sa place ici.

Je ne l'ai pas utilisé perso (je suis plutôt sur du Ionic et ReactNative), mais des collègues dev mobile l'utilisent au quotidien (en plus de faire du Kotlin sur d'autres projets).

Globalement leurs retours :
- c'est puissant pour du dev hybride sur Android et iOS
- niveau perf c'est meilleur qu'Ionic et assimilés, dans le même ordre d'idée que ReactNative
- ça reste jeune donc les plugins pour accéder aux ressources natives des téléphones sont limités mais ça grandit vite
- l'intégration de code natif (en cas d'absence de plugin pour une fonctionnalité particulière par exemple) est plutôt simple
- niveau avenir c'est dur de juger, c'est pas mal à la mode en ce moment mais qui sait ce que réserve l'avenir

----------


## Whiskey

> Pas de soucis, ça a sa place ici.
> 
> Je ne l'ai pas utilisé perso (je suis plutôt sur du Ionic et ReactNative), mais des collègues dev mobile l'utilisent au quotidien (en plus de faire du Kotlin sur d'autres projets).
> 
> Globalement leurs retours :
> - c'est puissant pour du dev hybride sur Android et iOS
> - niveau perf c'est meilleur qu'Ionic et assimilés, dans le même ordre d'idée que ReactNative
> - ça reste jeune donc les plugins pour accéder aux ressources natives des téléphones sont limités mais ça grandit vite
> - l'intégration de code natif (en cas d'absence de plugin pour une fonctionnalité particulière par exemple) est plutôt simple
> - niveau avenir c'est dur de juger, c'est pas mal à la mode en ce moment mais qui sait ce que réserve l'avenir


Hum je vais faire des tests, voir si j'accroche. J'ai déjà regarder pas mal de petit tuto, présentation dessus et cela donne bien envie. Merci en tout cas pour ta réponse, je reste bien entendu ouvert a toute info sur le sujet  ::P:

----------


## Teocali

> Ola
> 
> Pardon si ce n'est pas la bonne section, mais j'aurais aimer savoir si quelqu'un a déjà utiliser Flutter pour du développement mobile ? Est ce que c'est puissant ? Ca vaut la peine de ce former dessus (avenir, capacité, etc) ? Mieux vaut passer par Flutter ou rester sur Kotlin/Java ?
> 
> merci.


Je n'utilise pas, mais l'application mobile de mon client (développée par un prestataire externe) est codée en flutter. D'après ce que j'ai compris c'est bien bien puissant, oui. Et Google pousse très fort derrière. Après, toujours d'après ce prestaire externe, ça ne vaut pas du dev natif en terme de puissance. On est parti sur du flutter pour pas avoir a coder la même application deux fois, et les fonctionnalité de l'appli mobile ne nécessitait pas d'accès natif.

En gros, flutter reste la meilleur solution pour du dev mobil cross-platform. Mais si tu es lié à une plateforme unique, mieux vaut rester sur la solution native.

- - - Mise à jour - - -

Allez, j'enchaine avec une question de mon cru.

Je me demandais si vous connaissiez une alternative a l'AOP qui utilise les outils Kotlin classique ? je sais qu'une solution de préférence reste l'utilisation de fonction cadre (genre au lieu de



```
@Transaction
fun test() {
...
}
```

on utilise


```
fun test() = withTransaction() {
...
}
```

mais ça n'est pas applicable à tous les cas, typiquement si on souhaite accéder aux parametre de la fonction de manière générique. Je m'explique



```
@Cacheable ("cacheName")
fun test(int:a):String {
...
}
```

l'annotation @Cacheable indique qu'il faut mettre en cache le resultat de l'appel, en utilisant les parametres du dit-appel comme clé. Faisable sans souci avec de l'AOP. Mais en kotlin... 

Le truc qui s'en approcherait le plus serait 



```
fun test(int:a):String= cacheable("cacheName", a) {
...
}
```

Et rien ne m'empeche d'avoir comme signature pour la methode Cacheable le code suivant.



```
fun cacheable(cacheName:String, varargs args:Any?) {
...
}
```

Le problème vient qu'en cas de refactoring d'une méthode il fut également penser à mettre a jour l'appel a cacheable.

Je me demandais donc si vous aviez une solution qui permettrait le meilleur des deux mondes ?

----------


## Orhin

> En gros, flutter reste la meilleur solution pour du dev mobil cross-platform. Mais si tu es lié à une plateforme unique, mieux vaut rester sur la solution native.


Pas complètement d'accord, le choix va aussi dépendre :
- des compétences de l'équipe de dev
- de la nécessité d'accéder aux ressources natives du téléphone
- du contexte dans lequel s'inscrit le projet

Et y'a plein de scénarios possibles :
- tu veux faire des trucs touchy avec le GPS/BLE/système de fichier => go natif (même si tu dev pour Android et iOS)
- t'as besoin de bonne perfs (visu 3D par exemple ou gros traitement local) => go natif/Flutter
- tu veux accéder un peu aux ressources natives et dev pour Android et iOS => go Flutter/Ionic/ReactNative
- tu veux faire une appli simple ET une PWA => go Ionic
- tu veux partager une partie du code métier entre ton appli et ton site => go ReactNative/Ionic
- tu veux faire une appli simple sur une plateforme en minimum de temps => go ce sur le quoi t'as le plus d'xp
- etc

----------


## Whiskey

> Je n'utilise pas, mais l'application mobile de mon client (développée par un prestataire externe) est codée en flutter. D'après ce que j'ai compris c'est bien bien puissant, oui. Et Google pousse très fort derrière. Après, toujours d'après ce prestaire externe, ça ne vaut pas du dev natif en terme de puissance. On est parti sur du flutter pour pas avoir a coder la même application deux fois, et les fonctionnalité de l'appli mobile ne nécessitait pas d'accès natif.
> 
> En gros, flutter reste la meilleur solution pour du dev mobil cross-platform. Mais si tu es lié à une plateforme unique, mieux vaut rester sur la solution native.



Ok merci pour les précisions, pour le moment j'aimerais surtout développer sur Android (suis pas tres mac) mais a terme si cela me plait, je verrais aucun inconvenient à une solution qui soit "compatible" sur divers os. 

--- 

J'ai tester un peu flutter , premier projet basic sous android studio, ca marche plutot bien et ca a l'air assez fluide (si on omet bien sur la lenteur de l'émulateur d'android). Par contre j'aime bien le fait de pouvoir utiliser chrome ou edge pour simuler le portable, du moins pour l'affichage.

----------


## Orhin

Ah ça tu vas être obligé de garder Android Studio pour gérer cette partie en effet.
Après ça reste un IDE basé sur IntelliJ Idea, donc si t'as l'habitude d'utiliser un IDE Jetbrains tu vas pas être perdu sur Android Studio.  ::P: 

Pour le développement iOS, tu vas avoir le même "soucis".
Il faut que tu sois sur Mac et que tu installes Xcode pour avoir le sdk permettant de compiler les applis (et ce quelque soit la techno utilisée).

----------


## Whiskey

> Ah ça tu vas être obligé de garder Android Studio pour gérer cette partie en effet.
> Après ça reste un IDE basé sur IntelliJ Idea, donc si t'as l'habitude d'utiliser un IDE Jetbrains tu vas être perdu sur Android Studio. 
> 
> Pour le développement iOS, tu vas avoir le même "soucis".
> Il faut que tu sois sur Mac et que tu installes Xcode pour avoir le sdk permettant de compiler les applis (et ce quelque soit la techno utilisée).


Et encore un autre problème, plus important.... PHPStorm ne gère pas kotlin ni java.... pas de plug officiel dispo. Donc en gros, je dois juste me contenter de la syntaxe coloré ^^. Bon ben go pour android studio en parallele  ::P: 

Pour le mac ca va attendre pour le moment  ::P: 

Bon en tout cas merci pour vos avis, je pense me prendre une ou 2 formation sur Udemy, histoire de creuser un peu sur Flutter, et essayer de pratiquer dans mon coin.

--- 

A titre d'info, j'ai virer android studio pour intellij, c'est plus classe ! (et mes plugins sont aussi mieux compatible dessus ^^ )

EDIT 3615 Ma life: J'ai finalement virer phpstorm pour tout regrouper sur IntelliJ, ca va me faire bizarre de developper laravel sur IDEA  ::P:

----------


## Whiskey

Ola,

Bon, j'ai un petit problème de développement avec* ElectronJS* (C'est de la technologie web, mais pour faire au final une application desktop, désolé si mauvais forum) :

Pour la petite histoire, en ce moment je fait du *ReactJS* (que j'aime bien) et j'utilise le script *create-react-app* pour générer les sources de base de mon application. Dans mon cas j'utilise :



```
create-react-app nomdeprojet --template typescript-electron
```

Cette commande, comme vous pouvez en douter, me créer un squelette de programme basé sur reactjs, electron et typescript. Quand je lance ca reste fonctionnel.

Le soucis ? Cela viens du coté d'electron, dans le dossier src-main, j'édite le fichier main.ts (fichier maître pour electron), je rajoute en haut après les imports la ligne suivante :



```
app.setPath('userData', 'F:/Dev/backup/nomduprojet/')
```

Cette commande sert normalement a creer les fichier que chrome a besoin lors de son execution. En temps normal, il le créer dans le dossier appData/Roaming. Résultat, quand je lance j'ai bien les fichier de chrome dans mon dossier backup (F:/Dev/backup/nomduprojet/), à l'exception, qu'il continue a me créer un dossier dans appData/roaming avec un dossier Directories...

J'ai regardé un peu sur le net, il dise qu'il faut mettre à jour le paquet Electron sur le projet. Ce que j'ai fait, et cela marche, il ne me créer plus du tout le dossier Directories, ceci dit il continue a me créer un dossier vide dans appData/roaming. Et la je sèche un peu  ::cry:: 

Quelqu'un a t'il une idée comment ne plus avoir un dossier dans appData/roaming et qu'il met tout dans le dossier cité dans userData ?

Merci d'avance.

****

Bon je suis un gros ....



Dans le fichier source il y a :



```
if (isDev) {
    installExtension([REACT_DEVELOPER_TOOLS])
      .then(() => {
        mainWindow.loadURL('http://localhost:3000');
        mainWindow.webContents.openDevTools();
      })
      .catch(err => console.log('An error occurred: ', err));
  } else {
    mainWindow.loadFile(path.join('build', 'index.html'));
  }
```

Que j'ai remplacé par :



```
if (isDev) {
    mainWindow.loadURL('http://localhost:3000');
  } else {
    mainWindow.loadFile(path.join('build', 'index.html'));
  }
```

Apparemment c'est l'extension qui posait ce soucis. Désolé pour le dérangement.

----------


## BentheXIII

Hello, 

J'utilise ce framework (C/C++ interfacé en Python via SWIG) dans le cadre mon travail  . Je n'ai aucun soucis dans le cadre d'une installation via un python venv (et python 3.7). 

J'ai voulu tenter une installation au sein d'un environnement virtuel Anaconda afin de pouvoir m'interfacer avec d'autres outils uniquement disponibles dans ce type d'environnement.  Malheureusement, je me suis retrouvé avec pléthore de comportements complètement ubuesques de la librairie installée dans le conda venv : compilation achevée sans erreurs, mais des tests unitaires qui pètent partout (non pas du fait d'exceptions mais du fait de fonctions ayant tout à coup des comportements étranges).

Par exemple, si jamais un unit test python A appelant matplotlib (plt.show() par exemple) venait à tourner avant un autre test B appelant la fonction std::stod() dans un objet C++ au travers de swig , alors std::stod() ne retourne plus que 0 (qu'importe son argument). D'où l'échec de l'unit test B si A a tourné avant (alors que B en stand alone passe).

Je n'ai jamais rencontré pareil souci, et je dois vous avouer que je suis pas hyper confiant dans ma capacité à me plonger dans SWIG sans idée de ce qui pourrait s'y passer (si c'est bien le responsable). 

Auriez-vous des idées ou des pistes à explorer pouvant expliquer ce qui se passe  ::unsure::  ?

----------


## yoZe

Bonjour les canards,

Je viens de créer une petite application web en c# sous asp.net mvc en net.framework, j'utilise aussi une modeste bdd qui tourne directement sur mon pc. Mon application étant terminé je cherche un moyen de la déployer et d'y faire tourner la bdd. C'est une application test, qui a pour but de me former donc je ne cherche pas à la déployer sur un serveur distant payant.
J'ai dans un tiroir un raspberry pi 4 qui traine, j'aurai voulu savoir s'il était possible, d'installer une distribution dessus pour déployer et faire tourner mon application web?
Merci pour votre aide.

----------


## Robix66

Ca devrait être largement possible.
Tu auras probablement des réponses plus précises dans le topic Raspberry : http://forum.canardpc.com/threads/69...e-Raspberry-Pi

----------


## gros_bidule

Après le rPi 4 ça sera une distro Linux ARM64 je crois bien ? Tu dois avoir un runtime C# sous Linux, reste à voir s'il existe en ARM, ARM64 qui plus est.
Même réflexion pour la compatibilité de la base de données. 
A part ça, ça sera lent car le CPU reste faiblard, mais tu n'as peut être pas d'impératif sur les perfs. Idem pour le stockage : si carte SD, ça va mouliner. Mieux vaut un disque dur ou SSD externe. Ou travailler en RAM (le rPi a 4Go ? ché plus).
Et attention à la chauffe : le rPi 4 chauffe trop, contrairement aux précédents modèles. Prévoi un radiateur ou autre solution de refroidissent si tu comptes beaucoup solliciter le CPU.

----------


## Taro

Quand j'avais regardé pour le 3B+ les distributions "grand public" disponibles en Aarch64 (c'est le nom qui a été donné à l'archi ARM 64bits) n'étaient pas nombreuses.

Après avoir testé et éliminé les combos distributions/environnements de bureau qui n'étaient pas à peu près fluides ne serait-ce que sur le bureau, en usage surf ou bureautique, j'avais opté pour la OpenSUSE du moment avec LXDE si je me souviens bien.

----------


## Cwningen

> Tu dois avoir un runtime C# sous Linux, reste à voir s'il existe en ARM, ARM64 qui plus est.


Chez Debian, c'est bon : amd64, arm64, armel, armhf, i386, mipsel,	ppc64el, s390x.

----------


## Dross

> Je viens de créer une petite application web en c# sous asp.net mvc en net.framework


Alors .Net Framework (3.5, 4, 4.5, etc) ça ne tournera pas sous linux, c'est le vieux framework, c'est Win only. 

Mais heureusement pour toi on a le nouveau (enfin ça fait déjà quelques années qu'on l'a) : ASP.NET Core, avec .NET Core, ça, ça va tourner sous linux (ou docker si tu veux dockeriser), ou sous sa dernière mouture : .NET 5 (via ASP.NET Core toujours). 

Donc je te conseille de migrer déjà ton projet en ASP.NET Core via .NET Core 3.1 ou .NET 5 (tant qu'à faire, prends le dernier) si tu veux pouvoir l'héberger facilement après. 
Après pour l'hébergement sur Pi, y'a plein de tuto sur internet (regarde "ASP.NET Core + Raspberry") qui te montrerons comment publier pour linux-arm et avoir un binaire compatible avec cette archi.

----------


## yoZe

Super, merci à vous tous pour vos réponses. 
C'est un petit projet très modeste pour valider un titre rncp donc niveau perf je n'ai pas besoin de grand chose, il faut juste que je puisse valider le module ou j'ai besoin de déployer une application web.
Je vais donc voir pour migrer sur ASP.NET Core en espérant que ce ne soit pas trop différent de ASP.NET Framework.
Merci à tous en tout cas !

----------


## Cwningen

> Alors .Net Framework (3.5, 4, 4.5, etc) ça ne tournera pas sous linux, c'est le vieux framework, c'est Win only. 
> 
> Mais heureusement pour toi on a le nouveau (enfin ça fait déjà quelques années qu'on l'a) : ASP.NET Core, avec .NET Core, ça, ça va tourner sous linux (ou docker si tu veux dockeriser), ou sous sa dernière mouture : .NET 5 (via ASP.NET Core toujours). 
> 
> Donc je te conseille de migrer déjà ton projet en ASP.NET Core via .NET Core 3.1 ou .NET 5 (tant qu'à faire, prends le dernier) si tu veux pouvoir l'héberger facilement après. 
> Après pour l'hébergement sur Pi, y'a plein de tuto sur internet (regarde "ASP.NET Core + Raspberry") qui te montrerons comment publier pour linux-arm et avoir un binaire compatible avec cette archi.


Je ne suis pas expert de .NET mais il me semble que mono supporte les anciennes versions (en tout cas certains modules) : https://www.mono-project.com/docs/ab...compatibility/ Je sais pas si ça suffit pour yoZe mais ASP.NET MVC est dans la liste.

----------


## yoZe

Merci pour l'info mais dans tout les cas je comptais me former en Asp Net Core. Toutes les esn qui m'ont contactées privilégiaient ce framework dans leurs recherches de candidats.

----------


## Dross

> Je ne suis pas expert de .NET mais il me semble que mono supporte les anciennes versions (en tout cas certains modules) : https://www.mono-project.com/docs/ab...compatibility/ Je sais pas si ça suffit pour yoZe mais ASP.NET MVC est dans la liste.


Mono c'était bien quand on pouvais pas faire autrement, aujourd'hui hors cas particulier je vois pas l'intérêt de s'emmerder avec.

Aujourd'hui se mettre à ASP.NET faut aller directement sur ASP.NET Core (plein d'absurdité de l'ancien framework a été corrigé, comme la dualité de merde entre ASP.NET MVC et ASP.NET API qui n'apportait que des emmerdes), sous .NET Core 3.1 ou .NET 5 (ce dernier de préférence). 

C'est multi-plateforme, c'est performant (archi modulaire par rapport à l'ancien) et c'est maintenu par MS. Sans parler du tooling et middleware qui est assez conséquent dans ce domaine.

----------


## Awake

Salut !

Petite question NodeJS : j'ai une app node qui spawn des sous-processes et les sous-processes communiquent de façon bidirectionnelle avec l'app via "process.send". Mais cette app va devoir spawn des centaines de subprocesses, qui vont tous régulièrement communiquer avec l'app. N'y a-t-il pas un risque de goulot d'étranglement ? Je n'arrive pas trop à trouver d'informations là dessus, vous savez quel protocole est utilisé et quels sont ses limitations ?

----------


## Kamikaze

> Salut !
> 
> Petite question NodeJS : j'ai une app node qui spawn des sous-processes et les sous-processes communiquent de façon bidirectionnelle avec l'app via "process.send". Mais cette app va devoir spawn des centaines de subprocesses, qui vont tous régulièrement communiquer avec l'app. N'y a-t-il pas un risque de goulot d'étranglement ? Je n'arrive pas trop à trouver d'informations là dessus, vous savez quel protocole est utilisé et quels sont ses limitations ?


Réponse mega en retard mais réponse quand même: Je touche rarement à Node mais ca va créer un sous process au niveau de l'OS de ce que j'ai lu (un simple fork). Donc sur Linux tu vas être limité par le pid (process id, cat /proc/sys/kernel/pid_max, j'imagine).
Sous Windows ils appellent ça les Handles, et c'est le même genre de limitation.
Bref je pense que tu vas être limité par l'OS. Tant que tu restes dans une limite raisonnable ça devrait aller, une centaine ça ira tranquille, mais il faut pas que ça augmente indéfiniment.
En vrai tu pourrais aller aux alentours de plusieurs milliards mais là ça serait une indication que tu dois changer de design (utiliser des threads ou autre).

Sinon pour aller plus loin, imaginons que chaque sous process alloue 1 GB de RAM, là tu vas bien sûr être rapidement limité par la RAM avant d'être limité par les pid.

-------------

Sinon je viens de passer tout plein d'entretiens pour des boites. Chui toujours en poste mais je cherche à évoluer un peu. J'ai beaucoup d'expérience mais j'ai l'impression que je suis limité par mon âge (j'ai tout de même 30 piges, je me trouve vieux), ce que je trouve assez stupide même si c'est bien sûr raisonnable d'accorder de la valeur à l'expérience qui vient avec le temps etc. et qu'il faut être prudent quand un mec jeune prétend tout savoir, etc. etc.

Je dis ça parce que toutes les boites en question, malgré avoir clairement hoché la tête quand je leur ai décrit le genre de projet que j'ai mené de bout en bout, m'ont demandé de passer des tests de programmation assez bidons.

C'est un peu toujours pareil, en gros ils veulent voir comment je code. Alors dans l'idée j'adhère, mais dans l'exécution...

Je pense qu'une simple discussion sans avoir à écrire la moindre ligne de vrai code serait bien plus agréable, je trouve ça pénible de regarder quelqu'un taper sa ligne de boilerplate pour afficher un résultat.
Y'a certes de la valeur à ce genre de situation mais à chaque fois je dois vraiment me forcer pour taper le truc que je sais bien évidemment faire.

À leur décharge ça se finit souvent par une discussion, qui pour le coup est intéressante, mais durant l'exercise on se perd parfois dans de ces détails...

Le truc c'est que si t'es rigoureux, le moindre exercice, aussi simple qu'il soit devient très complexe.

En exemple que j'ai vécu:

Un mec qui me demande un algo pour vérifier si un nombre est premier, le mec connait même pas l'hypothèse de Riemann, en gros il voulait juste me voir faire une boucle et des divisions. On parlera même pas de la gestion d'overflow ou d'une quelconque optimisation, ni de la théorie des nombre de manière générale (j'avais déjà posté celle là sur le topic je crois).

Ensuite un mec qui me demande de trouver des duplications dans une string. J'ai implémenté ça de manière générique et j'ai du lui expliquer les problèmes d'encoding vu que lui n'avait pas pensé que pouvait y avoir autre chose que de l'ascii dans l'input. Encore une fois je suis allé trop loin, et je me demande s'il a compris le raisonnement.

Ensuite j'ai mangé une recherche de lien le plus court entre 2 listes. En gros t'as une liste de noeuds A (2, 5, 9) et une liste de noeuds B (12, 0, 4)

et tu dois trouver (4, 5), distance de 1 (leur position dans la liste compte pas).

Problème éminement soporifique quand tu connais les 2 listes, mais plus intéressant en réalité quand c'est des données vivantes et que la "topologie" (taille des listes, valeur des noeuds) change et que tu dois recalculer le tout. 

Bref, du coup je me suis marré et pour les 2 dernières questions j'ai résolu ça à la compilation (compile-time) vu que les données d'entrée sont connues, et du coup le programme est vide et retourne instantanément puisque y'a rien à calculer.

Breeeeef. On verra s'ils veulent de moi mais j'ai vraiment perdu toute motivation pour ce genre de truc, les postes ont l'air intéressants (et salaires Suisse indécents). J'ai constamment la sensation d'être le dernier des imposteurs quand je fais genre que leurs questions m'intéressent.

Et j'ai eu le droit à Monte Carlo pour estimer Pi 3 fois. Au bout d'un moment ça me fait même douter de leur sérieux vu que c'est une des questions les plus récurrentes dans ce genre de conneries, en 2 clics sur internet tu peux copier coller une réponse.

----------


## Kamikaze

Ah oui mention spéciale à la question, pour un poste en *C++*

"Vous faites MyClass* instance = new MyClass();, ensuite..."

Et en gros il fallait choisir entre free, delete, le destructeur appelé explicitement, ne rien faire, etc.

J'ai postulé pour du C++, pas pour de l'archéologie.

Ca peut paraitre anodin, mais quand tu vois la tête des salaires Suisse et le type de poste, et que tu te manges une question pour étudiant des années 2000, ça fait rêver.

----------


## vectra

new/delete non? Je ne vois pas le piège...

Les questions vraiment de merde en entretien, ça existe. Genre des questions de syntaxe C pour un poste de dev C++, et le mec qui la pose qui est certain que tu ne sais pas programmer si tu réponds pas à ses merdes.

----------


## Kamikaze

Bah en C++ moderne et dans les guidelines de l'auteur même du langage ce sont des opérateurs obsolètes. Dans le cadre de "C/C++" pourquoi pas, mais dans le cadre du C++ un tant soit peu moderne y'a aucune excuse.




> R.11: Avoid calling new and delete explicitly


https://github.com/isocpp/CppCoreGui...d#Rr-newdelete

Alors j'ai p'têt pas donné assez de contexte mais c'était un cadre C++ moderne dans mon histoire, donc la question avait très peu de sens, en gros à ce niveau ça teste une expertise technique, voire historique, insignifiante.

Enfin surtout j'avais aucun choix dans le QCM pour dire que new et delete c'était le mauvais choix

----------


## Nilsou

> Ah oui mention spéciale à la question, pour un poste en *C++*
> 
> "Vous faites MyClass* instance = new MyClass();, ensuite..."
> 
> Et en gros il fallait choisir entre free, delete, le destructeur appelé explicitement, ne rien faire, etc.
> 
> J'ai postulé pour du C++, pas pour de l'archéologie.
> 
> Ca peut paraitre anodin, mais quand tu vois la tête des salaires Suisse et le type de poste, et que tu te manges une question pour étudiant des années 2000, ça fait rêver.


Idem que vectra je ne comprend pas vraiment le problème avec la question ...  ::unsure:: 

Ni d'ailleurs en quoi c'est de l'archéologie ... new/delete c'est de l'archéologie ?  ::unsure::

----------


## Kamikaze

Cachez ces développeurs C++99 que je ne saurais voir.

La vraie réponse c'est MyClass instance{};

Où si tu tiens vraiment à faire de la gestion de mémoire c'est auto instance = std::make_unique...

----------


## Garrluk

Je pense que ce que voulais dire Kamikaze, c'est qu'en C++ maintenant entre les pointeurs intelligents et la RAII il faut quand même le vouloir pour faire un new/delete.

Edit: Oups, méga grillé.

----------


## Nilsou

> Bah en C++ moderne et dans les guidelines de l'auteur même du langage ce sont des opérateurs obsolètes. Dans le cadre de "C/C++" pourquoi pas, mais dans le cadre du C++ un tant soit peu moderne y'a aucune excuse.


Quand tu construit tes classes il y a bien des moments ou tu mets des new quelques part quand tu gère de la mémoire non ?

----------


## Robix66

using (MyClass* instance = new MyClass())
{
}

De rien.
 ::ninja::

----------


## Nilsou

> Je pense que ce que voulais dire Kamikaze, c'est qu'en C++ maintenant entre les pointeurs intelligents et la RAII il faut quand même le vouloir pour faire un new/delete.
> 
> Edit: Oups, méga grillé.


Le RAII, le concept c'est que la chose est planquée dans les classes et que dans les codes utilisateurs tu n'a plus à t'en soucier. Mais ça ne veut pas dire que tu ne peux pas construire des classes avec new et delete à l'intérieur si ?

----------


## Garrluk

> Le RAII, le concept c'est que la chose est planquée dans les classes et que dans les codes utilisateurs tu n'a plus à t'en soucier. Mais ça ne veut pas dire que tu ne peux pas construire des classes avec new et delete à l'intérieur si ?


Non bien sûr, la RAII ne permet pas de se passer d'allocation, mais quand tu en as vraiment besoin, plutôt que d'écrire new, tu écris : auto instance = std::make_unique... (comme dit par Kamikaze 2 postes plus haut).
Comme ça pas besoin de t'embêter à gérer les durées de vies des variables, c'est le langage qui le fait pour toi.

Et le but de la RAII, ce n'est pas de cacher des allocations, c'est d'utiliser la pile plutôt que le tas, même si en pratique ça sert aussi à ça.

----------


## Nilsou

Tu ne peux pas mettre des unique_ptr partout, et les autres types de smart pointeurs ont un cout. ( qui peut être assez embêtant si on va dans les détails, voir ici par exemple : )

edit : (raaaa, le fofo qui continue avec ce bug ou quoi qu'on fasse il interprète les balise URL comme des VIDEO quand c'est du vimeo, allez savoir ...) 

De fait, ça reste pas déconnant de faire des classes avec des new et delete dans de nombreux cas je pense. 

La question du recruteur est évidemment une question de base, mais elle reste pertinente même aujourd'hui je pense.

----------


## gros_bidule

Ca me fait rigoler, j'ai l'impression de revoir des évaluations techniques en Java / Spring Boot où l'on te pose des questions hype pointues sur le fonctionnement d'une JVM (genre donner toutes les zones et sous-zones mémoires, pas juste expliquer la heap et non-heap), ou des questions sur Spring... enfin du Spring Framework (pas Boot donc) 3 ou 4 avec de la config de beans en xml. Plus aucun dev ne fait ça, on a bien plus simple et efficace, ça ne te servira pas au boulot et dans le pire des cas (maintenance d'un projet Spring du néolithique) tu passeras 10min sur Google pour te rafraîchir la mémoire. Mais visiblement il y a des gens qui pensent que ça fait de toi un expert. Expert peut être, mais expert en quoi, ça je ne sais pas. Et pendant ce temps, les compétences utiles sur un projet, on n'en parle pas.
 ::P:

----------


## Kamikaze

> Expert peut être, mais expert en quoi, ça je ne sais pas. Et pendant ce temps, les compétences utiles sur un projet, on n'en parle pas.


Voilà, exactement.

@Nilsou, nan mais vraiment y'a jamais besoin, la majorité du temps tu manipules la mémoire via des structures qui effectivement font du new delete, mais toi jamais explicitement:



```
#include <iostream>
#include <vector>

class Mange {
public:
    explicit Mange() { la_sauce.resize(1024ULL*1024ULL*1024ULL); }
    void balance() { std::cout << "dodu: " << la_sauce.size() << std::endl; }
private:
    std::vector<std::byte> la_sauce;
};

int main() {
    Mange vazy{};
    vazy.balance();
    std::cin.ignore();
}
```

- - - Mise à jour - - -

Ici tas 1 gig alloué, 1 gig libéré et tu touches jamais à new delete, la lib gère la mémoire avec du memset et autre effectivement

----------


## Nilsou

J'ai vu pas mal de programme avec des structures de données qui virevoltaient dans tout les sens parce que le but était assez complexe (notamment dans les programmes scientifiques) où je pense que ce serait un enfer sans new et delete dans les classes. 

Je comprends ton exemple, et je comprends que ça fasse la majorité des usages, surtout quand on se fiche un peu des perfs exactes (quand on ne code pas en embarqué, en scientifique ou sur des trucs comme des moteurs de jeux en JV) mais je maintient qu'il reste plein de cas ou tout bon programmeur doit connaitre l'usage de new et delete...

----------


## gros_bidule

Mais est-ce que c'est grave s'il est capable de les apprendre plutôt une fois en poste ? Est-ce que le savoir à la base, ça change bcp les choses ?

Parfois en entretien on me reproche (ou je fais l'erreur de reprocher) de ne pas connaître un truc. Mais ce truc c'est un détail qui se maîtrise en 5min, ou une techno que tu apprendras vite. Et on ne peut pas se targuer de tout connaître. Un bon dev, il évolue.
Donc modifier la façon d'allouer la mémoire, n'est-ce pas juste une histoire de convention à appliquer, et donc d'habitude à prendre sur le projet ? Demain tu passes sur un autre projet et on va te dire nan mais allo, nous on fait du Rust, ton C il est inutilement compliqué.

----------


## Cwningen

> En vrai tu pourrais aller aux alentours de plusieurs milliards mais là ça serait une indication que tu dois changer de design (utiliser des threads ou autre).


La limite de threads systèmes est-elle beaucoup plus élevée que la limite de processus ? Si c'est vraiment trop grand il vaut mieux rassembler les taches sur un pool plus limité de threads, non ? Ou tu parlais de threads utilisateurs ?

----------


## Garrluk

Justement, pour l'avoir vu dans un certain nombre de code scientifiques/HPC, faire des new/delete à tout bout de champs est une super mauvaise idée niveau performance.
Surtout que jusqu'en 2018 (je crois ?), il y avait toujours un mutex global sur la gestion de la mémoire dans la libc standard, donc dès que t'es sur un programme multithreadé, et que tu ne compiles pas avec un compilateur récent, tu le paies super cher en perfs.

D'ailleurs, si vous êtes bloqués sur une vieille version de clang/gcc, n'hésitez pas à utiliser tcmalloc (https://github.com/google/tcmalloc).
C'est un drop-in replacement pour la gestion mémoire de la libc, c'est super simple à compiler et à utiliser et en général ça permet des gains de performances assez important pour un coût de dev nul (il suffit de rajouter tcmalloc.so dans le LD_PRELOAD avant d’appeler son exécutable).
Sur la plupart des codes clients, juste faire ça nous donnait déjà des speed-up débiles, genres x2, avant même qu'on commence à rentrer dans le code.

----------


## vectra

>gros_bidule.

J'ai reparlé du test qu'on m'avait fait faire en C++ pour mon job actuel. Un test assez bateau, il faut dire. 
Ben mes collègues m'ont expliqué que plein de candidats l'ont foiré dans les grandes largeurs, ce qui, dans ce cas précis, montre qu'ils ont raté l'entièreté des chapitres essentiels du langage.
C'était a priori même pas de l'incompétence, mais juste des gens qui ont pris l'habitude d'encadrer et de négocier, et ont vraiment trop perdu le contact avec la technique. Or je suis là en tant que dev: même avec une capacité d'apprentissage et des lacunes, y'a certaines lacunes dures à justifier à un moment.

- - - Mise à jour - - -




> using (MyClass* instance = new MyClass())
> {
> }
> 
> De rien.


Il y a une différence par rapport à 


```
{
   MyClass instance;

   // blabla
   // delete
}
```

?

----------


## Kamikaze

> La limite de threads systèmes est-elle beaucoup plus élevée que la limite de processus ? Si c'est vraiment trop grand il vaut mieux rassembler les taches sur un pool plus limité de threads, non ? Ou tu parlais de threads utilisateurs ?


Oui et non c'était mal formulé de ma part, je disais ça dans le cas (hypothétique, je sais pas ce qu'il fait) où il abuse de process.send pour faire des boulots concurrents parce qu'il connait pas encore le multithreading.

- - - Mise à jour - - -

Enfin vu que je connais rien à Node ça se trouve c'est idiot de ma part de parler de multithreading.

Mais en gros je dis ça car j'ai souvent vu des débutants vouloir faire des trucs concurrents, et dans ce cas là ils prennent le premier truc qui fonctionne et qui leur tombe sous la main plutôt que de suivre "la pratique appropriée"

Genre des débutants qui se retrouve à faire de la communication inter process (IPC), gestion de signal, etc. (extrêmement casse gueule) alors qu'ils veulent juste 2 trucs concurrents en gros

- - - Mise à jour - - -

Et effectivement pour node faut voir le scenario car:




> Every node.js process is single threaded by design. Therefore to get multiple threads, you have to have multiple processes


Je vois mal ce qui justifierai 100 process, c'est p'têt légitime mais faut voir pourquoi

- - - Mise à jour - - -

Potentiellement ça ressemble aussi à quelqu'un qui connait pas async

----------


## FB74

P'tite question...

Si vous voulez monter un service en ligne qui est censé attirer, disons 300-500 000 abonnés, avec une utilisation réelle (journalière) de peut-être 50 à 80 000 personnes (visiteurs uniques), est-ce qu'il vaut mieux être propriétaire de son propre hébergement (serveurs) ou est-ce que les prestataires actuels sont suffisants pour la taille visée ?  ::):

----------


## Kamikaze

Qu'est ce que t'entends par "prestataires actuels" vs "propre hébergement" ?

1) Solution classique, payer un service de web hosting
100 000 visiteurs par jour tu peux t'attendre à payer entre 10 et 20 euros par mois chez la plupart des société qui font du web hosting grosso merdo. Et ça sera une machine virtuelle sur un serveur physique qui host d'autres machine virtuelles. Si tu payes un peu plus tu auras accès à plus de traffic.

Et souvent t'as plein de trucs préfaits pour avoir un magasin, un forum, un blog wordpress, etc. etc.

2) Web serveur à la maison
Je pense que c'est aussi largement faisable à la maison, il faudra que tu trifouilles ton router, achète un domaine etc. mais ça dépend de ton fournisseur d'accès concernant le traffic possible, là où je suis avec la fibre je suis sûr que ça passerait tranquille. Et ça peut être assez dangereux si tu ne sais pas ce que tu fais (tu rends une machine physique chez toi accessible aux méchants d'internet)

3) Payer un service (de web hosting) pour une machine physique (plutôt cher et overkill)
Sinon tu peux avoir un serveur physique dédié, c'est comme la machine virtuelle en terme d'utilisation mais c'est vraiment une machine pour toi, en gros (et ça coute significativement plus cher). Mais ça me parait overkill

----------


## gros_bidule

Cela dépend aussi de la fréquentation et ce qu'implique l'activité. A titre d'exemple, un gros site de cashback dont je tairai le nom, ayant 1M d'abonnés, dont 100 000 actifs, générait au total "3 clics par seconde". Donc question : que coûte un clic en moyenne et dans le cas critique ? Clic de navigation, clic de finalisation de commande, etc. Ca conditionne le nombre de serveurs et leur puissance, plus une éventuelle modulation de la puissance si la demande en ressources est variables (soldes...).
Toujours à titre de comparaison, le projet Chèque Energie du gouvernement (6M de foyers fiscaux, + des pros, donc plus de 6M d'utilisateurs actifs sur une courte période chaque année), il se trouve que ça se gère avec autant de ressources que le site plus haut, alors qu'il y a 60x plus d'utilisateurs actifs.

Donc quand je lis XXX users, j'ai envie de dire que l'essentiel c'est de jauger le service sur une petite base utilisateur, puis calculer le passage à l'échelle, + les emmerdes qui vont avec.

----------


## Kamikaze

Ouais c'est une bonne remarque.

Genre si tu fais un site à la youtube. Un seul mec qui regarde une video 4k 60fps coute autant (grosso merdo hein, tu vois l'idée) que 100'000 utilisateurs qui se connectent à une page html "Hello World".

D'ailleurs généralement à chaque fois qu'un mec rafraichit "Hello World" ça va souvent se contenter de recharger depuis le cache donc ça va même pas aller toucher ton serveur.
Genre quand tu vois mon avatar (ou une image quelconque) sur CanardPC souvent c'est stocké localement sur ton PC, ça la charge depuis le PC et pas depuis canardpc.com

Donc si c'est un service "passif" où les gens lisent des trucs ça coute moins, si c'est un service qui prend une requete utilisateur et répond avec du contenu, là c'est plus compliqué

----------


## FB74

En fait je pensais (juste une idée à la con) un site de rencontre, donc typiquement des profils à regarder et sans doute des tchats/ MP internes entre 2 utilisateurs.

Pas de vidéos, des photos, mais quand même pas mal d'interactions.

----------


## Kamikaze

Ouais là typiquement ça peut grimper extrêmement vite. Si tu autorises les gens à avoir 2/3 photos de profil par exemple, même si tu limites à une taille raisonnable. Tu vas te retrouver avec un grand nombre d'uploads vers ton serveur et de download pour les gens qui visitent les profils.

Le texte des messages pareil, il va falloir que tu le stocke côté serveur et ça va rapidement faire un volume conséquent.

Le truc c'est de calculer tout ça, s'pas trop dur.

Exemple pour commencer:
Tu définis le nombre de photo par utilisateur (3), la taille max d'une photo (100KB). Le nombre d'uploads max par jour (10). 

3*100*10*100000 = 300 GB / jour. Maxi (worst case scenario) en upload, on va dire pareil en down

Pour les messages tu dois également définir le volume max de texte par utilisateur par jour et la durée pendant laquelle tu conserves un message (historique).

Disons 1MB (beaucoup pour du texte)/jour, stocké 7 jours, 1*7*100000 ~ 100 GB par jour, 700GB de stockage total à avoir + 300 GB de tof ça fait 1 TB de stockage total, sûrement 2 pour avoir de la redondance.

Donc ces chiffres sont pas trop énormes, mais bien sûr j'ai simplifié et j'oublie p'têt des évidences, mais là on s'orienterait sûrement plus vers des offres business.

De ce que je vois c'est plus vers 30/50 par mois mais j'ai un peu la flemme de lire les offres en détails.

Genre ici: https://www.hostpapa.ca/web-hosting-plan/

Ils disent tout illimité pour 25/mois mais y'a sûrement des asterisk partout avec des limitations à la con

----------


## FB74

Je te remercie.  :;): 

C'était juste pour avoir une idée "grossière" de ce qu'il était possible d'avoir. 

Je pensais juste à une façon (que je n'ai jamais vue avant) pour rapprocher les profils.  ::ninja:: 

Je n'en parlerai pas ici.  ::trollface::

----------


## Robix66

Ah oui la grande idée qui est tellement bien qu'on ne peut pas en parler, un classique.

----------


## FB74

> Ah oui la grande idée qui est tellement bien qu'on ne peut pas en parler, un classique.


 :Cigare:

----------


## Cwningen

1 Mo c'est un très gros roman. Il faut être motivé pour écrire tout ça (et même pour le lire) en une seule journée.

----------


## gros_bidule

Une photo grandeur nature d'un kiki en ascii-art (ou utf8-art en fait, faut vivre avec son temps), ça chiffre vite  ::ninja:: 

Après y'a des bases qui peuvent stocker le texte en compressé (je pense par ex à MariaDB et Mongodb (WiredTiger) qui ont des moteurs de db qui font ça), et le texte naturel ça se compresse ultra bien, mais je serais curieux de voir les perfs des recherches fulltext, ne serait-ce pour la modération. Pas essayé en tous cas.

----------


## Cwningen

c'est 4 octets en UTF-8.

- - - Mise à jour - - -

? c'est 4 octets en UTF-8.

- - - Mise à jour - - -

Merde j'ai tué le forum avec mon aubergine, j'arrive plus à éditer le message.

- - - Mise à jour - - -

Merde j'ai tué le forum avec mon aubergine, j'arrive plus à éditer le message.

----------


## gros_bidule

:haha: 

(et tu as tué le _Reply With Quote_ sur ton message, ça mouline à l'infini  :^_^: )

----------


## Kamikaze

J'ai dit "c'est beaucoup pour du texte"! Ningen qui fait pas attention§§§ Et en plus il hacke le forum en jouant avec l'encoding, modobell direct!!!



- - - Mise à jour - - -

J'ai dit "c'est beaucoup pour du texte"! Ningen qui fait pas attention§§§ Et en plus il hacke le forum en jouant avec l'encoding, modobell direct!!!

???????

- - - Mise à jour - - -

Ouais c'est bien l'encoding qui pose problème hahaha, ce grand classique

- - - Mise à jour - - -

Ouais c'est bien l'encoding qui pose problème hahaha, ce grand classique

----------


## Lazyjoe

> Justement, pour l'avoir vu dans un certain nombre de code scientifiques/HPC, faire des new/delete à tout bout de champs est une super mauvaise idée niveau performance.


Je connais quelqu'un qui fait entre autres du consulting pour refactorer du code C++, de son expérience c'est "on passe les premiers jours à virer tous les new/delete du code (et la majorité des constructeurs/destructeurs explicites), ça nous fait souvent un *2 sur la perf, et après on commence à réfléchir sur comment on peut vraiment optimiser".

----------


## Lazyjoe

> De fait, ça reste pas déconnant de faire des classes avec des new et delete dans de nombreux cas je pense. 
> 
> La question du recruteur est évidemment une question de base, mais elle reste pertinente même aujourd'hui je pense.


Le point c'est aussi de déléguer un maximum la gestion de la mémoire aux classes fournies par le langage plutôt que réinventer la roue, car on peut tabler que la STL fasse mieux le taf que tout ce qu'on pourrait faire à la main. 

Jouer avec des new/delete c'est aussi prendre un risque élevé de fuite de mémoire.

Utiliser les pointeurs va aussi très facilement casser les optims du compilateur.

Bref ça n'a essentiellement que des désavantages, et si on est réellement obligé d'utiliser des new/delete ça indique surtout une mauvaise conception architecturale.  ::ninja::

----------


## FB74

Même si je ne connais pas le C++, c'est clair qu'il y a toujours des classes, des routines, bref des tas de choses qui ont déjà été pensées ... et en bien mieux qu'on ne pourra faire !  ::P:

----------


## Cwningen

Même si on ne trouve pas ce qu'on veut dans les bibliothèques. Il vaut mieux laisser l'usage de new/delete à un petit nombre de classes et appliquer la Règle de zéro au maximum d'autres classes.

Et c'est valable pour toutes les ressources en fait, pas seulement pour la gestion mémoire (le C++ manque cruellement d'un unique_resource dans sa bibliothèque standard).

----------


## Kamikaze

Haha aujourd'hui c'était le pompon, j'ai eu le droit à 4h de test, avec un sujet hyper soporifique. Pour le coup j'ai rempli le truc sans aucun respect par moment, on verra ce qu'ils en pensent ça va être marrant.

Encore une fois les mecs m'embauchent pour un truc moderne, mais la moitié des questions c'est du C et c'est ennuyeux à mourir.

> Un truc sur la collision de véhicules en mouvement, pourquoi pas, c'était des maths, rien de dingue, le moins débile du lot.
> Ensuite un fabuleux "chunk upload multithreadé" d'un fichier. Va vraiment, mais alors vraiment falloir m'expliquer l'avantage de faire ça de manière multithreadé, je suis à peu près certain qu'un seul thread ira aussi vite mais bon.
Le bottleneck c'est la vitesse de lecture du disque et le réseau, et en plus ils sous entendaient que c'était des petits fichiers, y'a vraiment un truc qui a du m'échapper dans l'intention ou alors c'était une question de merde (je penche pour ça, en input t'as un fichier et un nombre de threads).
Bref, j'ai partitioné les données du fichier en morceaux indépendants et chaque thread upload sa partie en chunk, inintéressant au possible.
> Rentrer un buffer binaire dans une struct et mettre la struct sous forme binaire, j'adore ça, c'est ma joie.
> Ecrire dans un fichier avec un formattage à la con, lire depuis le fichier, vérifier le format, vérifier les dates que t'as parsé (achevez moi).
> Parsing de log (mais oui j'adore ça, allez y), là le respect est mort, j'ai sorti 2 one liner en bash qui font ce qui est demandé, autre chose à faire

Mais ça pas mal coupé l'envie pour cette boite (je suis sûr plusieurs boites en ce moment, intéressant de voir les différents process de recrutement selon la boite)

----------


## gros_bidule

Upload multithreadé : peut être le type a été traumatisé par ces sites de téléchargement qui limitent le débit par slot, et que tu contournes avec des logiciels qui splittent des DL pour leurrer ces sites. Enfin ça date tout ça quand même. Et en effet, pas besoin de véritables threads pour ça  :^_^: 

Les autres questions...  :Cryb:  J'imagine que ça filtre les gens qui sortent de l'école. C'est déjà pas mal, cela dit. Mais si ça fait fuir les bons... bah ils auront un mec moyen, puis vala. Leurs projets ne nécessitent peut être pas davantage après tout. Ou pas. Mais ils pourraient prévenir avant de coller un test : cherche expert bien payé pour projet d'envergure, ou cherche dev lambda modèle ESN-3291 pour projet lambda de qualité passable. Ca éviterait de perdre du temps avec ces conneries.

----------


## William Vaurien

4h de tests techniques c'est un peu lourd quand même... Par contre tu te places du point de vue où tous les dev sont de ton niveau voir meilleurs. Les questions te semblent simples, voir débiles, mais je suis certains que la plupart des candidats reçus n'entravent rien ni au C++ ni aux questions.
J'ai déjà vu des recrutements mal se terminer car aucun tests techniques, juste de la discussion (quelques questions techniques mais pas trop et de la mise en situation). Au final le candidat retenu n'a pas terminé sa période d'essai car techniquement il était à la ramasse: il avait vraiment juste le vernis suffisant pour un entretien pas trop stressant.
Avec un autre collègue nous avions évité les questions trop orientés framework par exemple en nous disant qu'une personne qui connait une techno x ou y peut aussi apprendre z. 
Mais en fait non. Et le code produit par ce candidat était au final dangereux pour le projet, et il faisait les mêmes erreurs après explications multiples... et pourtant c'était du Java/Spring assez basique.

Maintenant je me méfie un peu plus: les tests techniques c'est pas la panacée mais ça filtre pas mal quand même. Et en plus là j'ai l'impression que c'est pour un projet un peu plus complexe que du "Java Enterprise" à base de formulaire.

----------


## Kamikaze

Effectivement je ne me suis jamais retrouvé dans la situation de l'entreprise qui cherche à recruter. Enfin j'ai déjà contribué à recruter des gens pour mon équipe, mais les enjeux sont assez faibles (pour moi). À vrai dire je veux surtout que le mec soit sympa et prêt à échanger

C'est sûr que la question du recrutement est complexe, comment garantir que tu n'embauches pas un guignol. Mais j'ai le sentiment qu'une discussion est le meilleur outil, avec simplement des exemples de codes et d'architecture "critiquez ce code", "critiquez cette archi".

Il m'apparait vraiment difficile de pouvoir passer pour ce qu'on n'est pas au cours d'une discussion informelle

À vrai dire un truc qui m'avait énormément plu c'était une boite Irlandaise qui m'avait donné un mini projet à faire. Le truc est faisable en quelques heures mais ils te donnent une semaine.

En l'occurence il fallait traiter 4GB de données financières (des ticks de prix), l'intérêt du truc c'est que y'avait un objectif de perf/temps d'exécution et qu'il fallait être malin et utiliser les algo dit "online" https://en.wikipedia.org/wiki/Algori...line_algorithm qui te permettent de faire des stats en ne lisant qu'une seule fois les données linéairement. 

Je pense qu'un projet "clefs en main", où tu as vraiment le temps de tout faire dans les régles de l'art donne une bien meilleur idée de ce que vaut quelqu'un. Ca laisse le temps aux détails d'apparaitre et de voir comment fonctionne quelqu'un véritablement vu la part de liberté. Fallait aussi faire une mini doc, etc.

----------


## Kamikaze

Et sinon complètement hors sujet mais je découvre cette chaine, incroyable!

C'est un développeur qu'a bossé dans les années 90 sur des jeux vidéos et qui explique tous leurs secrets, de l'or en barre

----------


## Nilsou

> Mais est-ce que c'est grave s'il est capable de les apprendre plutôt une fois en poste ? Est-ce que le savoir à la base, ça change bcp les choses ?
> 
> Parfois en entretien on me reproche (ou je fais l'erreur de reprocher) de ne pas connaître un truc. Mais ce truc c'est un détail qui se maîtrise en 5min, ou une techno que tu apprendras vite. Et on ne peut pas se targuer de tout connaître. Un bon dev, il évolue.
> Donc modifier la façon d'allouer la mémoire, n'est-ce pas juste une histoire de convention à appliquer, et donc d'habitude à prendre sur le projet ? Demain tu passes sur un autre projet et on va te dire nan mais allo, nous on fait du Rust, ton C il est inutilement compliqué.


Pour moi c'est complétement l'inverse : le savoir fonctionne par couche. Tu veux faire du C++, je suis désolé, mais il faut connaitre un minimum de C. Tu veux faire du C++ moderne, OK mais il faut connaitre un minimum de C++ classique. C'est enseigné comme ça partout (et j'ai enseigné dans 3 endroits différents, de la FAC à l'école d'ingénieur publique et actuellement en école d'ingé privé) et ça a une logique de fond je pense. Tout comme il est nécessaire de connaitre des bases de math pour faire pleins de choses, même si tu ne les réutilise pas strictement ensuite, ce sont les briques de bases de ta compréhension.
Bah idem, pour moi la compréhension de la mémoire et de l’interaction programme-mémoire, c'est la brique de base de la prog. C'est tout à fait pertinent de faire un premier tri des candidats sur ce genre de question de base pour t'assurer que le candidat a bien le savoir nécessaire. Même si tu ne lui demande jamais ça ensuite.
Enfin du moins, c'est mon avis.




> Justement, pour l'avoir vu dans un certain nombre de code scientifiques/HPC, faire des new/delete à tout bout de champs est une super mauvaise idée niveau performance.
> Surtout que jusqu'en 2018 (je crois ?), il y avait toujours un mutex global sur la gestion de la mémoire dans la libc standard, donc dès que t'es sur un programme multithreadé, et que tu ne compiles pas avec un compilateur récent, tu le paies super cher en perfs.


Certes mais justement, ce que tu recherche à ce moment là c'est une maitrise parfaite du timing auquel tu libère ou tu alloue la mémoire. En fonction de la logique de ton programme. Ce que tu perds complétement en passant sur des mécanismes plus haut niveau.

----------


## Tramb

Toujours le même biais, je dirais.
"Les gens qui ne savent pas les trucs que je sais sont mauvais."
+
"Les savoirs que je n'ai pas ne servent à rien."

Parfois un peu vrai mais il faut lutter contre ça un minimum.

----------


## Lazyjoe

> Certes mais justement, ce que tu recherche à ce moment là c'est une maitrise parfaite du timing auquel tu libère ou tu alloue la mémoire. En fonction de la logique de ton programme. Ce que tu perds complétement en passant sur des mécanismes plus haut niveau.


Ben c'est ce qu'on répète hein.  ::siffle::  On peut toujours trouver des cas particuliers où une gestion à la main est nécessaire, mais dans la grande majorité des cas avec les containers standards + une bonne gestion du scope des variables on a tout ce qu'il faut.

----------


## Nilsou

Certes, mais c'est pas tout à fait le propos initial de Kamikaze, qui avait l'air de dire que ce type de savoir était parfaitement obsolète. Et que de fait les questions posées par les recruteurs n'ont aucun sens.
Je ne suis pas d'accord avec cette analyse.

----------


## gros_bidule

> Pour moi c'est complétement l'inverse : le savoir fonctionne par couche. (...)


J'imagine que nos divergences viennent de nos métiers. Tu évolues dans un domaine plutôt scientifique si je ne dis pas de bêtise ? En tous cas je crois avoir compris que tu ne passes pas tes journées à pondre des API REST abrutissantes :-) Si tu as des contraintes fortes de performances, ou simplement besoin de comprendre comment fonctionne le matos, ce genre de chose, je comprends que des connaissances plutôt bas niveau et/ou scientifiques soient nécessaires, tout comme maîtriser la plateforme/langage.

Perso, je travaille avec un niveau d'abstraction bien plus élevé, où l'on a pas forcément besoin de chercher les meilleures performances. 
Une de mes dernières missions c'était par ex le Chèque Energie du gouvernement (API REST pour déclarer les chèques, des batchs pour faire les paiements, parsing de fichiers normés, ce genre de trucs basiques). Le projet type d'une grosse ESN (et c'était le cas), où tu vises la rentabilité maximale, et où un gosse qui sort de l'école est vite opérationnel là dessus (et justement, je devais encadrer des jeunes diplomés).
J'adore aller dans les détails, comprendre comment ça marche en interne (le fonctionnement d'une JVM, les trucs internes de Spring..., en général en entretien c'est moi qui explique le métier au recruteur) etc. Ca "peut" aider en cas de soucis, mais 99% du temps c'est inutile car on te demande juste de pisser du code. Sur les 1% restants, ton expertise coute trop chère, on préfère un workaround pété mais moins cher. Ca me désole.
En 12 ans je n'ai jamais rencontré un collègue qui était curieux de savoir comment ça marchait une JVM, un Spring Boot, un Spring Batch (la db qu'il y a derrière par ex), divers algos de compression ou de chiffrement... certains ne savaient même pas qu'il existait des types primitifs en Java (ce qui les amène à créer des booléens à 3 états dans des cas où ce n'est pas utile, ouaip : true/false/null, et tu te prends des NullPointer partout car le dev considère que ça n'arrive jamais), c'est dire... et pourtant c'est ce que demande le projet. Un type comme moi n'a pas sa place (et je l'ai assez vite perdue), je ne suis pas rentable et les chefs me l'ont souvent rappelé (et puis bon... je m'ennuyais à mourir aussi). Mon expertise je l'aime, c'est ma passion, j'apprends par couche, mais elle n'est pas reconnue (en France en tous cas, depuis que je suis au Canada c'est très, très différent).

Je comprends donc que l'apprentissage par étapes peut être nécessaire dans certaines disciplines, être un plaisir personnel pour certains aussi, mais hélas une partie de l'informatique se contente de gens que je considère comme peu passionnés, ou peu curieux. Ils apprennent directement le Java ou dotNET haut niveau, et n'ont jamais touché une ligne d'assembleur ou de C, donc ils ne savent même pas ce qu'est un pointeur, un pipe, un socket, ou pourquoi un GOTO c'est pas glop. Ces gens là n'ont aucune chance de passer des tests compliqués décrits plus haut dans le thread, alors qu'ils pourraient peut être faire le taff. Enfin bien... disons que le projet sera livré sans trop de retard et le patron gagnera plein de pognon.

----------


## vectra

Je suis dans le privé en France et je ne me reconnais absolument pas là-dedans.
Nulle offense hein, mais j'ai pas du tout performé en ESN et (par chance) assez facilement réussi à trouver des jobs en direct...

----------


## gros_bidule

Aucun soucis  :^_^: 
Clairement, les ESN d'informatique de gestion c'est un monde à part  ::P:  J'aurais teeeeeellement aimé trouver des boites comme la tienne ou celle de Nilsou etc. Ce que je vois comme de la _vraie_ informatique, où tu comprends ce que tu fais. Vos posts transpirent l'informatique, et même si ça fait un peu mal au crane, je trouve ça beau.

----------


## Awake

Je suis exactement dans le cas que tu donne gros_bidule. Incapable d'implémenter un sort ou d'optimiser une recherche dans un arbre. Mes connaissances en math s'arrêtent au niveau seconde (et encore...). Mais ce n'est pas un manque de curiosité ou de passion, que j'ai pour plein d'autres domaines dans le dev, simplement que je n'en ait jamais eu besoin et que c'est l'architecture et le haut niveau qui me plaisent. Un employeur qui me demande un algorithme pointu d'optimisation me prendrais pour un débutant, alors que si il a besoin d'une app web je pourrais surement faire très bien faire le taff.

Donc non Nilsou, je ne suis vraiment pas d'accord, pas besoin de connaître le C ou des maths pour faire un bon développeur.

----------


## Nilsou

Sauf qu'après c'est une question de langage choisi. Si tu veux faire une app web pas besoin de C sans doute, mais si tu veux faire du C++ c'est loin d'être accessoire.

Quant aux math, pour moi elles sont nécessaires pour tout bon développeur. Ou du moins, elles facilitent grandement l'apprentissage des langages et de nombreux concepts liés à ces langages. C'est toujours possible de faire un bon développeur avec des maths de niveau seconde. Est-ce efficient comme stratégie d'enseignement quand on veut amener le maximum de personne à un bon niveau dans un temps donné ? À mon sens, non. (raison pour laquelle, d'ailleurs, la plupart des écoles d'info ont tendance à recruter des gens qui sortent avec un bac ayant des maths dedans ...). Le cerveau fonctionne par acquis qui s'applique ensuite à l'apprentissage des autres acquis, couche après couche (cf : Piaget : apprentissage chez l'enfant). Tu peux sauter les étapes, mais c'est globalement inefficace en moyenne et ça peut amener à de gros troubles persistant dans la compréhension de certains concept (cf : méthode globale en lecture).

Puis la question est plus large en définitive, et un brin plus philosophique que la simple efficacité. Si le but n'est de former que des gens ultra-spécialisés en pissage de code, à la limite on peut éviter de leur enseigner l'histoire, le français et qu'une pomme qui tombe d'un arbre a une accélération liée à la gravitation. C'est juste pondre le « meilleur des mondes » que faire cela. Un monde de personne dans des cases qui seront ensuite incapables de changer de domaine en fonctions de leurs envies, incapables de s'adapter à des contraintes changeantes dans le temps, etc. Bref, de bons rouages de machines.

En général on essaie de pondre autre chose dans les milieux d'enseignements et de construire les cursus sur des bases larges, du moins spécialisé au plus spécialisé. Le but n'est pas que d’être efficace, mais d'amener une meilleure compréhension, une souplesse et une certaine « curiosité » comme le pointe gros_bidule.

----------


## Awake

Tout ce que je veux dire c'est que cette histoire de couche d'apprentissage ne me semble pas juste. C'est normal de se spécialiser de nos jours, et ne pas connaître les rouages des tonnes de couches d'abstractions qui sont en dessous de sa spécialité n'empêche pas d'être compétent. Bien sûr ça ne fait pas de mal d'être au courant, mais ce n'est pas sur des choses complètement en dehors du domaine de prédilection du candidat qu'un recruteur devrait le tester, sous prétexte que c'est "les bases".

----------


## Nilsou

D'un point de vue purement « méthode d'enseignement » et science de la formation du cerveau, cette histoire de couche d'apprentissage est un fait scientifique démontré dans le domaine des sciences cognitive (première formulation par Piaget, puis confirmation successive par la neurobiologie puis par les sciences expérimentale autant en science sociale qu'en IA). 

Sur l'aspect pratique de la discussion. Je ne vois pas comment on peut dire que connaitre un delete est « complétement en dehors du domaine de prédilection d'un candidat » quand celui-ci postule sur du C++, c'est quand même un brin exagéré ...  ::P: 

Tester les bases pour un recruteur est un très bon moyen de filtrer les candidats.

----------


## Dross

Je me prononcerai pas sur les aspects C++ (j'en ai touché qu'étant étudiant) mais pour le coté "questions d'entretiens" je suis toujours ambivalent sur les trucs un peu pointus/bas niveau/question académiques/truc qu'on utilise pas au quotidien.

Bien franchement si on me demande de recracher un truc d'algo en entretien, je décrirai plutôt "comment" je me comporterai dans une situation qui nécessiterai cette connaissance, que de recracher ladite connaissance. Car personnellement je trouve que c'est le plus parlant. D'ailleurs c'est ce dont je parle le plus en entretiens : qu'est-ce que j'ai fais, quels problèmes j'ai rencontré, comment je les ai résolu (ou tenter de résoudre) comment j'ai réussi / échoué et pourquoi. En général ça marque un max de points et on m'emmerde pas avec des questions à la con. 

Et concernant la capacité de juger de la qualité technique d'un candidat : la période d'essai est justement là pour ça, vous aurez l'heure juste et ça vous évitera de juger sur un reflet de qualité franchement questionnable. Rien ne vous protégera d'un gars qui pourrai performer en entretien et être une véritable plaie une fois en poste. A mon avis, plutôt que de passer des mois à chercher le candidat parfait (comme ça se fait parfois en France) on ferai mieux de mettre à l'essai le premier qui semble faire l'affaire et le virer si ça va pas quelques jours/semaines plus tard.

----------


## Orhin

> Quant aux math, pour moi elles sont nécessaires pour tout bon développeur. Ou du moins, elles facilitent grandement l'apprentissage des langages et de nombreux concepts liés à ces langages.


Plus que les maths c'est surtout la capacité d'abstraction qui est très utile en info.
Est-ce qu'apprendre les maths aide à l'améliorer ? Certainement.
Est-ce que c'est le seul cursus qui permet de le faire ? J'en doute.




> Tout ce que je veux dire c'est que cette histoire de couche d'apprentissage ne me semble pas juste. C'est normal de se spécialiser de nos jours, et ne pas connaître les rouages des tonnes de couches d'abstractions qui sont en dessous de sa spécialité n'empêche pas d'être compétent. Bien sûr ça ne fait pas de mal d'être au courant, mais ce n'est pas sur des choses complètement en dehors du domaine de prédilection du candidat qu'un recruteur devrait le tester, sous prétexte que c'est "les bases".





> D'un point de vue purement « méthode d'enseignement » et science de la formation du cerveau, cette histoire de couche d'apprentissage est un fait scientifique démontré dans le domaine des sciences cognitive (première formulation par Piaget, puis confirmation successive par la neurobiologie puis par les sciences expérimentale autant en science sociale qu'en IA).


Non mais là vous ne parlez pas de la même chose et vous dites tous les 2 un truc juste.




> Bien franchement si on me demande de recracher un truc d'algo en entretien, je décrirai plutôt "comment" je me comporterai dans une situation qui nécessiterai cette connaissance, que de recracher ladite connaissance. Car personnellement je trouve que c'est le plus parlant. D'ailleurs c'est ce dont je parle le plus en entretiens : qu'est-ce que j'ai fais, quels problèmes j'ai rencontré, comment je les ai résolu (ou tenter de résoudre) comment j'ai réussi / échoué et pourquoi. En général ça marque un max de points et on m'emmerde pas avec des questions à la con.


Ceci.
Les capacités d'analyse, de recherche d'information et d'adaptation sont bien plus importantes pour un bon ingénieur que les connaissances purement théoriques.

----------


## Foksadure

> Non mais là vous ne parlez pas de la même chose et vous dites tous les 2 un truc juste.


Je rejoins hijopr sur le fait qu'il y a probablement beaucoup de personnes avec des profils qui ne sont ni scientifiques ni même techniques, qui sont formées juste ce qu'il faut pour de la programmation "Ikea" et qui s'en sortent très bien.
I.e. s'appuyer sur des bibliothèques et des modules fonctionnels conçus et maintenus par des gens plus compétents que soi, et surtout savoir s'insérer dans un existant complexe sans forcément en maîtriser tous les rouages.

----------


## William Vaurien

Pour avoir travailler dans un lieu avec des centaines d'éminents scientifiques, le constat était que c'était de piètres développeurs. A tel point qu'un des devs de l'équipe "des trucs administratifs chiant pas scientifique en java" (la mienne) avait était débauché pour tenter de remettre de l'ordre dans un bordel monstrueux de Python/C++.
En gros chaque chercheur de chaque équipe avait ses bouts de pythons inmaintenables et quand le chercheur s'en allait, plus personne ne pouvait rien faire du code. Il n'y avait ni architecture commune, ni gestionnaire de source, ni standard de code. Le seul truc commun c'était les libs scientifiques et de dessins en C++ et/ou la glue python qui allait avec.
Et évidemment le code était toujours le plus concis et 'malin' possible, donc très dur à comprendre même pour d'autres chercheurs aux profils similaires.

Pour moi c'est clairement deux mondes distincts les "sciences" (maths/physiques/bio) et l'informatique. C'est des compétences finalement très différentes, même la capacité d'abstraction est différente: un matheux peu abstraire un algorithme en une formule ésotérique incompréhensible par le commun des mortels. 
Un développeur sera capable d'abstraire un comportement pour le modéliser et le rationnaliser. Pourtant le cursus pour devenir dev c'est encore et toujours par les maths, et quand je dis "je suis ingé en informatique" j'ai souvent droit à "tu dois être balaise en Maths alors !" (en plus "de mon imprimante est en panne"...) alors qu'en fait je suis plutôt moyen.
Il y a tout une frange de dev qui sont aussi des matheux ou qui utilisent des outils mathématiques avancés, mais j'ai l'impression que c'est une minorité...

J'ai pu constater aussi que des devs juniors avec un parcours académique scientifique très poussé (genre thèse en  physique nucléaire) luttaient tout autant que les autres avec des concepts d'abstraction type les proxy de Spring (AOP pour gérer les transactions par exemple). 

Et pour revenir au sujet du recrutement, c'est vrai que c'est compliqué. Les petits projets maison c'est très sympa mais une frange de dev peut ne pas avoir le temps de consacrer une dizaine d'heures ou plus de sa semaine pour faire un TP. Le recruteur va aussi devoir prendre du temps pour bien éplucher tout ça. Les QCMS et autres tests sont toujours un peu nazes (périmés, à côté de la plaque, trop simple, trop compliqué)... Les énigmes à la Google (ils font encore ça ?) je trouve ça pas terrible non plus. C'est finalement assez compliqué de trouver le bon candidat...

----------


## Lazyjoe

> Pour avoir travailler dans un lieu avec des centaines d'éminents scientifiques, le constat était que c'était de piètres développeurs. A tel point qu'un des devs de l'équipe "des trucs administratifs chiant pas scientifique en java" (la mienne) avait était débauché pour tenter de remettre de l'ordre dans un bordel monstrueux de Python/C++.
> En gros chaque chercheur de chaque équipe avait ses bouts de pythons inmaintenables et quand le chercheur s'en allait, plus personne ne pouvait rien faire du code. Il n'y avait ni architecture commune, ni gestionnaire de source, ni standard de code. Le seul truc commun c'était les libs scientifiques et de dessins en C++ et/ou la glue python qui allait avec.
> Et évidemment le code était toujours le plus concis et 'malin' possible, donc très dur à comprendre même pour d'autres chercheurs aux profils similaires.


So true. 
Dans mon labo, vu que les codes sont aussi utilisés par des partenaires industriels on a une mini-équipe qui bosse uniquement sur l'intégration et la qualité du code pour être sûr que ce qui doit sortir de la partie recherche est utilisable par d'autres.

----------


## Teocali

> Et pour revenir au sujet du recrutement, c'est vrai que c'est compliqué. Les petits projets maison c'est très sympa mais une frange de dev peut ne pas avoir le temps de consacrer une dizaine d'heures ou plus de sa semaine pour faire un TP. Le recruteur va aussi devoir prendre du temps pour bien éplucher tout ça. Les QCMS et autres tests sont toujours un peu nazes (périmés, à côté de la plaque, trop simple, trop compliqué)... Les énigmes à la Google (ils font encore ça ?) je trouve ça pas terrible non plus. C'est finalement assez compliqué de trouver le bon candidat...


De notre coté, on a fait un choix : on écrème les CVs sur des critères sommaires mais peu restrictif (langue, localisation vraiment pas compatible, expérience annoncée vraiment trop réduite par rapport aux attentes), et on balance un test technique en ligne via la plateforme CodingGame (QCM et de vrai exos de prog), et on prendra le haut du panier pour un entretien technique qu'on fera sans doute par visio, l'idée étant surtout de garder le coté technique pur au strict minimum (juste s'assurer que le candidat est bien celui qui a passé le test technique) mais surtout de voir si l'etat d'esprit est compatible avec le reste de l'équipe.

D'ailleurs, si y'a des devs Java/Spring (une connaissance de kotlin est un vrai plus mais pas indispensable) dispo sur Lyon et ses environs (ça sera du full TT dans un premier temps, mais on passera sans doute a un ou deux jours en local a moyen/long terme, les locaux seront choisis en fonction des dispos et de la localisation des membres de l'equipe), faites péter les CVs. Je mord pas (Shotmaster peut témoigner) et le projet est plutot cool.

----------


## gros_bidule

Je hais SpringBoot. Je hais SpringBoot. Je hais SpringBoot. Bon, je l'adore et le hais à la fois.  :Emo: 

Passage de SpringBoot 2.5.x à 2.6.0 -> tous mes messages d'erreur sont vides (API REST, Spring Security et Spring Validation). Après plusieurs jours je découvre que, si tu utilises Spring Security, il fallait donner accès à "/error". Je découvre aussi que cette règle ne date pas d'hier (j'ai évidemment épluché les changenotes et guides de migration), mais j'avais une config particulière qui a bypassé ça durant des années sans le savoir et donc ça fonctionnait bien, je n'avais jamais pris le temps de monter un projet hello-world avec Spring Security pour me rendre compte (je l'avais fait sur à peu près tout : Spring Batch, Cache, Data, Retry, Cloud, etc, mais comme un con jamais Security, c'est bête).
Purée de purée de purée, tout ça pour ça.

----------


## Teocali

ah. ah. ben tu vas rire. c’est exactement le souci que j’ai en ce moment.

----------


## Kamasa

J'ai fait du Spring pendant des années. Je connais assez bien. Je m'y étais habitué.

Mais ça fait 1 an que je bosse sur une application sans serveur d'application (sur une architecture Cloud toute basée sur des lambdas AWS) et j'ai tellement plus envie de refaire du Spring  :Emo:

----------


## William Vaurien

c'est intéressant et intriguant ton commentaire Kamasa, tu pourrais détailler comment ça se passe une appli sans serveur ? Je suis aussi habitué à Spring/SpringBoot que je connais suffisamment bien pour servir de référent pour mon équipe alors qu'en fait j'ai juste lu (et compris) un peu la doc.  Je suis à l'aise avec (sauf Spring Secu que je trouve ... cryptique et Spring Batch qui est bien trop compliqué pour le service rendu dans notre cas) et du coup j'ai du mal à imaginer faire sans...

----------


## Teocali

Kamasa, tu m'interromps si je dit de la merde, mais en gros, le serverless, c'est une application par fonction (pour faire simple) que tu refiles a un herbergeur cloud, et c'est lui qui s'occupe de tout le boiler plate : Scale up/scale Down, hebergement, routage, et tutti quanti. Y'a toujours un serveur, of corse, mais c'est absolument plus toi qui t'en occupes. En tout cas, c'est comme ça que j'ai compris le truc. Les technos derrières, c'est les lamba pour AWS et Google Functions pour Google cloud.

----------


## William Vaurien

Ok, mais en quoi ça change le besoin d'un framework ? Je vois des équipes faire des micros services avec Springboot pour l'accès aux données, les contrôleurs REST et toute la panoplie.
La sécurité est déléguée via une API gateway.

J'étais intéressé par le côté sans Spring.

----------


## gros_bidule

Serverless, ce n'est pas server d'application less ?
J'entends par là : 
- une webapp SpringBoot packagée en war et installée dans Tomcat -> serveur pas less
- une webapp SpringBoot packagée en jar et qui embarque un tomcat embed -> serverless, car c'est le jar que tu lances directement

Des applis serverless je peux te donner un exemple, c'est ce qu'on fait à mon taff (Spring je n'en fais plus que sur des projets perso et projets démo pour ne pas perdre la main  :Emo: ) :
on gère l'infra d'un FAI via des microservices python, + quelques applis serveurs tout de même. Les microservices python sont effectivement chacun liés à une tâche précise (ex : installer des routeurs virtualisés), et techniquement on a un dockerfile qui lance _python3 monPointDentreePython.py_, et roule ma poule : script helm et on met ça dans des pods Kubernetes.
On n'utilise pas de "framework" (au sens lourd, genre Jango, etc) dans nos microservices Python car on n'en ressent pas le besoin, mais on utilise plein de libs. Pas besoin d'un framework quand ton script tient dans une fonction _main_ et qu'une lib tierce suffit pour communiquer avec le système dont tu as besoin (requêtes SQL, Mongo, Kafka, HTTP, SSH, etc). Certains écoutent sur HTTPS et reçoivent des ordres (configurer un routeur X avec la config Y), d'autres sont autonomes (pool en continu d'un topic kafka + réaction en fonction des messages lus).
Mais honnêtement, on serait une équipe Java-iste, on ferait des microservices SpringBoot, ça marcherait super bien, ne serait-ce que pour l'injection de dépendances, la gestion de la config, tous le helpers etc. Un framework c'est tout de même super pratique quand tu le maîtrises. Là en Python sans gros framework, on s'est développé une armée de helpers, malgré les libs tierces.
Et nos microservices n'ayant pas de contrainte sur le temps de démarrage, même un gros microservice (certains disent migroservice ^^) SpringBoot bien lent à démarrer ne poserait pas problème. Je dis ça car on entend souvent qu'un microservice "doit" démarrer vite, c'est pas vrai (et que SpringBoot serait lent, c'est aussi faux, juste que les gens ne le maîtrisent pas). Une lambda Amazon éphémère que tu paies à la seconde ok, mais un microservice qui va exister 6 mois et hébergé sur ta propre infra, tu te fiches que ça démarre en 1s ou 10s.
Nota : on fait du Python car l'équipe de maintenance fait du Python.

----------


## TwinBis

Non serverless ce sont ce qu'on appelle les Lambdas ou Functions (en fonction du vendeur).

Donc pas de Tomcat du tout, juste des méthodes.

----------


## gros_bidule

Haaa ok, mais pourquoi on ne dit pas juste fonction  ::blink:: 
Ton serveur c'est Kubernetes  ::ninja::

----------


## William Vaurien

Et j'aurais aimé en savoir un peu plus (juste un peu, pas un article de blog) sur comment passer d'un dev avec Spring (ou JEE) en monolithe ou micro-service à un dev serverless avec "juste des méthodes".

----------


## Teocali

> Et j'aurais aimé en savoir un peu plus (juste un peu, pas un article de blog) sur comment passer d'un dev avec Spring (ou JEE) en monolithe ou micro-service à un dev serverless avec "juste des méthodes".


En gros ces méthodes ont des déclencheurs. Par exemple, pour les google functions, c’est soit une requête http, soit un message Pub\Sub. 
Le gros intérêt c'est de déléguer complètement à l'infrastructure Cloud tout le bordel d'infrastructure justement.Rien ne t'empêche de réimplanter la totalité de ton application au sein d'une seule méthode mais bon. a serait un peu dommage

----------


## Kamasa

> c'est intéressant et intriguant ton commentaire Kamasa, tu pourrais détailler comment ça se passe une appli sans serveur ? Je suis aussi habitué à Spring/SpringBoot que je connais suffisamment bien pour servir de référent pour mon équipe alors qu'en fait j'ai juste lu (et compris) un peu la doc.  Je suis à l'aise avec (sauf Spring Secu que je trouve ... cryptique et Spring Batch qui est bien trop compliqué pour le service rendu dans notre cas) et du coup j'ai du mal à imaginer faire sans...





> Kamasa, tu m'interromps si je dit de la merde, mais en gros, le serverless, c'est une application par fonction (pour faire simple) que tu refiles a un herbergeur cloud, et c'est lui qui s'occupe de tout le boiler plate : Scale up/scale Down, hebergement, routage, et tutti quanti. Y'a toujours un serveur, of corse, mais c'est absolument plus toi qui t'en occupes. En tout cas, c'est comme ça que j'ai compris le truc. Les technos derrières, c'est les lamba pour AWS et Google Functions pour Google cloud.


C'est effectivement ça. Sauf peut être pour le serveur qui tourne chez l'hébergeur Cloud, là j'ignore comment ils choisissent de gérer ça.
Mais concrètement (pour nous) et en simplifiant à mort : les lambdas d'AWS c'est des bouts de code "exécutables" (un zip pour du javascript/typescript, un jar pour du java, pour lequel on précise une classe et une méthode comme point d'entrée) qui est sollicité par une "API gateway" qui expose des endpoints REST ou HTTP et redirige vers les lambdas justement.

Du coup notre application n'est pas 1 livrable, mais plein de livrables qu'on redéploie à volonté très simplement.
L'avantage des offres Cloud c'est qu'on paramètre la façon dont le scalling doit se comporter et ça gère la charge pour nous.
Et surtout le coût : là où on payait un serveur disponible 24h/24 (sur AWS également) alors qu'il ne devait gérer que des appels très ponctuels, en se débarrassant du serveur on a divisé notre coût d'infra par 15 !

Par contre cette solution n'est pas viable pour toutes les applications. La notre est sollicitée ponctuellement par des utilisateurs pour lesquels on n'a aucun besoin de session utilisateur donc c'est parfait.
Et bien sur la grosse contrainte pour notre appli c'est qu'elle est totalement dépendante de AWS. Si on veut s'en débarrasser ca nous couterait beaucoup de travail (ce qui ne serait pas le cas si on avait choisi de conserver un serveur d'app).

----------


## Teocali

> C'est effectivement ça. Sauf peut être pour le serveur qui tourne chez l'hébergeur Cloud, là j'ignore comment ils choisissent de gérer ça.
> Mais concrètement (pour nous) et en simplifiant à mort : les lambdas d'AWS c'est des bouts de code "exécutables" (un zip pour du javascript/typescript, un jar pour du java, pour lequel on précise une classe et une méthode comme point d'entrée) qui est sollicité par une "API gateway" qui expose des endpoints REST ou HTTP et redirige vers les lambdas justement.
> 
> Du coup notre application n'est pas 1 livrable, mais plein de livrables qu'on redéploie à volonté très simplement.
> L'avantage des offres Cloud c'est qu'on paramètre la façon dont le scalling doit se comporter et ça gère la charge pour nous.
> Et surtout le coût : là où on payait un serveur disponible 24h/24 (sur AWS également) alors qu'il ne devait gérer que des appels très ponctuels, en se débarrassant du serveur on a divisé notre coût d'infra par 15 !
> 
> Par contre cette solution n'est pas viable pour toutes les applications. La notre est sollicitée ponctuellement par des utilisateurs pour lesquels on n'a aucun besoin de session utilisateur donc c'est parfait.
> Et bien sur la grosse contrainte pour notre appli c'est qu'elle est totalement dépendante de AWS. Si on veut s'en débarrasser ca nous couterait beaucoup de travail (ce qui ne serait pas le cas si on avait choisi de conserver un serveur d'app).


En gros, c'est la logique du micro-service poussé à l'extreme.

A noter que Spring fournit un framework qui permet de déployer sur AWS ou Google Cloud de manière quasi-transparente, je crois.

----------


## William Vaurien

Ok, donc tu mets ce que tu veux dans ton jar (donc éventuellement une appli springboot). 
Est-ce qu'AWS force l'utilisation d'API propriétaire pour le stockage des données (comme sur Google App Engine  - ça fait des années que je ne regarde plus cette archi, c'était comme ça il y a une dizaine d'année)

----------


## Kamasa

Quand tu parles de mettre ce que tu veux dans un jar, si c'est le jar d'une lamda alors non, va pas mettre une appli Springboot.

Ton Springboot embarque son serveur d'application qui va mettre son p'tit temps à démarrer et dont l'intérêt est de rester en vie.
Les lambda AWS sont censées avoir une durée de vie très courte et surtout on s'attend à ce qu'elles puissent démarrer très rapidement (logique puisque si un endpoint n'est pas sollicité, il n'y a pas de lambda qui tourne derrière).

Et là le raisonnement logique c'est de se dire "du Java qui démarre rapidement ? MER IL ET FOU !".
Effectivement. On a bien quelques fonctions en Java qui démarrent en quelques secondes et on trouve ça bien trop long. Donc soit on construit nos Jar avec Quarkus et là on démarre nos jars en moins de 0.1 seconde, ce qui est cool  :Cigare:  soit on écrit nos fonctions en Typescript, beaucoup plus rapide à démarrer.

Pour ce qui est du stockage de données, c'est toi qui voit.
Soit tu l'externalise complètement et tu l'appelle via un appel HTTP classique mais là il sort du réseau privé. Soit tu le fait gérer par un service AWS (via le service RDS par exemple). Soit tu passes sur le service de stockage de AWS (DynamoDB, non-relationnel).

En vrai, AWS ne te force l'utilisation d'aucun de leur service dédié. En fait si puisque tu passes par leur infra tu vas utiliser leurs services d'infra bien sur  :^_^: 
Mais si tu veux conserver une app SpringBoot, alors tu la déploie sur leur service EC2 qui est adapté. Tu veux conserver ta BDD ? Tu passes par RDS, mais en (très) gros ces services vont un peu faire passe-plat.

----------


## William Vaurien

tu peux faire un spring boot non web et donc sans serveur d'appli, par exemple pour utiliser spring-data ou des services existant. Et ça démarre relativement vite un spring-boot dépouillé de la sécu et du web... (Bon ok c'est plus de 1 seconde)
Après c'était purement théorique comme commentaire.

Vous avez du coup des dizaines de petits modules tous indépendant les uns des autres ?

----------


## Kamasa

C'est ça, sur notre app principale on a un projet (géré par Maven) avec une vingtaine de modules, certains modules pondent plusieurs livrables.

Après avec AWS il y a tout un plan de déploiement sur leur infra : CloudFormation. Soit on le renseigne à la main, soit on fait un snapshot d'un truc actuellement déployé (genre notre branche de dev), soit on le reconstruit avec CDK qui nous permet d'écrire "programmatiquement" notre stack de déploiement (ce qui est aussi très pratique).

Le redéploiement complet c'est quand on repart de 0 sur une branche de dévelopment.
Dans la pratique, tu fais des modifications sur une fonctionnalité, tu construit ton livrable, tu te rends sur AWS et tu redéploies juste le truc que tu viens de modifier en uploadant ton zip/jar. C'est quasiment du micro-service comme l'a fait remarque Teocali.

----------


## Teocali

> Ok, donc tu mets ce que tu veux dans ton jar (donc éventuellement une appli springboot).


Je connais pas pour AWS, mais pour Google Cloud, ce n'est pas possible. Ta fonction doit être une classe Java qui hérite d'une certaine interface, et c'est la méthode de cette interface qui est appelée. Si tu voulais faire du Spring boot la dedans, faudrait greffer le cycle de vie de ton application Spring boot sur celui de la fonction (parce que tu n'as pas de réel controle sur celui de la fonction, juste la possibilité de l'interroger).



> Est-ce qu'AWS force l'utilisation d'API propriétaire pour le stockage des données (comme sur Google App Engine - ça fait des années que je ne regarde plus cette archi, c'était comme ça il y a une dizaine d'année)


Je ne sais pas pour AWS, mais ce n'est pas le cas pour les fonctions google. Par contre, par défaut, elle n'ont pas accès a l'exterieure, faut que tu configures correctement ton projet GCP pour ça.
Et ça n'a de toute façon aucune espèce d'interet : une Fonction google a pour but de pouvoir être démarrée et arrêtée de manière transparente.

En gros, pour faire une comparaison avec Spring Boot, chaque function est grosso modo, soit une methode d'un de tes controller, soit un controller entier. c'est très restrictif, bien sur, mais l'idée est là. Tiens, ça devrait te parler : un helloworld en Google Function : https://github.com/GoogleCloudPlatfo...HelloHttp.java

----------


## Dross

Oui, c'est une implémentation avec des limitations. Chez Azure (Azure Function) t'a une limitation de temps d’exécution, au delà le code est déchargé et ton appel perdu. L'intérêt principal de ces trucs là c'est la composabilité avec les autres produits clouds et les évènements proposés : un fichier viens d'être uploadé sur un AzureBlob ? Un évènement est automatiquement lancé qui exécute une AzureFunction qui va automatiquement faire du boulot dans une BDD cloud, etc.

----------


## William Vaurien

Merci pour les explications, je comprend mieux le concept. Par contre ça doit vitre être pénible de gérer plein de petits modules s'ils sont interdépendant. 
J'ai l'impression que conceptuellement c'est un peu comme OSGI mais à beaucoup plus grande échelle ?
Au niveau dev local comment ça se passe ? Il y a un 'émulateur' d'env AWS ou il faut déployer aussi sur le cloud ?

----------


## Teocali

> Merci pour les explications, je comprend mieux le concept. Par contre ça doit vitre être pénible de gérer plein de petits modules s'ils sont interdépendant.


Comme dit, c'est "juste" du microservices poussé à l'extrème. Donc si tu es dans une équipe qui a deja résolu les soucis lié a ce genre d'architecture, ça va assez vite, je pense



> J'ai l'impression que conceptuellement c'est un peu comme OSGI mais à beaucoup plus grande échelle ?


Aucune idée. le peu que j'ai vu de OSGI m'a absolument pas donné envie d'aller voir plus loin  ::ninja:: 



> Au niveau dev local comment ça se passe ? Il y a un 'émulateur' d'env AWS ou il faut déployer aussi sur le cloud ?


Je sais pas pour AWS, mais pour Google Functions, tu as un plugin gradle (et sans doute maven) qui te permet de lancer ta fonction en environnement local. Si c'est du HTTP trigger, t'as un simple server web qui dispatche ta requète a ton code. Si c'est un trigger plus compliqué, je sais pas  ::ninja::

----------


## William Vaurien

OSGI c'est très mal expliqué mais ça permet d'ajouter/supprimer à chaud des "bundles" dans une jvm. 
Les bundles sont des jars, avec des services implémentant une interface spécifique. 
OSGI tient à jour une liste de tous les services qui sont installés et qui sont actifs dans la jvm pour pouvoir les connecter les uns aux autres.
Je déteste Eclipse comme IDE mais c'est avec ça que marche (ou marchait dans le passé, je ne sais plus du tout si c'est toujours le cas) son système de plugins. (en fait d'après Wikipédia les 3 gros IDE java utilisent OSGI, ainsi qu'une pelleté d'autres gros produits)

C'est en fait assez proche de la définition des Google Functions que j'ai lu plus haut, sauf que dans le cas de Google la jvm est remplacée par une infra cloud.

J'avais utilisé OSGI pendant mes études pour faire du "java embarqué" (moquez-vous), pour pouvoir ajouter du comportement sur une jvm sans avoir à la redémarrer.

----------


## Teocali

ouais, ok, non, rien a voir en fait. 
Deja, faut piger la logique de microservices : au lieu d'avoir une grosse application, t'en a une pelletachiée qui communique ensemble. Genre par exemple, au lieu d'avoir une seule application e-commerce qui gère ton site, t'as un micro-service "vitrine", un micro-service "panier" et un micro service "compte-utilisateur", chacun de ces services pouvant être une application Spring Boot par exemple. L'avantage est de pouvoir gérer les resources de manière beaucoup plus fine. Genre, si t'as besoin de 8 instances pour gérer le coté panier du truc, ben, tu montes 8 instances du micro-service "panier". Et t'es pas obligé de monter autant d'instance a coté.
L'autre avantage, c'est que comme ces services sont généralement plus petit, ils sont plus réactifs lors des montée ou des descentes en demande.
Par contre, ça oblige a prévoir toute une infrastructure logiciel : un discovery service pour que les nouveaux services puissent dire "je suis là, j'attends", un load balancer pour distribuer la charge, etc.

Le serverless, ça pousse la logique jusqu'au bout : tu ne t'occupes que de ton code, le reste du bordel (load balancing, discovery,etc.) est géré par l'infrastructure de ton hebergeur de Cloud

----------


## Dross

Oui l'idée de la scalabilité est assez centrale avec ces trucs, tu a un handler logique au cul d'un type d'évènement et t'a plus besoin de te préoccuper de combien il faut en mettre, du type de machines, comment le paralléliser, etc. Si t'a des variations énormes d'utilisation c'est très pratique.

----------


## William Vaurien

Le principe des microservices ça va je comprend bien, et c'est quand même un concept assez ancien aujourd'hui. J'étais plus intrigue par les lamda AWS (là je voyais pas du tout de quoi il s'agissait).

Il y a quand même une grosse analogie entre OSGI et ce qui m'a été décrit sur les lamdas AWS et les Google Functions. Il y a un gros changement d'échelle (avec en plus la gestion de la montée en charge) mais on retrouve bien l'idée du bundle avec sa petite fonction qui va être rajouté dynamiquement dans une infra qui contient déjà d'autres petites fonctions.

----------


## Teocali

> Le principe des microservices ça va je comprend bien, et c'est quand même un concept assez ancien aujourd'hui. J'étais plus intrigue par les lamda AWS (là je voyais pas du tout de quoi il s'agissait).
> 
> Il y a quand même une grosse analogie entre OSGI et ce qui m'a été décrit sur les lamdas AWS et les Google Functions. Il y a un gros changement d'échelle (avec en plus la gestion de la montée en charge) mais on retrouve bien l'idée du bundle avec sa petite fonction qui va être rajouté dynamiquement dans une infra qui contient déjà d'autres petites fonctions.


Mouais, ça peut se défendre.

----------


## Kamasa

> Merci pour les explications, je comprend mieux le concept. Par contre ça doit vitre être pénible de gérer plein de petits modules s'ils sont interdépendant. 
> J'ai l'impression que conceptuellement c'est un peu comme OSGI mais à beaucoup plus grande échelle ?
> Au niveau dev local comment ça se passe ? Il y a un 'émulateur' d'env AWS ou il faut déployer aussi sur le cloud ?


Sur AWS, vu que tout ce qu'on déploie est accessible derrière une API Gateway, c'est ce service qui relie le tout et chaque développeur peut donc déployer sa propre stack derrière son API-Gateway-à-lui.
Et vu que le gros intérêt du serverless est que ça ne coute rien quand ce n'est pas sollicité, alors on se créé plein de stacks pour nous  ::): 
Il existe un AWS-cli qui nous permet d'interfacer des lambdas qu'on fait tourner localement et qui sont "branchées" sur une API Gateway déployée, très pratique pour debugger par exemple.

Concernant l'interdépendance, ce n'est pas vraiment le cas. Faut vraiment voir les lambdas comme des fonctions indépendantes (qui peuvent toutefois s'appeler les unes et les autres, mais on ne le fait pas trop)

Et enfin, l'analogie avec OSGi n'est pas trop viable avec les Lambdas, par contre elle me parait plus pertinente avec l'ensemble d'une plate-forme comme AWS (à une autre échelle par contre)

----------


## Nilsou

Je ne trouve pas de topic réseau généraliste où poser cette question, alors je pose ça là vu que c'est surement là qu'il y a le plus de « gens qui savent », n’hésitez pas à me dire si on a un endroit plus approprié. 

Je me posais la question de la sécurité dans un réseau, je suis nul dans ce domaine et on a quelques questions qui émerge dans ma boite à ce propos en ce moment et j'ai parfois du mal à tout saisir.

Par exemple, je ne comprends pas forcement super bien un concept pourtant assez simple : le filtrage de port. Ça pose pas mal de soucis applicatif là ou je suis et ça semble être une nécessité de sécurité. Pourtant j'ai un peu du mal à saisir en quoi, finalement, un filtrage de port augmente la sécurité. Déjà parce qu'il faut que quelqu'un écoute sur les ports en questions, donc on filtre en supposant qu'il y aurait un logiciel malveillant à l'écoute chez nous ?  ::unsure::  
Et ensuite, même dans cette hypothèse, qu'est ce qui empêche le-dit logiciel malveillant d'emprunter un port ouvert très couramment (tout port en rapport avec le web ou autre).

Bref, en somme, de l'exterieur d'un point de vue de non professionnel du domaine ça donne l'impression d'une mesure de protection un peu au pif... j'imagine que ce n'est pas vraiment le cas, comment expliqueriez vous ceci ?

----------


## rOut

> Je ne trouve pas de topic réseau généraliste où poser cette question, alors je pose ça là vu que c'est surement là qu'il y a le plus de « gens qui savent », n’hésitez pas à me dire si on a un endroit plus approprié. 
> 
> Je me posais la question de la sécurité dans un réseau, je suis nul dans ce domaine et on a quelques questions qui émerge dans ma boite à ce propos en ce moment et j'ai parfois du mal à tout saisir.
> 
> Par exemple, je ne comprends pas forcement super bien un concept pourtant assez simple : le filtrage de port. Ça pose pas mal de soucis applicatif là ou je suis et ça semble être une nécessité de sécurité. Pourtant j'ai un peu du mal à saisir en quoi, finalement, un filtrage de port augmente la sécurité. Déjà parce qu'il faut que quelqu'un écoute sur les ports en questions, donc on filtre en supposant qu'il y aurait un logiciel malveillant à l'écoute chez nous ?


Ou une fausse manip, ou un logiciel mal configuré, ou bugué, ou un truc innocent mais trop moderne avec une super feature d'auto update dont personne n'est au courant mais que des hackers pourraient connaître et utiliser pour profiter d'une faille. D'une manière générale, on peut considérer qu'une bonne sécurité c'est quand tu sais ce qu'il se passe précisément, et donc tout ce qui n'est pas censé être utile au bon fonctionnement du système doit être bridé.




> Et ensuite, même dans cette hypothèse, qu'est ce qui empêche le-dit logiciel malveillant d'emprunter un port ouvert très couramment (tout port en rapport avec le web ou autre).
> 
> Bref, en somme, de l'exterieur d'un point de vue de non professionnel du domaine ça donne l'impression d'une mesure de protection un peu au pif... j'imagine que ce n'est pas vraiment le cas, comment expliqueriez vous ceci ?


Rien ne l’empêche, à priori. Et en particulier maintenant qu'à peu près tout passe par du http(s) bah ça devient un peu inutile de filtrer les autres ports. C'est pour ça qu'ensuite tu vas souvent avoir des filtres supplémentaires plus haut niveau, avec par exemple analyse des ips ou même des entêtes et du contenu http(s) - oui, y compris sur du https, dans certaines boites tu vas avoir un certificat racine de la boite installé sur les ordis pour permettre au firewall de déchiffrer et rechiffrer le traffic, pour faire du check antivirus et cie, sans avoir d'avertissement de sécurité sur le navigateur.

----------


## Kamikaze

Ton raisonnement est globalement correct Nilsou, mais ça reste une protection potentiellement utile:

Déjà faut voir de quel sens on parle, filtrage entrant ou sortant.

Dans le cas du filtrage entrant tu vois bien que ça t'économises de recevoir du traffic polluant pour rien. Plutôt que de recevoir une tentative d'accès (extérieure) SSH sur port 22, bah tu la drop/discard direct.

Sinon comme l'a dit le canard ci dessus ça reste une première mesure "gratuite" qui peut parfois te sauver à moindre coût, autant le faire, une espèce de parachute de secours ou de ceinture, d'airbag, tu veux jamais te reposer dessus, mais ça peut s'avérer utile. S'comme dire pourquoi j'ai besoin d'un airbag, suffit de bien conduire.

Imaginons un sous réseau qui accepte du traffic externe (ton pc chez toi par exemple, il accepte du traffic externe, pareil pour la console de jeu), dans le sous réseau t'as des appareils qui communiquent entre eux sur le port XXXX. Ca t'évites de recevoir du traffic externe qui tenterait de controler tes devices à distance.

Bien sûr au niveau du device tu pourrais implémenter la protection, mais pourquoi ne pas déléguer ça à un composant supérieur et dormir tranquille. Et éviter qu'un petit malin imprime sur ton imprimante ou commande 40 café fraises sur la machine à café connectée.

Surtout que si c'est une imprimante connectée achetée pas cher, bah tu peux pas modifier le firmware, donc comment tu évites qu'un guignol la contrôle à distance?

Ton imprimante tout ce qu'elle attend c'est qu'un paquet réseau lui arrive dans le nez avec une IP source et sur le port approprié. Elle a aucun contexte de où elle se situe en terme de sous réseau et d'où provient le traffic, elle reçoit des instructions et point barre.

---

Alors bien évidemment mes exemples sont un peu exagérés, tu pourrais simplement mettre les devices à risque dans un sous réseau dédié (sous sous réseau donc), inaccessible de l'extérieur, drop tout traffic extérieur, ou provenant d'ip non reconnues (mais du coup faut gérer l'ip spoofing, surtout en ipv4), etc. C'est le job du firewall, et tu peux arriver à un niveau de sophistication très élevé.

Mais plutôt que de trop réfléchir, tu peux dire, bon je dégage tout ce qui ne fait pas partie des ports que je veux supporter, au moins c'est fait.

C'est effectivement une mesure de sécurité assez faible, et y'a de nombreuses failles à exploiter si c'est ta seule protection, mais c'est un premier pas.

----------


## Kamikaze

Un exemple typique, qui effectivement est un peu naze c'est quand une boite bloque du traffic sortant, et c'est peut-être l'exemple que tu avais en tête (edit: ah non tu parles d'entrant, donc l'exemple ci dessus).

Genre imaginons que ma boite m'empêche de faire du SSH vers l'extérieur, ou du HTTP (80). Je peux effectivement contourner ça en un clic en me connectant via n'importe quel autre protocole/port dispo à une machine distante et je demande à la machine distante de s'occuper de mon business, un tunnel donc (on peut aussi dire proxy, même idée, c'est un tunnel logique fourni par une machine distance "le proxy").

----------


## Nilsou

Ok. Je comprends votre raisonnement.

Moi mon soucis ici c'est que je suis contraint dans pas mal de domaine ou je bosse localement d'utiliser des logiciels qui s'en remettent à des ports aléatoires. Dans les deux sens. (ROS typiquement)
Du coups j'aurais bien aimé que les autres sous réseau de la boite puisse communiquer avec celui-ci sur tout les ports et puisse envoyer du trafic entrant à tout les PC de la boite sur n'importe quel port. 

Sauf que non gnagnagna _« tu imagines si quelqu'un hack ton robot mal protégé là, surtout que tu as plein d’élève qui vont y accéder en root, alors il pourrait tenter de hacker les PC des autres etc. »_ . Je trouve que ça confine un brin à la paranoïa ... 

Bon et accessoirement c'est bloquant pour moi. On me propose de mettre des VM sur le même sous réseau, mais comme c'est franchement pas l'objectif de l'enseignement c'est n'imp ...

----------


## Orhin

Disons que ça fait partie de la stratégie de défense en profondeur : chaque couche de protection est loin d'être suffisante en soit mais c'est l'accumulation des différentes couches qui permet d'avoir une bonne sécurité (surtout contre des types d'attaque très variés).

----------


## Nilsou

Ok je découvre. Je pensais que la sécurité c'était quand même moins du gruyère  ::P:  

C'est quand même particulier finalement de se dire qu'on ne peut pas profiter pleinement d'une technologie de communication sur un parc de PC en local par peur des attaquants externes ...

----------


## Orhin

Ben après, le filtrage au sein du réseau local c'est pas directement contre les attaques externes, plus pour éviter la propagation de celles-ci.
Et les attaques internes ça existe aussi.  ::ninja::

----------


## Nilsou

Oui, ils ont peur que des personnes usant du matériel puissent accéder à d'autres PC. 

La sécurité, c'est un monde de merde, je vous le dit !

----------


## Kamikaze

Pouah j'ai enfin commencé à toucher aux concept en c++20 (oui je suis en retard). Enfin ce besoin de base est pourvu! Les compilateurs récents ont le support.

On avait besoin de ça depuis tellement longtemps.

Bon je découvre tout juste donc y'a encore plein de trucs et de bonnes pratiques qu'il faut que j'apprenne, mais ça me sert déjà beaucoup.

Enfin un moyen hyper simple de faire des interfaces pour les templates, faut que je me trouve une bonne doc sur le sujet pour voir tous les trucs cool qu'on peut faire.

Voilà un exemple hyper basique



```
template<class T>
concept Clock = requires(T clock) {
    { clock.test() } -> std::convertible_to<bool>;
    clock.start();
    clock.stop();
    clock.get_time();
};

template<class T> requires Clock<T>
class ClockConsumer {
};

class ClockInstance {
  public:
    static bool test() { return true; };
    void start() { };
    void stop() { };
    void get_time() { };
};

int main() {
    ClockConsumer<ClockInstance> clock_consumer;
    return 0;
}
```

D'autres exemples plus pertinents ici: https://en.cppreference.com/w/cpp/language/constraints

----------


## Cwningen

Comment ça ? Tu ne le faisais pas déjà en C++17 ?  ::ninja:: 

Sinon, oui les concepts c'est bien : plus simple à écrire, plus simple à lire, plus simple à compiler, plus simple à débugguer.

----------


## Kamikaze

Mais quelle horreur

----------


## Nilsou

Ça a l'air sympa, c'est fait à la compilation la vérification c'est ça ? 
Je suis pas super convaincu par le vocabulaire utilisé par contre. « Constraint » et autres « require » ça va, mais « concept » on sent qu'ils étaient en panne d'inspiration quand même  ::P:  ( et je vois pas le lien avec ce que ça fait : proposer une liste de prérequis pour autoriser la compilation)

----------


## Kamikaze

Mouais ça va. Genre un véhicule c'est un concept (un truc qui transporte des trucs), une voiture c'est un véhicule mais s'pas un concept c'est concret et ça respecte la contrainte du concept (ça transporte des trucs). Donc pourquoi pas.

Sinon l'idée pour aller plus loin c'est de faire de la méta programmation, donc en gros tu peux même caser des <if> et autres calculs dans le tas.

Donc imaginons que tu implémentes un calcul de racine carré, tu pourrais balancer un if qui selon le concept produira telle ou telle méthode plus optimisée. 
L'idée finale étant d'optimiser au maximum avant le runtime. Tu "bake" tout l'information disponible compile time pour avoir les meilleures perfs runtime.

----------


## Cwningen

Tu aurais voulu appeler ça comment ? "class" comme en Haskell ? On aurait enfin trouvé une utilité à ce mot-clé.

En fait ce vocabulaire était déjà utilisé avant mais sans faire parti du langage (par exemple l'ancien "concept" Iterator, maintenant renommé "named requirements" LegacyIterator pour ne pas le confondre avec le nouveau concept input_or_output_iterator).

----------


## Nilsou

> Tu aurais voulu appeler ça comment ? "class" comme en Haskell ? On aurait enfin trouvé une utilité à ce mot-clé.


Je l'aurais appelé bêtement prerequisite. Puisque ce n'est pas vraiment un « concept » (pour moi une classe est déjà un concept) mais une liste de prérequis pour d'autres choses (qui pourraient être plus générale d'ailleurs et qu'on aurait pu imaginer être appliqué à d'autres choses qu'aux templates). 
Le problème c'est que c'est un outil pour les template uniquement, il aurait donc fallut que ce soit clair que ça rentre dans ce cadre (template_prerequisites ?) mais ce n'est pas très limpide.

De fait, entre le fait que c'est uniquement destiné aux template alors qu'on pourrait imaginer des usages plus généraux, et le fait que sur la forme c'est un peu obscur entre le terme et l'usage, je trouve que ça donne le sentiment d'un machin certes très intéressant mais peut-être encore un peu mi-cuit...

Mais bref je pinaille, c'est déjà bien que ça existe. 




> Sinon l'idée pour aller plus loin c'est de faire de la méta programmation, donc en gros tu peux même caser des <if> et autres calculs dans le tas.


D'ailleurs à la fin on aboutira à un truc avec des #if #elif pour faire faire des choses au compilateur durant les premières étapes de la compilation en fonction de diverses condi... oh wait ...  :tired: 

 ::ninja::

----------


## Kamikaze

Haha nan mais en vrai t'as pas tort, c'est d'ailleurs une des critiques régulière de Jonathan Blow, il bosse sur son nouveau langage et il veut pouvoir faire du compile time nativement avec son langage sans avoir une syntaxe dédiée, ce qui me parait tout à fait raisonnable.

Je retrouve plus la vidéo mais il montre un truc rigolo ou quand il lance la compilation ça lance un jeu, et la compilation/l'assert ne réussit que s'il bat le jeu

- - - Mise à jour - - -

Chui encore circonspect de l'intérêt (mis à part le confort évident).

Au final je trouve qu'en programmation on manque pas mal de recherche théorique en algorithmique/maths du coup au final c'est dur de distinguer un choix solide et pertinent, d'une décision arbitraire quand on parle de langage.

On a l'air d'avancer à taton concernant ce qui serait la meilleure syntaxe sans faire de grandes avancées.

- - - Mise à jour - - -

Y'a cette vidéo sympa de Jason Turner où il applique les nouveautés du langage (c++17 ici) à un projet existant, et il regarde le gain de perf et l'impact en termes de lignes de code.

C'est donc à taton, mais au moins une mesure quantifiable de mieux ou moins bien, contrairement à un choix arbitraire avec une maigre tentative de justification

https://www.youtube.com/watch?v=nnY4e4faNp0

----------


## Cwningen

Je ne vois pas quel sens ça aurait en dehors des génériques. Ce sont des contraintes sur les types, jamais sur les valeurs. Tu ne peux pas t'en servir pour exprimer des préconditions.

Pour le nom, dans la pratique un concept est lui-même un template donc c'est toujours écrit "template<...> concept = ...". Tu voudrais "template<...> template_concept = ..." ? Après on parle d'un langage dans lequel on écrit "noexcept(noexcept(...))", ça aurait pu passer.

----------


## Nilsou

Bof tu aurais pu l'étendre à n'importe quoi avec la même syntaxe : je dis que ma fonction X ses deux premiers arguments doivent répondre à telle ou telle contrainte, et à la limite même si ma fonction en question à des arguments au type fixe et non des types changeant, ça permettrait de mettre en place des autoverif de son code à moindre cout (un peu de la même manière que les const, d'ailleurs ça pourrait être placé au même endroit).

La remarque de Kamikaze est également pertinente sur la syntaxe, on pourrait imaginer que ça ne fasse pas que des tests en début de compilation mais également en utilisant des bouts de code du même langage pour faire passer des tests complexe sans dépendre d'une autre syntaxe.

- - - Mise à jour - - -




> Au final je trouve qu'en programmation on manque pas mal de recherche théorique en algorithmique/maths du coup au final c'est dur de distinguer un choix solide et pertinent, d'une décision arbitraire quand on parle de langage.


C'est particulièrement le cas dans les dernière version de C++ je trouve où on enchaine des nouveauté toutes les quelques années actuellement. Pas certains que l'écart court entre deux versions permettent d'avoir des retours suffisants pour mettre les choses à plat.

----------


## Lazyjoe

> Bof tu aurais pu l'étendre à n'importe quoi avec la même syntaxe : je dis que ma fonction X ses deux premiers arguments doivent répondre à telle ou telle contrainte, et à la limite même si ma fonction en question à des arguments au type fixe et non des types changeant, ça permettrait de mettre en place des autoverif de son code à moindre cout (un peu de la même manière que les const, d'ailleurs ça pourrait être placé au même endroit).


Et on pourrait appeler ça "assert" !  ::w00t:: 




> La remarque de Kamikaze est également pertinente sur la syntaxe, on pourrait imaginer que ça ne fasse pas que des tests en début de compilation mais également en utilisant des bouts de code du même langage pour faire passer des tests complexe sans dépendre d'une autre syntaxe.


Autant je veux bien que la syntaxe soit un peu lourdingue, mais ce serait très clairement une mauvaise idée de mélanger la syntaxe entre ce qui est compile-time et ce qui est run-time.
A ce compte-là on fait tout au runtime et on s'appelle python.  ::ninja::

----------


## Nilsou

> Et on pourrait appeler ça "assert" !


Oui ben je disais qu'on pouvait avoir un truc unifié justement  ::P: 

- - - Mise à jour - - -




> Autant je veux bien que la syntaxe soit un peu lourdingue, mais ce serait très clairement une mauvaise idée de mélanger la syntaxe entre ce qui est compile-time et ce qui est run-time.
> A ce compte-là on fait tout au runtime et on s'appelle python.


Nan mais c'est du compile time, c'est juste que c'est la même syntaxe interne, te permettant de faire n'importe quoi. (comme le montre l'exemple de Kamikaze, on pourrait même lancer un jeu et compiler ou non en fonction du résultat du jeu haha)

----------


## Lazyjoe

> Oui ben je disais qu'on pouvait avoir un truc unifié justement


Ben c'est quoi l'intérêt réel d'avoir une syntaxe commune ? Faire de la méta-méta-programmation ?  ::ninja::

----------


## Kamikaze

Bah pourquoi avoir une syntaxe distincte?

Dans Jai, Jonathan Blow a fait le choix d'utiliser une balise, tout ce qui est sous #run ça sera compile time, c'est fait via un interpréteur/compilo rapide, donc certes moins performant mais c'est interactif. Et quand tu passes en mode release ça compile plus sérieusement avec optimisations et tout le tintouin

M'enfin j'ai pas un avis particulièrement solide sur le sujet, me parait normal d'avoir la même syntaxe partout

----------


## Cwningen

Sauf que les concepts n'ont pas la même utilité que assert/static_assert.



```
template<std::integral T>
void foo(T value) {
  // version de la fonction utilisant des entiers
}

template<std::floating_point T>
void foo(T value) {
  // version de la fonction utilsant des flottants
}

int main() {
  foo(1); // utilise la première version avec T = int -> ok
  foo(1.0); // utilise la seconde version avec T = double -> ok
  foo("blabla"); // pas de version foo qui correspond -> erreur
}
```

Le non-respect des contraintes ne génère pas d'erreur en lui-même, il empêche seulement de considérer la fonction dans la résolution de la surcharge. L'erreur de foo("blabla") n'est pas que const char[7] ne respecte pas les contraintes, c'est qu'il n'existe pas de version de foo qui accepte un const char[7].

----------


## Nilsou

> Le non-respect des contraintes ne génère pas d'erreur en lui-même, il empêche seulement de considérer la fonction dans la résolution de la surcharge. L'erreur de foo("blabla") n'est pas que const char[7] ne respecte pas les contraintes, c'est qu'il n'existe pas de version de foo qui accepte un const char[7].


Ce qui est exactement la même chose hein  :Cafe2: 
Foo ne compile pas parce qu'aucune version disponible ne respectent les contraintes. Le fait que ça se mix avec le mécanisme de surcharge est ici hors propos, on peut tout à fait imaginer ce dont on parlait se mixer avec le mécanisme de surcharge de même. Donc si, c'est bel et bien la même chose en définitive et on pourrait imaginer la même syntaxe.

----------


## Cwningen

Mais "foo(1)" et "foo(1.0)" ne génèrent pas d'erreurs, alors qu'ils ne respectent pas les contraintes de l'autre version. Un static_assert aurait donné une erreur.

----------


## Nilsou

Oui ben c'est le mécanisme de surcharge quoi ...

----------


## Lazyjoe

> Oui ben c'est le mécanisme de surcharge quoi ...


Certes mais là ça fait beaucoup de boulot à pas cher.
Par exemple std::floating_point ça ne désigne pas simplement le type float, mais tous les types à virgule flottante donc float, double et long double.

Donc là avec


```
template<std::floating_point T>
void foo(T value)
```

Le compilateur va pouvoir instancier les trois variantes de foo pour ces trois types. Et ne les instanciera réellement que si le code les utilise avec ces types, aucun gâchis.

Après ça reste un usage un peu basique, on peut faire des trucs bien plus avancés notamment avec le mot-clé _requires_ qui permet de filtrer les objets qui peuvent évaluer les expressions de ton choix.

Par exemple tu pourrais définir le concept "possède une opération d'addition et de multiplication"


```
template<typename T>
concept HasAddandMul = requires (T a, T b) { 
    a + b; 
    a * b;
};
```

A partir de là, si un objet valide ce concept tu sais qu'il pourra évaluer ces opérations... donc tu peux écrire une fonction 100% générique qui ne se base que sur ces propriétés.
Par exemple un produit scalaire sur des vecteurs 


```
template<typename T> requires HasAddandMul<T>
T dotProduct(std::vector<T> a, std::vector<T> b) { 
...}
```

(disclaimer : ma syntaxe est peut-être voire probablement pas bonne, c'est pour illustrer l'idée  ::ninja::  )

Et là tu peux donner absolument n'importe quelle classe à ce dotProduct si elle valide le concept, donc ça marchera avec le types arithmétiques de base mais n'importe quoi d'autre que tu aurais pu définir, des complexes, des quaternions, des entiers astronomique en 437 bits...

----------


## William Vaurien

à chaque fois que je vois vos exemple de code en C++, je me dis que je suis bien content d'être resté sur du Java...

----------


## Nilsou

> ....


Ouais mais tout ce que tu dis n'a aucun rapport avec la discussion. On peut très bien imaginer mettre tout ça dans un système unifié de définition de pré-requis qui serait mêlée avec le système de concept, par exemple.

----------


## rOut

> Par exemple tu pourrais définir le concept "possède une opération d'addition et de multiplication"
> 
> 
> ```
> template<typename T>
> concept HasAddandMul = requires (T a, T b) { 
>     a + b; 
>     a * b;
> };
> ...


Et le top c'est que ça marchera avec n'importe quoi qui surcharge * et +, y compris avec une sémantique complètement différente de la multiplication et de l'addition, pour donner un dotProduct qui n'a aucun sens mais qui fait quand même des trucs.  ::lol:: 

Moi je suis bien content d'être passé au C finalement, c'est un niveau de zen sans commune mesure.

----------


## Nilsou

C'est clair que quand il s'agit de reprendre le code d'un autre, le C++ peut réserver bien des surprises. J'ai effectivement plus de confiance quand je bosse sur de gros projet en C  ::P: 

Pourtant j'aime le C++, mais quand j'écris mon propre code ou que j'utilise un code que je connais à 100%  ::P: 





> Y'a cette vidéo sympa de Jason Turner où il applique les nouveautés du langage (c++17 ici) à un projet existant, et il regarde le gain de perf et l'impact en termes de lignes de code.
> 
> C'est donc à taton, mais au moins une mesure quantifiable de mieux ou moins bien, contrairement à un choix arbitraire avec une maigre tentative de justification
> 
> https://www.youtube.com/watch?v=nnY4e4faNp0


J'ai vu l'ensemble de la vidéo, ben c'est pas glorieux. La plupart des features qu'il test n'apporte globalement pas grand chose et il n'y en a qu'une ou deux qui se démarquent...

Bon après c'est loin d'être très scientifique, c'est beaucoup de doigt mouillé son analyse...

----------


## GrandFather

> à chaque fois que je vois vos exemple de code en C++, je me dis que je suis bien content d'être resté sur du Java...


Quoiqu'en ce moment c'est pas la fête...  ::ninja::

----------


## William Vaurien

C'est clair que ça craint un max... les très nombreuses applis de ma boîte utilisent logback, nous nous contentons de regarder le monde trembler autour de nous...

----------


## TwinBis

Ce qui sauve un peu le truc c'est en effet que le logger par défaut de Spring Boot c'est Logback, donc utilisé par beaucoup de monde.

----------


## gros_bidule

Yes, ça craint pas tant que ça, bcp de monde s’excite en se demandant s'il a un projet qui utilise log4j, et tu en as qui pensent avoir un soucis car ils ont log4j-api. log4j-api n'est pas vulnérable (c'est la spec), c'est log4j-core (l'implémentation) qui l'est, or les projets Spring Boot utilisent plutôt logback par défaut depuis pas mal de temps, donc c'est safe de ce côté.

Mais ce qui me fait hurler de rires, ce sont les gens qui se demandent (publiquement, sur le blog de Spring notamment) si leur projet est vulnérable, en mentionnant les versions de leurs libs log4j, spring boot etc. Là, tu réalises que leurs libs ont 5 ou 6 ans (j'ai même vu du spring boot v1, sérieux, et même pas la dernière version de la branche 1.x...), donc 1/ oui ils sont sûrement affectés par la vulnérabilité 2/ vu qu'ils n'ont rien mis à jour depuis 6 ans, ce n'est pas la seule vulnérabilité à craindre ^^.

Le gouvernement canadien a pris la bonne décision : couper tous les sites gouvernementaux (plus de 3000) le temps de faire l'inventaire et corriger ce qui doit l'être.
Coté français je ne sais pas. J'ai juste une pensée pour mes anciens collègues d'un gros site gouvernemental, qui doivent sûrement rusher pour fixer ça, et une autre pensée à mes anciens chefs/managers sur ce projet, qui m'ont chié à la figure quand je voulais du temps pour garder le projet à jour (malgré un listing des CVE à la clef).  ::ninja::

----------


## Nattefrost

Ouais c'est la guerre, le nombre de mails depuis ce matin c'est une blague.

----------


## gros_bidule

En plus pas mal de monde commence à être en vacances là  :^_^: 
Et une pensée aux instances Confluence concernées par la faille, d'autant qu'upgrader un Confluence ça ne se fait pas en 5min, et ça impacte le boulot de bcp de monde quand toute ta doc & specs sont dessus. Chez nous c'est derrière un VPN, mais bon... gaffe quand même, un poste infecté pourrait se faire plaisir.

----------


## Raplonu

Désolé, j’en remets une couche… Mais je mets pas d’extrait de code  ::): 




> Pouah j'ai enfin commencé à toucher aux concept en c++20 (oui je suis en retard).


Je pense pas que tu sois en retard. Certains en sont encore à comprendre les smart ptr…




> Dans Jai, Jonathan Blow a fait le choix d'utiliser une balise, tout ce qui est sous #run ça sera compile time, c'est fait via un interpréteur/compilo rapide, donc certes moins performant mais c'est interactif.


Ça existe aussi en C++. C’est pas standard mais ça existe. https://www.circle-lang.org/. (Dispo aussi dans compiler explorer).




> Et le top c'est que ça marchera avec n'importe quoi qui surcharge * et +, y compris avec une sémantique complètement différente de la multiplication et de l'addition, pour donner un dotProduct qui n'a aucun sens mais qui fait quand même des trucs.


À ce moment-là, le compilo serait bien incapable de distinguer un floating point d’un integral.

Le standard liste explicitement les types rentrant dans ces catégories et permet d’en ajouter explicitement.




> Au final je trouve qu'en programmation on manque pas mal de recherche théorique en algorithmique/maths du coup au final c'est dur de distinguer un choix solide et pertinent, d'une décision arbitraire quand on parle de langage.
> 
> On a l'air d'avancer à taton concernant ce qui serait la meilleure syntaxe sans faire de grandes avancées.


Je pense pas qu’on ne manque de recherche en théorie des langages et dans les domaines associés. Par contre, ça se fait forcément à tâtons, c’est le principe de la recherche. Le C++ en a bénéficié notamment grâce à Stepanov concepteur de la STL qui y a introduit des concepts aujourd’hui mainstream (itérateur, sentinelle, concept).

C’est juste qu’il est compliqué pour un langage vieux de 36 ans de se révolutionner et ce sans chambouler une industrie gigantesque.

Je pense que les avancés que tu cherches sont à trouver dans des langages plus récents (Rust, Haskell, Julia — Liste pas du tout exhaustive).

----------


## Kamikaze

Je suis Sean Baxter sur twitter depuis un moment ouais, je connaissais, mais bon s'pas encore officiel supporté ni rien, si (ah oui "pas standard" comme tu l'as déjà dit)? Mais oui prometteur.

Concernant la recherche, l'utilisation de valeurs sentinelles c'est un gain algorithmique, c'est tout simplement l'implémentation la meilleure dans certains cas. Mais s'pas vraiment un élément de langage (en c++ en tout cas, curieux de savoir si ça l'est dans d'autres?)

Pour les itérateurs (et le reste) justement je me demande si y'a une telle justification algorithmique.

----------


## Kamikaze

'Fin quoiqu'on pourrait dire que les strings null-terminated c'est un élément de langage ouais

----------


## Lazyjoe

> Pour les itérateurs (et le reste) justement je me demande si y'a une telle justification algorithmique.


Bah l'idée de base des itérateurs c'est de s'abstraire de la structure de donnée sous-jacente. Tu as un algo qui traite tes valeurs à travers un itérateur, tu peux lui filer une liste, un vector, une liste doublement chaînée de matrices à 14 dimensions... 
Bon tu me diras c'est très spécifique, mais c'est un peu l'idée qui sous-tend tout ce qui est template et la STL : empiler des éléments de langage génériques pour pouvoir donner un vision très haut niveau tout en laissant la possibilité (ou de préférence en la délégant au compilateur) de gérer l'optimisation dans ses détails à relativement bas niveau.

Et c'est globalement la direction que prend notamment la STL : faire de l'algo à haut niveau et laisser le compilo gérer l'implémentation bas niveau. 
Dans le contexte du HPC c'est un peu le graal, on commence à voir des approches mûres du genre Kokkos où l'idée est d'écrire les "boucles" en tant qu'algo de haut niveau, et tu laisses après au compilo le travail de définir comment tes données sont rangées en mémoire et dans quel ordre elles sont parcourues, ce qui va changer du tout au tout notamment quand tu veux passer du CPU au GPU, mais aussi quand tu veux faire du multithreading ou de la vectorisation sur le CPU.

----------


## Kamikaze

Mouais je considère pas que ça fasse partie de la syntaxe, pour chaque structure de donnée tu vas devoir implémenter un comportement pour pouvoir fournir cette abstraction.
Mais bon la limite est toujours grise entre librairie standard, langage, etc.

Pour donner un exemple, on pourrait avoir un langage qui a nativement une forte considération quant à l'architecture sous jacente, par exemple un CPU spécifique et l'organisation de son cache etc. Et qui va nativement proposer des abstractions cohérentes avec l'archi sous jacente.

Genre un langage qui te forcerait à déclarer un bloc mémoire avant de déclarer tes variables locales. Comme ça nativement tu serais forcé de faire un choix en terme de modèle de mémoire.

Donc un truc comme: https://en.cppreference.com/w/cpp/he...emory_resource

Serait forcé par le langage.

C'est un exemple (pas forcément très bon) parmi d'autre, mais y'a tout un tas de bonnes pratiques et de choses connues qui ne sont pas reflétées dans les langages existants et j'ai pas l'impression que y'ait encore de langage qui révolutionne vraiment le tout.

----------


## Lazyjoe

> Genre un langage qui te forcerait à déclarer un bloc mémoire avant de déclarer tes variables locales. Comme ça nativement tu serais forcé de faire un choix en terme de modèle de mémoire.
> 
> Donc un truc comme: https://en.cppreference.com/w/cpp/he...emory_resource
> 
> Serait forcé par le langage.


Les devs java du monde entier en PLS....  ::ninja::

----------


## FB74

> Les devs java du monde entier en PLS....


Tsss....  :Tap:

----------


## Patate

Dites je vous interrompt dans votre débat, mais j'ai quelque chose de curieux avec nvim et la compilation.
Que ce soit en Rust (cargo) ou C++ (cmake), Nvim semble me mettre un caractère spécial à la place d'un espace : if (std::cin >> text) *ici* {

Et du coup j'ai ce message à la compilation :
_erreur: le caractère étendu   n’est pas valide dans un identificateur_


```
   13 |     if (std::cin >> text) {
      |                                   ^
```

La flèche ^ pointe entre ) et { si jamais  ::P: 
Il y a un utilisateur de nvim ou vim ? Honnêtement j'ai du mal à trouver des infos sur ce soucis.

Pour palier au problème, je suis obligé de me mettre en mode insertion, supprimer ce fameux espace, puis faire un espace (touche espace) et ça fonctionne.
Est-ce que c'est lié à la touche $ qui m'amène à la fin de la ligne ?

Merci  ::P:

----------


## Robix66

Je pense qu'il veut te dire que les accolades ça se met sur une nouvelle ligne.

----------


## Kamikaze

Utilise un truc pour afficher les caractères spéciaux/invisibles ("cat -A" sous linux), ou regarde en hexadecimal ou autre pour voir quel caractère c'est.

Si c'est autre chose qu'un espace trouve le coupable qui t'insère ça et fume le.

- - - Mise à jour - - -

Ou même un site du genre: https://www.soscisurvey.de/tools/view-chars.php

- - - Mise à jour - - -

Genre si c'est un espace insécable: https://en.wikipedia.org/wiki/Non-breaking_space je vois déjà des gens qui parlent de ça avec vim: 

https://vi.stackexchange.com/questio...ng-curly-brace

- - - Mise à jour - - -




> From time to time, let's say once a month, when I program, I introduce a No-Break space instead of a regular space, before opening a curly brace.
> 
> This happens let's say when I'm writing () {

----------


## Patate

Merci ! J'attends la prochaine erreur et je regarde tout ça, cool !

----------


## Kamikaze

> Others have already provided work-arounds, but as for the reason why it happens, I bet you're accidentally pressing Alt+Space.


D'après le lien

----------


## Patate

Hum ça semble être ça ! Je dois appuyer trop rapidement sur alt+gr pour l'{ et espace en même temps. Ca me sort un espace qui n'en ai pas un...

Merci pour l'info !

----------


## Garrluk

Quelle idée d'utiliser vim avec un clavier AZERTY aussi  :;): .

----------


## Patate

> Quelle idée d'utiliser vim avec un clavier AZERTY aussi .


J'avoue que je n'ai jamais utilisé un autre type de clavier, et j'ai jamais réussi à me détacher de l'édition _à la vim_  ::P:

----------


## Garrluk

Tu devrai essayer de passer sur un QWERTY UK. Contrairement aux clavier US, la touche entrée fait la bonne taille.
Ça permet de bien se rendre compte que vim est conçu pour le QWERTY.
En fait, la plupart des langages de programmations sont plus agréables sur un QWERTY : ya pas besoin de faire des combinaisons de touches compliquées pour accéder aux parenthèses, accolades, crochets, ...
Après tu n'arriveras peut-être pas à accroché, mais aucun des collègues de ma boîte n'était revenu sur AZERTY après qu'on leur ai fait tester le QWERTY quelques jours.

----------


## Patate

> Tu devrai essayer de passer sur un QWERTY UK. Contrairement aux clavier US, la touche entrée fait la bonne taille.
> Ça permet de bien se rendre compte que vim est conçu pour le QWERTY.
> En fait, la plupart des langages de programmations sont plus agréables sur un QWERTY : ya pas besoin de faire des combinaisons de touches compliquées pour accéder aux parenthèses, accolades, crochets, ...
> Après tu n'arriveras peut-être pas à accroché, mais aucun des collègues de ma boîte n'était revenu sur AZERTY après qu'on leur ai fait tester le QWERTY quelques jours.


C'est sur ce que c'est tentant, mais je développe juste pour le plaisir et sur un portable, donc je ne peux pas vraiment changer :/

----------


## Garrluk

Si tu sais touch-type tu n'as pas besoin de changer de clavier, il suffit de changer de layout.
Au début tu auras besoin de garder une image ouverte pour retrouver les touches qu'il te manque, mais après 2/3 jours tu sauras t'y retrouver en QWERTY. La plupart des lettres sont au même endroit, ça facilite pas mal l'apprentissage.
Après, si c'est juste pour le plaisir, je peux comprendre que tu n'ai pas envie d'y investir le temps nécessaire  ::): .

----------


## Patate

> Si tu sais touch-type tu n'as pas besoin de changer de clavier, il suffit de changer de layout.
> Au début tu auras besoin de garder une image ouverte pour retrouver les touches qu'il te manque, mais après 2/3 jours tu sauras t'y retrouver en QWERTY. La plupart des lettres sont au même endroit, ça facilite pas mal l'apprentissage.
> Après, si c'est juste pour le plaisir, je peux comprendre que tu n'ai pas envie d'y investir le temps nécessaire .


Effectivement je pourrais le faire à l'aveugle, mais je dois programmer 5h par semaine, j'aurais jamais le temps de m'habituer  ::P:

----------


## sosoran

Toute cette discussion me fait regretter de ne pas mieux connaitre c++, qui est mon premier langage de prog et qui me plait quand même beaucoup. Mais bon, là je suis parti pour utiliser intensivement Kotlin qui, heureusement, semble avoir des caracteristiques plutot intéressantes

----------


## Kamasa

> Ce qui sauve un peu le truc c'est en effet que le logger par défaut de Spring Boot c'est Logback, donc utilisé par beaucoup de monde.


C'est ce que je me suis dis.
Après j'ai été voir les dépendances de Logback.
Et c'est une librairie fourrée au Log4j  :^_^:

----------


## William Vaurien

non, ce n'est pas "fourrée au Log4j", il y a une dépendance pour permettre de faire un pont logj -> logback, mais les logs ne sont pas traités par log4j.
Et c'est une dépendance vers log4j1 qui n'est pas impacté par le problème.

Après il y a peut être d'autres problèmes avec logback...

----------


## gros_bidule

N'empêche, ça serait quand même drôle si les médias faisaient le même cirque pour chaque faille informatique découverte. Imaginez en plus des failles qui ne sont pas encore corrigeables  ::ninja:: 

Nan parce que bon, log4shell, c'est inoffensif si ton JRE est à jour, ou si tu n'utilises pas log4j 2, ou si tu n'utilises pas le petit composant incriminé (ce qui se désactive avec un bête paramètre, ça va), ou si tu suis les bonnes pratiques de programmation. Si on parle autant de fermetures de sites, c'est surtout : 
1/ pour montrer - le torse bombé et fier - que la sécu est prise en sérieux (lol) 
2/ par prévention, le temps de faire l'inventaire des projets qui sont touchés par la faille (là ok, c'est louable et honnête)

Et pendant ce temps, des néophytes sur la toile crachent sur Java et/ou l'opensource et le libre... sans doute histoire de participer au buzz.

----------


## Teocali

Excellent petit résumé du pourquoi et du fonctionnement de la faille sur theDailyWTF : https://thedailywtf.com/articles/don...-log4j-debacle

Et j'aime beaucoup https://github.com/Cybereason/Logout4Shell/pull/8, qui est un _exploit_ de la faille... qui permet de corriger la faille. Et y'a même une PR qui permettrait de rendre le fix permanent en cherchant et modifiant le Jar a la volée... les mecs sont fondus, y'a pas d'autre mots  ::XD::

----------


## Robix66

> Nan parce que bon, log4shell, c'est inoffensif si ton JRE est à jour, ou si tu n'utilises pas log4j 2, ou si tu n'utilises pas le petit composant incriminé (ce qui se désactive avec un bête paramètre, ça va), ou si tu suis les bonnes pratiques de programmation.


Ouais, donc c'est la catastrophe.  ::ninja::

----------


## Teocali

> N'empêche, ça serait quand même drôle si les médias faisaient le même cirque pour chaque faille informatique découverte. Imaginez en plus des failles qui ne sont pas encore corrigeables 
> 
> Nan parce que bon, log4shell, c'est inoffensif si ton JRE est à jour, ou si tu n'utilises pas log4j 2, ou si tu n'utilises pas le petit composant incriminé (ce qui se désactive avec un bête paramètre, ça va), ou si tu suis les bonnes pratiques de programmation. Si on parle autant de fermetures de sites, c'est surtout : 
> 1/ pour montrer - le torse bombé et fier - que la sécu est prise en sérieux (lol) 
> 2/ par prévention, le temps de faire l'inventaire des projets qui sont touchés par la faille (là ok, c'est louable et honnête)


Ouais, alors, pour le coté pas dangereux : 
https://mobile.twitter.com/infosecat...74771634249740

En gros, votre banque est trouée, surveillez vos comptes.

----------


## Dross

Si votre banque utilise les SMS comme 2FA... elle est trouée by design.

----------


## Orhin

Ceci.
Niveau double authentification, c'est pas le mieux.

----------


## Cwningen

> The best protection is not using SMS for 2FA, wherever possible. TOTP tokens offer much better security.


Je voudrais bien utiliser du TOTP, mais je n'ai que le choix entre le SMS, et l'application à la con de ma banque.  ::(:

----------


## TwinBis

> C'est ce que je me suis dis.
> Après j'ai été voir les dépendances de Logback.
> Et c'est une librairie fourrée au Log4j


Il va falloir revoir ta manière de vérifier des dépendances.  :^_^:

----------


## gros_bidule

> Ouais, alors, pour le coté pas dangereux : 
> https://mobile.twitter.com/infosecat...74771634249740
> 
> En gros, votre banque est trouée, surveillez vos comptes.


A quel moment ai-je dis que ce n'était pas dangereux ? Personne n'a dit ça.

----------


## Teocali

> A quel moment ai-je dis que ce n'était pas dangereux ? Personne n'a dit ça.


quand on te lis, on pourrait résumer ton post en “c’est pas si grave”. Ben si. parce que la dernière version de la lib était trouée, et que l’immense majorité des JVM en exploitation sont trouées aussi.
ca cest pour l’aspect étendue du problème.
pour la gravité, ben, faut un environnement configuré aux petits oignons pour qu’un mec ne choppe pas un accès root sur ton serveur.
et surtout, surtout, c’est extrêmement facile à exploiter. Mais vraiment. Un étudiant avec 6 mois de Java peut mette un truc custom en place.

----------


## Nilsou

Truc que je pige pas forcément : mais le hack semble donner des droits du même niveau que la lib qui tourne. Mais ce n'est pas forcément root si ? Je ne suis pas expert en Java mais je n'arrive pas à saisir pourquoi ces librairies devraient forcément tourner en root ?

----------


## TwinBis

Non les applis ne tournent pas en root (sinon il faut virer des gens).
Mais ça n'empêche pas de faire de gros dégâts, tu as les mêmes droits que l'appli.

----------


## Awake

Pas besoin de root pour récupérer les accès à la base de donnée de production..

----------


## Nilsou

Certes mais tu ne peux pas faire grand chose d'autres, dans la trèèès large majorité des cas ... le pouvoir obtenu est complétement bénin.

----------


## TwinBis

:Facepalm:

----------


## Awake

J'en reviens pas de devoir expliquer ça ici, mais un accès à la bdd de prod est pire qu'un accès root. Il y a toutes les informations des gens dedans, leurs mails, parfois téléphone et adresse physiques, et parfois des informations encore plus sensibles comme dans le médical ou les banques.

----------


## Nilsou

> 





> J'en reviens pas de devoir expliquer ça ici


J'aurais du écrire « me semble complétement bénin », je ne suis pas développeur web, prenez ça sur le ton de la question de curiosité de la part de quelqu'un qui ne touche que du bout des doigts au web, et encore, en y étant obligé  :;):

----------


## Awake

Pas de soucis  ::):  Mais ouais, les bases de données, c'est LE truc que tu veux pas te faire hacker dans le web. Et donc c'est aussi la cible numéro 1. Les listings d'emails se revendent sur le darknet par exemple.

----------


## Kamikaze

Y'a eu plusieurs rapports (via des honey pots notamment) qu'un des payloads les plus commun c'est un mineur de crypto currency, marrant

----------


## Awake

Ça m'etonne pas, c'est surement plus facilement rentable. Je préfère 1000 fois miner quelques crypto à mon insu que d'avoir une base de données filtrer cela dit  :^_^: 

D'ailleurs juste pour vous rendre compte de l'ampleur du soucis log4j, je regardais les logs d'un site que j'ai fait qui n'est pas encore ouvert (et derrière de l'auth htaccess, et avec un nom de domaine inconnu du public), et il y avait plusieurs tentative d'utiliser la faille. Les mecs scans tout.

----------


## Orhin

> Pas besoin de root pour récupérer les accès à la base de donnée de production..


Et même sans accès à la BDD, tu peux foutre un sacré zbeul sur les serveurs avec des accès lambda.
Surtout que ça permet d'utiliser plein d'autres failles potentielles dont la difficulté de mise en œuvre était l'accès machine.




> Y'a eu plusieurs rapports (via des honey pots notamment) qu'un des payloads les plus commun c'est un mineur de crypto currency, marrant


Ben ça a plusieurs avantages :
- ça peut rester relativement discret
- ça donne un revenu régulier
- les risques d'emmerdes sont bien plus faibles qu'avec le vol de données (surtout si ça touche des domaines sensibles)

----------


## Teocali

Et même sans accès root, tu as un accès a l'exterieur bien dissimulé, qui te permet de facilement transporter des payload, qui elle éventuellement, te permettront peut-être de faire une escalade de privilèges. C'est clairement pas bénin, comme attaque. Certes, si tu as un design de reseau correct et une bonne politique de mise a jour de tes dépendances, tu peux limiter les impacts. Mais tout le monde n'a pas forcement ces deux choses. Et la facilité d'exploitation de la faille est un vrai souci, parce qu'elle permet de facilement et rapidement reperer les systèmes sensibles.

----------


## GrandFather

Et si l'escalade de privilèges n'est pas possible, il est très simple de déclencher un DDoS, et en contournant tout ce qui aurait pu être mis en place contre ce genre d'attaque sur le serveur.

----------


## Nilsou

Ok, merci pour vos éclaircissements. 

Du coup on a des exemples de truc un peu critique qui sont tombés à cause de cette faille actuellement ?

----------


## Lazyjoe

Ca parle beaucoup trop de weberies sur ce topic.  :tired:

----------


## fougny

Ca parle surtout beaucoup trop de template. 
Alors que tout le monde sait que 95% des projets C++ de l'industrie ce sont des projets en C avec des bouts de classes et des string  ::ninja::

----------


## Cwningen

Les strings sont des templates (basic_string<char>). Mais, en effet, on passe normalement plus de temps à utiliser des templates, qu'à en écrire.

----------


## rOut

> Les strings sont des templates (basic_string<char>). Mais, en effet, on passe normalement plus de temps à débugguer des templates, qu'à en écrire.


ftfy

----------


## gros_bidule

Tiens, pour en revenir à log4shell, Gradle vient de sortir une release pour intégrer la version patchée de log4j.
Je ne sais pas s'il l'utilise pas défaut, mais si oui, y'aurait peut être moyen de s'amuser sur les CI en ligne de GitHub, Azure, Travis etc  ::wub:: 
Pas grand chose non plus, vu que le pipeline est containérisé, mais il y a peut être moyen de voler des secrets, ché pas.

[edit] Bon, en fait sur GitHub les PR sont protégées depuis un moment, faut l'accord du mainteneur pour lancer un pipeline, donc ça va. Mais je me demande ce qu'il en est ailleurs...

----------


## gros_bidule

Rhalala, plein d'équipes à mon boulot ont mis leur projet à jour en urgence suite à l'annonce de log4shell.
Ce qui est un peu dommage, c'est que les gens (bcp non experts Java) ont un peu paniqué en voyant _log4j-api_ et _log4j-to-sfl4j_ dans leurs dépendances. Ils ne savaient pas que ces libs ne sont pas vulnérables. On ne l'est qui si l'on dépend et utilise _log4j-core_  ::ninja:: 
Au moins ils ont réagit vite, et vite déployé, c'est pas comme d'autres boites.

----------


## Orhin

C'est beau :
https://www.reddit.com/r/ProgrammerH...skype_account/

----------


## Dross

::O:   :^_^:

----------


## Nilsou

J'ai du mal à comprendre comment ça pourrait être d'une quelconque difficulté pour une IA ... une simple bruteforce avec vérification de toutes les combinaisons à chaque tour fairait le job très vite ...
Si le but est de limiter les robots je vois pas le principe...  ::unsure::

----------


## Orhin

On est clairement sur un captcha qui sera plus facile à résoudre pour une IA que pour un humain.  ::P: 

La cerise sur le gâteau c'est quand même de devoir résoudre 10 putain de fois leur puzzle.

----------


## Helix

Évidemment que tu peux mettre place un classifieur automatique capable de résoudre ce problème spéficique. Comme pour à peut près tout les tests de ce genre.
C'est juste que le temps de mettre au point ton robot et de le faire tourner, Skype aura mis en place un autre problème à résoudre.

----------


## acdctabs

Moi genre à la 8ème je mettrais "down" au lieu de "up" et tu devras recommencer mais avec 15 trucs.
Puis à la 11ème je mettrais left ...

----------


## Nilsou

> Évidemment que tu peux mettre place un classifieur automatique capable de résoudre ce problème spéficique. Comme pour à peut près tout les tests de ce genre.
> C'est juste que le temps de mettre au point ton robot et de le faire tourner, Skype aura mis en place un autre problème à résoudre.


Nan mais t'a même pas besoin. En 5 minute tu fais un algo même pas réseau de neurone qui reconnais leurs flèches dans toutes les orientations possibles par simple convolution. Tu test tout les pixels avec toutes les orientations de ton filtres, t'obtient les position des flèches avec leur direction et tu cherches les deux avec la même direction, tu tourne jusqu’à ce que ce soit en haut.

Ça prend 10 minute, niveau licence, même pas besoin de classifier quoi que ce soit sérieusement. J'ai jamais vu un Capacha aussi ridicule  ::P:  Un simple capcha « recopiez le texte à l'écran » avec un texte tout tordu est infiniment plus sécurisé, c'est dire ...

Nan franchement je vois pas à quoi ils ont pensé en faisant ça  :^_^:

----------


## Helix

Ce n'est pas ce que je te dis. Même sans réseau de neurone, avec une analyse d'image idoine, tu ponds un algo qui traite le problème assez rapidement.
Je te dis que ces trucs sont toujours facile à résoudre avec un algo spécifique. Ce que cherche Skype n'est pas ça. Skype cherche juste à coincer un robot "classique" par la nouveauté du test. Si les robots se mettent à intégrer ce problème, Skype en posera un nouveau.
En gros ça prends encore moins de temps pour Skype de poser le problème, que le temps pour le robot d'apparaitre sur le marché.

----------


## Nilsou

Certes, je comprends sur le fond, mais en l'occurence j'ai du mal à voir comment ça peut être une stratégie rentable quand l'algo idoine en question s'écrit en 15 minutes ^^

----------


## Helix

Il y a une certaine inertie chez les concepteurs de robots qui est exploitée, c'est tout.
C'est comme ça sur tous les problème de détection de contrefaction.

----------


## gros_bidule

Je ne me rends absolument pas compte, n'ayant jamais croisé sur Skype de blonde à forte poitrine désireuse de mieux me connaître, mais y'en a tant que ça des bots Skype pour avoir besoin d'un captmiaou ?

----------


## Helix

Je n'en ai aucune idée.

----------


## Shosuro Phil

> Ça prend 10 minute, niveau licence, même pas besoin de classifier quoi que ce soit sérieusement.


Ça fait combien de temps que tu n'as pas croisé un étudiant de licence?

Des dont je pense qu'ils y arriveraient, j'en connais un, peut-être deux. Ah non mince, ils sont passés en master depuis. Bon ben il va falloir attendre une nouvelle promo atypique...

----------


## Nilsou

> Ça fait combien de temps que tu n'as pas croisé un étudiant de licence?


Bon c'est vrai que j'enseigne souvent surtout en M1/M2.  ::P:  
Mais quand même, faire une convolution sur une flèche sans différence de taille et uniquement d'orientation, c'est le niveau 0.

Disons master donc si ça te fais plaisir mais ça reste une protection toute pourrie  :^_^:

----------


## Kamikaze

Le JWST tourne en C++  ::o:  !?

@31:40

----------


## BentheXIII

> Le JWST tourne en C++  !?
> 
> @31:40
> 
> http://youtu.be/hET2MS1tIjA?t=1900


anéfé : https://www.stsci.edu/~idash/pub/das...0607rcsgso.pdf

----------


## William Vaurien

> he JWST science operations will be driven by ASCII
> (instead of binary command blocks) on-board scripts,
> written in a customized version of *JavaScript*

----------


## Helix

Oui, j'ai également haussé les sourcils d'étonnement lorsque j'ai lu la ref à javascript.

----------


## Shurin

C'est un exploit encore plus grand du coup  ::ninja::

----------


## Nilsou

C'est surtout affreusement sale  :^_^:

----------


## gros_bidule

Ben pourquoi ? Une version customisée de JS, et puis ça dépend de quelle version. ES6 c'est pas si mal par exemple.
Et ça reste mieux que du php

----------


## Kamikaze

Nan mais c'est sûrement un langage maison pour envoyer des commandes c'est tout. C'est hyper banal.

Ils précisent que c'est ascii parce que j'imagine que pour Voyager et autre ils se permettaient pas de faire un truc inefficace, là c'est la simplicité

Ca serait comme dire que "grep" c'est du C mais qu'appeler grep en ligne de commande c'est nul

----------


## Awake

Et faut pas oublier que v8 est développé par google et est très solide. Javascript n'est plus le petit language de codeur du dimanche de l'epoque Internet Explorer.

----------


## William Vaurien

C'est quand même assez marquant qu'ils aient retenu js pour faire leur langage de commande. 
Ils auraient pû choisir n'importe quel autre langage/interpréteur, mais c'est js qui a été retenu.

----------


## Foksadure

Pour un projet démarré en 1996 (javascript avait 1 an), un design qui a été arrêté en 2010, et un assemblage finalisé en 2016, les choix techniques - quels qu'ils soient - ont sûrement été mûris et testés depuis longtemps.

https://en.wikipedia.org/wiki/James_...pe#Development

Je n'ai pas vu de logo "Optimisé pour IE6" dessus.

----------


## Nilsou

> Pour un projet démarré en 1996 (javascript avait 1 an), un design qui a été arrêté en 2010, et un assemblage finalisé en 2016, les choix techniques - quels qu'ils soient - ont sûrement été mûris et testés depuis longtemps.


Mouerf, en science, de ce que j'ai vu, les choix technique c'est souvent l'inertie : quelqu'un prends une décision à un instant t, tout le monde itère dessus pendant 30 ans sans tout refaire parce que c'est un château de carte fragile et que ce serait trop galère.
Beaucoup de librairies mathématiques utilisées en science sont encore en Fortran, et ce n'est pas (que) parce que le Fortran est adapté pour faire ça, c'est juste que c'est des trucs qui itèrent depuis l'époque des cartes perforées et qu'absolument personne n'a envie de réécrire. 
Idem pour le C89, quasi en situation de monopole dans bien des logiciels développés et utilisés en labo.

----------


## Cwningen

> Idem pour le C89, quasi en situation de monopole dans bien des logiciels développés et utilisés en labo.


C'est bien le C89, au moins tu ne te retrouves pas avec des VLA.

----------


## William Vaurien

Je suis pas certains qu'ils avaient prévu de mettre du js dedans en 96 ni même en 2010...

----------


## Foksadure

https://www.stsci.edu/~idash/pub/das...gso.pdf#page=5




> The JWST science operations will be driven by ASCII (instead of binary command blocks) on-board scripts, written in a customized version of JavaScript... called Nombas ScriptEase 5.00e.


http://brent-noorda.com/nombas/us/index.htm
https://news.ycombinator.com/item?id=29489600

2004 apparemment.

Edit : c'est la date des dernières specs du langage.

----------


## Awake

Pour le coup ça m'étonne comme choix de techno en 2004. Le site décalque la retine au passage.

----------


## Lazyjoe

> Beaucoup de librairies mathématiques utilisées en science sont encore en Fortran, et ce n'est pas (que) parce que le Fortran est adapté pour faire ça, c'est juste que c'est des trucs qui itèrent depuis l'époque des cartes perforées et qu'absolument personne n'a envie de réécrire.


L'inertie c'est quelquechose en effet, après le Fortran occupe quand même une niche assez unique : langage facile d'accès pour le calcul scientifique + compilateurs qui optimisent très bien. 

L'évolution c'est surtout vers le python encore plus facile d'accès pour des calculs à petite échelle ou dont la perf peut être mise dans les mains d'une lib extérieure. 
Pour le gros HPC, ça pousse un peu vers le C++, pas tellement pour la perf native mais pour l'adaptabilité quand on passe sur des archis matérielles fondamentalement différentes mais ça reste assez rare comme initiative sur les codes avec beaucoup d'utilisateurs.

----------


## William Vaurien

> https://www.stsci.edu/~idash/pub/das...gso.pdf#page=5
> 
> 
> 
> http://brent-noorda.com/nombas/us/index.htm
> https://news.ycombinator.com/item?id=29489600
> 
> 2004 apparemment.
> 
> Edit : c'est la date des dernières specs du langage.


Certains commentaires sur ycombinator expriment bien le fond de ma pensée: 




> I'd like to understand how such a pinnacle of human design and engineering came to depend on a technology that is, putting it politely, certainly not.


 ::XD:: 

Oui c'est pour moi un choix étrange de partir sur du js en 2004, surtout en partant avec un produit d'une petite boîte qui fait des sites web extra-moches, saveur home-page 96.

----------


## Cwningen

Vous auriez utilisé quoi comme langage de script ? Et qu'est-ce qu'il ferait mieux que le javascript ?

----------


## William Vaurien

En lisant l'histoire de nombas (http://brent-noorda.com/nombas/histo...yOfNombas.html) l'histoire devient beaucoup plus clair. 
En résumé, parce que c'est un peu long à lire, Nombas (pour No MBA avec comme premier slogan "not ties no lies"  ::):  ) est la boîte d'un mec (Brent Noorda) assez visionnaire mais qui n'a jamais vraiment réussis à imposer son produit: un langage embarqué appellé Cmm (C--) : langage de script basé sur C débarassé des trucs complexes (pointeurs et mémoire) et livré avec un SDK (sorte de Java avant l'heure) conçu au début des années 90. 
Mais l'idée n'a pas marché assez pour s'imposer malgré des avantages reconnus par ses utilisateurs. Quand netscape est arrivé avec son navigateur il a commencé à le bricoler pour y embarquer son langage de script. Il a fait une démo à Netscape qui n'a pas acheté de license, mais quelques mois plus tards Netscape sort Javascript. 
A partir de là les mentalités ont changées: les dev ont commencésà accepter de faire du script et d'avoir du "write once run anywhere" (combo java et javascript de 95 à 2000) et il a décidé de laisser tomber son Cmm pour basculer sur le nouveau standard: javascript. 
(version très courte de son histoire)


Les possibilités offertes par le SDK de Nombas ont l'air assez puissantes, et parfois en avance sur leur temps (sûrement ce qui a intéressé l'équipe du James Webb Space Telescope).

Par contre en cherchant sur Google il n'y a pas beaucoup de traces de Nombas ou du Cmm...

----------


## Cwningen

Sur Hacker News, j'ai vu plus de détails sur les langages considérés.




> The language selection was JS, Python 1.5 (1.5, not 2, not 3, 1.5, released in 1999) and a custom script language.
> 
> NASA decided for JS because Python used more memory.





> 2. An attempt was made to port each scripting engine to the VxWorks real-time operating system on a flight-like Power PC by embedding it into a payload flight software application. TCL was dropped from the study when it could not be successfully ported to VxWorks. JavaScript, Python and G-script were successfully ported and a series of tests with prototype flight software applications were run in order to rank them against the success criteria.
> 
> https://www.scribd.com/document/4073...rd-JavaScripts


Malheureusement, l'article source n'est pas lisible.

----------


## William Vaurien

J'aurais pensé à LUA qui existe depuis longtemps et est plutôt bien taillé pour faire de l'embarqué aussi... C'est étrange qu"il n'ai pas été dans la short-list pour la sélection.

----------


## Foksadure

> En lisant l'histoire de nombas (http://brent-noorda.com/nombas/histo...yOfNombas.html) l'histoire devient beaucoup plus clair.


Il y avait longtemps que je n'avais pas lu un blog de real programmer enginurse.  ::love:: 

Lequel en l'occurrence n'est pas non plus n'importe qui :

http://www.edm2.com/index.php/ScriptEase




> Brent Noorda (son of Ray Noorda, Novell CEO)


https://onedrive.live.com/?authkey=%...143369&o=OneUp




> NASA (consulting)-Nov 2010-presentConsult, test, and developflight software for upcoming James Webb Space TelescopeAchievement award recipient
> 
> [...]
> 
> Shiva, Addax, Lotus, Verbex Voice, Tops/Sun, Cetus, Novell & NASA • 1981 -1992Wrote many programs using many languages: (Assembly (6502, 808x, 360, 390), Basic, Fortran, Pascal, C, C++ and more) on many platforms (DOS, UNIX, VMS, RSX, PDP, OS/2)Implemented full fast/small network stack from interrupts to tcp/udp/ip to ftp/telnet/vt100Created rapid-prototyping DOS GUI environment to immensely reduce development costs· developed trained speech-recognition products using dsp, fft, research, and cheap parts


Encore la confirmation s'il en était besoin qu'il ne suffit pas d'avoir le bon environnement, les bonnes idées, et les meilleurs produits. Il faut aussi savoir les vendre au bon moment. :v2000: :betamax:

----------


## William Vaurien

Je voudrais bien voir l'univers parallèle dans lequel Netscape a acheté son produit plutôt que de dev à l'arrache javascript... Ce doit être une terre parfaite sans GWT ni transpilation ni cravatte (et peut être même sans Python ni Java) !

----------


## Teocali

> Il y avait longtemps que je n'avais pas lu un blog de real programmer enginurse. 
> 
> Lequel en l'occurrence n'est pas non plus n'importe qui :
> 
> http://www.edm2.com/index.php/ScriptEase
> 
> 
> 
> https://onedrive.live.com/?authkey=%...143369&o=OneUp
> ...


Je suis en train de lire le truc, et c’est assez kiffant. Les parallèles avec Java sont assez impressionnant.

----------


## Nilsou

> L'inertie c'est quelquechose en effet, après le Fortran occupe quand même une niche assez unique : langage facile d'accès pour le calcul scientifique + compilateurs qui optimisent très bien.


J'aurais pas dit que le Fortran était « facile d’accès » mais bon  ::P: 



> L'évolution c'est surtout vers le python encore plus facile d'accès pour des calculs à petite échelle ou dont la perf peut être mise dans les mains d'une lib extérieure.


Une évolution de chie, au passage, qui paralyse la science dans mon domaine.  :Gerbe:

----------


## William Vaurien

Il avait un bonne tête sympa à l'époque de son combat contre Java... Le combat contre les gars encravatés est malheureusement souvent voué à l'échec...

----------


## Foksadure

Il n'a toujours pas de MBA ni de cravate, même pour son mariage.

Rien ne dit qu'il n'ait pas son abri anti-atomique en Nouvelle-Zélande, mais consultant chez papa Novell et la NASA depuis 1981, avec son code parti dans l'espace sur un projet emblématique à 10 miyards développé pendant 30 ans ET infirmier diplômé, volontaire dans des centres de vaccination COVID, niveau coolitude ça se pose là.




> Nurse / Software Engineer


:the Dude:

----------


## deathdigger

Une petite vidéo /promo sur les api d’IA de Microsoft et openAI :


Y’a un truc génial mais aussi pourri dans lis IA, c’est leurs non-prédictibilités.

----------


## Nilsou

> Y’a un truc génial mais aussi pourri dans lis IA, c’est leurs non-prédictibilités.


Ça dépends de ce qu'on appelle « IA ». Une IA comportementale simple (rare en dehors du domaine des JV et des labos) c'est effectivement non prédictible mais ça converge vite vers un comportement moyen parfaitement connu. Statistiquement c'est au contraire très facilement prédictible. 
Une IA comportementale plus complexe c'est une autre paire de manche, mais ça ne sort presque jamais des labos (jamais vu appliqué dans d'autres domaine réellement).

Enfin une IA de type entrée/sortie, un simple réseau de neurone type deep learning (la très large majorité des applis dites « d'IA », c'est bien prédictible (même si on ne sait pas comment ça converge exactement dans le détail des poids, on sait parfaitement vers quel résultat ça va, à quel vitesse approximative etc.) .

----------


## Helix

> Enfin une IA de type entrée/sortie, un simple réseau de neurone type deep learning (la très large majorité des applis dites « d'IA », c'est bien prédictible (même si on ne sait pas comment ça converge exactement dans le détail des poids, on sait parfaitement vers quel résultat ça va, à quel vitesse approximative etc.) .


Pas vraiment d'accord. Tu ne peux pas garantir un taux de fausses alarmes avec un classifieur à apprentissage qu'il soit (deep learning, svm ou autre chose). Sauf à maitriser complètement les entrées, ce qui est plutôt rare en application réelle. Les perfs sont donc non prédictibles.
Les seuls classifieurs que je connaisse qui reste avec des taux prédictibles sont les classifieurs à test d'hypothèse. Mais c'est vraiment particulier à mettre en œuvre (il faut être capable de prouver le comportement stat des données), c'est donc peu répandu.

----------


## Nilsou

> Pas vraiment d'accord. Tu ne peux pas garantir un taux de fausses alarmes avec un classifieur à apprentissage qu'il soit (deep learning, svm ou autre chose). Sauf à maitriser complètement les entrées, ce qui est plutôt rare en application réelle. Les perfs sont donc non prédictibles.


En général tu a une petite idée des entrée quand même, et tu fais des tests en pratique dans le milieu d'application pour sortir une stats au bout de X jours que ça te donne tant de % de faux positif, faux négatif et tuti quanti. C'est très largement suffisant comme stats dans la majeure partie des cas.

Pour les applis industrielles ont met en règle générale un système de contrôle non IA qui va venir prendre la main en cas de dépassement de certaine bornes, ça suffit à garantir la sécurité du matériel. 

Par contre, effectivement, les gens qui donnent la main à des IA sans trop de sécurité sur des applications dangereuses, ils ont quand même bien la confiance ^^.

----------


## deathdigger

Je pensais à des usages chez mes clients. Typiquement, dans le retail, on pourrait imaginer que ça permette de sortir les best-sellers dans un futur proche. Sauf que l'IA évoluant en même tant que tu l'interroges (de ce que j'en ai compris), c'est compliqué de comparer des résultats sur plusieurs périodes : en gros, est-ce que mon produit a plus performé grâce à la conjoncture ou autres, ou parce que mon IA a mieux performé.

Edit la démo :



Je pense que les profs vont avoir du souci à se faire pour trouver les fraudes  ::P:

----------


## Helix

> En général tu a une petite idée des entrée quand même, et tu fais des tests en pratique dans le milieu d'application pour sortir une stats au bout de X jours que ça te donne tant de % de faux positif, faux négatif et tuti quanti. C'est très largement suffisant comme stats dans la majeure partie des cas.


On est d'accord, mais ce n'est pas ce que j'appelle "garantir" des perfs ou un comportement, c'est plutôt promettre que dans un usage normal, on peut espérer telle ou telle performance.

----------


## Nilsou

Si tu veux, on ne peut certes rien « garantir », mais je n'irais pas non plus parler de « non-prédictibilités.» comme le faisait le canard plus haut. En réalité on sait très bien prédire le comportement global, dans la plupart des cas, de tel ou tel IA, surtout sur avec les outils d'IA les plus communs.  
On peut même dire qu'a entrée connue on peut parfaitement prédire la sortie. 

Dès qu'on parle de « non prédictibilité » ça donne l'impression que le machin est assez bordélique et aléatoire, alors qu'en fait non, c'est plutôt quand *les entrées* deviennent bordélique et aléatoire qu'on ne peut plus rien garantir, mais est-ce la faute de l'IA ou de l'application dans laquelle on la met  ::P:  ?

----------


## Helix

Ça me semble plus stimulant de dire que c'est la faute des algos.

----------


## Nilsou

Plus « stimulants » ?  ::unsure::

----------


## Helix

Oui, ça motive beaucoup plus à chercher des trucs qui marche mieux lorsque tu as en tête que les défauts sont liés à l'approche plutôt qu'au manque de propreté des données, ou que l'application est mal fichue.

----------


## raaaahman

Hello, pour les questions sur du scripting en bash, je suis au bon endroit?

J'essaie de générer des fichiers pdf depuis des fichiers markdown en passant par pandoc. Je sais taper les commandes séparément:

find . -maxdepth 1 -name "*.md" -type f

et

pandoc -t latex -s mon_fichier.md -o mon_fichier.pdf

Mais je suis un noob en bash, pour passer les noms de fichier trouvés par la commande find en arguments des options -s et -o de ma commande pandoc, c'est quoi la fonctionnalité que je dois utiliser? Des redirections? Des pipes? Autre chose?  ::unsure::

----------


## Cwningen

Le mieux avec c'est "find [options de recherche] -exec macommand '{}' ';'" mais pas de substitution pour le fichier de sortie. Sinon si tu n'as pas de retour à la ligne dans les noms de fichiers "find [options de recherche] -print | while read file; do macommand "$file" "${file%.md}.pdf"; done". Mais comme tu n'as pas besoin de find dans ton cas précis: "for file in *.md; do macommand "$file" "${file%.md}.pdf"; done" peut suffir.

----------


## raaaahman

> Mais comme tu n'as pas besoin de find dans ton cas précis: "for file in *.md; do macommand "$file" "${file%.md}.pdf"; done" peut suffir.


Ah, en effet!  :Perfect:  Merci beaucoup!

EDIT: 




> Je pense que les profs vont avoir du souci à se faire pour trouver les fraudes


Si d'un autre côté il n'y a plus besoin de créer des supports de cours, c'est un mal pour un bien.  ::P: 

Blague à part, si les étudiants sont capables d'écrire la logique dans un commentaire, d'utiliser des noms de classes/fonctions conventionnels ou de décomposer en unités avec les bonnes entrées/sorties, est-ce que ce n'est pas la=à le plus important à apprendre? En gros est-ce que l'IA va nous faire plus pratiquer les fondamentaux / abstractions en nous délestant de la syntaxe?

REEDIT: J'aurais du essayer avec ma commande bash, tiens.  ::P:

----------


## deathdigger

Pas tant pour les devs que pour la rédaction (quand elle montre le texte sur le cloud).

----------


## raaaahman

Tu as réussi à lire quelque chose sur la rediffusion ou tu étais dans la salle?  :tired:

----------


## deathdigger

Sur la vidéo, à la fin, pourquoi ?

----------


## raaaahman

Bon il faudra que je la re-mate (la vidéo, hein), j'ai pas bien vu ce que CoPilot produisait.

----------


## Nilsou

Dites, je rencontre un petit soucis en C standard sur le système d'IO. Je ne m’étais jamais trop frotté aux subtilités du bouzin sérieusement pour faire des choses portables. Mais là j'en ai eu besoin lors de la conception d'un TP.

En gros, il fut un temps, pour virer ce qu'il y avait dans stdin (si l'utilisateur tape n’importe quoi après une input par exemple) on avait tendance à utiliser fflush(stdin). Mais en réalité le machin n'est pas vraiment censé marcher et, de fait, il ne marche pas sur certaines config. 

Alors en alternative il est souvent proposé d'employer de façon portable une boucle avec un getchar() jusqu’à la fin de l'entrée marquée par \n ou EOF. Néanmoins cette solution a un gros défaut : si l'input est vide à ce moment là alors point de salut et on restera bloqué sur le getchar...

J'ai un peu fouillé pour voir comment passer stdin temporairement en mode non bloquant ou comment contourner le problème et je ne trouve pas de véritable solution portable... 

Si quelqu'un en connait une ...  ::unsure:: 

(edit : je me demande si le plus simple n'est pas de combiner avec un ungetc comme ça : 

int c;
ungetc(32,stdin);
while ((c = getchar()) != '\n' && c != EOF) { }

ça semble correct ?  ::unsure::  (comme je n'ai trouvé cette solution proposée nul part, j'ai un doute ^^)
)

----------


## Cwningen

Je les connais mal ces fonctions. fseek, ça marche avec un pipe/terminal ?

Ah non, tu veux juste passer la ligne courante, pas tout jeter, j'ai lu trop vite.

----------


## Cwningen

Tu lis comment le début de ligne ? Il n'y a pas moyen de tester si tu as tout lu (getc va bloquer) ou non ?

Par exemple :


```
		if (!fgets(line, ARRAY_SIZE(line), stdin)) {
			fprintf(stderr, "fgets failed\n");
			return EXIT_FAILURE;
		}
		int len = strlen(line);
		if (len > 0 && line[len-1] != '\n' && !feof(stdin)) {
			int c;
			do c = fgetc(stdin);
			while (c != '\n' && c != EOF);
		}
```

Ça fait longtemps que je les ai pas utilisées, mais à relire les pages de man, je trouve les fonctions de stdio vraiment pas pratiques (et encore, on a supprimé les horreurs comme gets).

----------


## rOut

```
fcntl(0, F_SETFL, fcntl(0, F_GETFL) | O_NONBLOCK);
```

C'est tricher?

- - - Mise à jour - - -

Sinon de manière portable tu peux toujours créer un thread qui lit avec getc et que tu synchronises comme tu as envie avec le main.

----------


## Nilsou

> Tu lis comment le début de ligne ? Il n'y a pas moyen de tester si tu as tout lu (getc va bloquer) ou non ?


Bah difficilement je dirais ... 
Perso j'utilisais un fgets suivi d'un scanf avec détection d'erreur, mais va savoir pourquoi parfois ça laisse un machin derrière selon ce que l'utilisateur tape (un \n en plus j'imagine, qui n'est pas récup par le fgets) ... 
Note que ça marche parfaitement sur certaine config et pas parfaitement sur d'autre, mystère.




> ```
> fcntl(0, F_SETFL, fcntl(0, F_GETFL) | O_NONBLOCK);
> ```
> 
> C'est tricher?


C'est pas triché mais c'est pas portable du tout de mémoire non ?
Et c' est bien le problème...

Je croyais que j'arriverais à quelque chose avec le ungetc(32,stdin); puisque c'est portable et que ça m'assure qu'il y a quelque chose dans la chaine, mais le soucis c'est que si c'est déjà un \n dans la chaine et que je mets un \n en plus, par exemple. Je prends le risque de pas lire jusqu'au bout avec : 

while ((c = getchar()) != '\n' && c != EOF) { }


Par contre je me demande si je ne pourrais pas écrire tout simplement : 

while ((c = getchar()) != EOF) { }


Pourquoi les solutions proposées incluent toutes le \n ici ? Il y a un cas ou on rencontrerais la fin de stdin et que ce soit un \n sans EOF tout à la fin ?  ::unsure:: 

Parce que sinon la solution simple c'est de faire un :
ungetc([bidule],stdin);
while ((c = getchar()) != EOF) { }

----------


## Cwningen

> Pourquoi les solutions proposées incluent toutes le \n ici ? Il y a un cas ou on rencontrerais la fin de stdin et que ce soit un \n sans EOF tout à la fin ?


Parce que tu voulais tout lire (et ignorer) jusqu'à la fin de la ligne, non ? Si tu lis jusqu'à un EOF, tu risques de bloquer entre temps. Et après il n'y aura plus jamais rien à lire dans stdin, donc autant ne rien lire du tout.

----------


## Nilsou

Qu'entends tu par « tu risques de bloquer entre temps. » en l’occurrence ?
Mais ok, je vois que EOF n'est pas la solution en fouillant de ci de là.

Pas si simple de simplement vider stdin  ::wacko::

----------


## Cwningen

EOF ne sera retourné que quand le pipe sera fermé. Si l'utilisateur arrête d'écrire sans fermer le pipe, les fonctions de lecture (getchar, fgets, scanf, ...) bloqueront. C'est ce que tu disais vouloir éviter dans ton premier post.

Le problème c'est qu'est-ce que ça veut dire "vider stdin" ? Si c'est vider le buffer interne à la libc, fflush le fait, mais comme tu sais pas comment est gérer le buffer, tu ne connais pas l'effet de fflush (qui n'est bien défini que pour les sorties). Si c'est lire tout ce qu'il y a à lire dans le pipe, alors il faudra attendre (donc éventuellement bloquer) que l'autre bout du pipe soit fermé. Même avec des "read" POSIX non-bloquant tu ne peux pas avoir la garantie qu'un pipe soit vide (mais non-fermé), read peut retourner avec EAGAIN mais quelque chose a déjà été écrit le temps que tu lises la valeur de retour.

Je comprenais l'idée d'ignorer la fin de la ligne, mais là, je ne sais plus trop ce que tu veux faire.

----------


## Nilsou

> EOF ne sera retourné que quand le pipe sera fermé. Si l'utilisateur arrête d'écrire sans fermer le pipe, les fonctions de lecture (getchar, fgets, scanf, ...) bloqueront. C'est ce que tu disais vouloir éviter dans ton premier post.


Yep, oublions cette solution.




> Le problème c'est qu'est-ce que ça veut dire "vider stdin" ? Si c'est vider le buffer interne à la libc, fflush le fait, mais comme tu sais pas comment est gérer le buffer, tu ne connais pas l'effet de fflush (qui n'est bien défini que pour les sorties).


C'est bien le problème, ça marche sur quelques config mais pas sur toutes. 




> Si c'est lire tout ce qu'il y a à lire dans le pipe, alors il faudra attendre (donc éventuellement bloquer) que l'autre bout du pipe soit fermé. Même avec des "read" POSIX non-bloquant tu ne peux pas avoir la garantie qu'un pipe soit vide (mais non-fermé), read peut retourner avec EAGAIN mais quelque chose a déjà été écrit le temps que tu lises la valeur de retour.


Bah non, dans mon cas le problème c'est que l'utilisateur a mis quelque chose dans le pipe avant, mais à l'instant t ou je vérifie le pipe j'ai la garantie que personne ne touche au pipe. J'ai juste un pipe dans un état inconnu, mais  j'ai la garantie qu'il ne bouge pas, et je veut le vider de son contenu pour pouvoir mettre quelque chose dedans de façon propre sans trainer des caractères parasites.

Ça me parait clair  ::unsure:: 

La solution propre est éventuellement d'utiliser fcntl mais ce n'est pas portable il me semble (équivalent sous windows ? )

----------


## Cwningen

Pour moi, ce n'est pas clair. J'ai l'impression que tu cherches quelque chose de trop compliqué dont tu n'as pas vraiment besoin. En tout cas, ce cas d'utilisation n'est pas prévu par la bibliothèque standard.

fcntl c'est posix, et posix et win32 n'ont pas grand chose en commun. Il te reste la suggestion de rout avec un thread, son buffer et la synchronisation que tu gères comme tu veux. Mais il n'y a pas de threads dans la bibliothèque standard non plus (ou ça a été ajouté récemment ? je ne suis plus trop à jour sur le C), donc il te faudra une bibliothèque en plus.

----------


## Garrluk

Je m'en rappelle très mal parce que ça fait longtemps que je n'ai pas utilisé de pipe, mais il me semble que c'est très fortement recommandé de n'utiliser les pipes qu'avec 1 seul producteur (et 1 seul consommateur aussi je crois).



> Bah non, dans mon cas le problème c'est que l'utilisateur a mis quelque chose dans le pipe avant, mais à l'instant t ou je vérifie le pipe j'ai la garantie que personne ne touche au pipe. J'ai juste un pipe dans un état inconnu, mais j'ai la garantie qu'il ne bouge pas, et je veut le vider de son contenu pour pouvoir mettre quelque chose dedans de façon propre sans trainer des caractères parasites.


Du coup pour moi la solution à ce problème, c'est d'avoir 1 pipe utilisé par l'utilisateur pour pousser des donnés dans ton programme, et qu'il fermera quand il aura fini de s'en servir, et 1 pipe de toi vers l'utilisateur dans lequel tu pousses les donnés que tu veux lui envoyer ?

----------


## Verygromf

Hello,

Je sais pas si c'est le bon topic... j'essaye de bricoler un script en NodeJS, et je me retrouve coincé :

Je crée une connexion ssh avec une private key et je passe une commande, laquelle nécessite un mot de passe pour s'exécuter -- c'est pas du sudo donc pas d'option de modifier sudoers.

Suite à ma commande, je reçois bien le stdout qui me demande d'écrire le mot de passe, mais là je ne trouve pas comment transmettre ce que le serveur demande et obtenir le résultat.

(note, j'avais réussi mais en mettant le mot de passe en dur dans le script, ce qui n'est pas une option pour la prod)


Donc en gros j'ai ceci :

var conn = new Client();
conn.on('ready', function() {
    conn.exec('MA COMMANDE QUI DEMANDE UN MOT DE PASSE', function(err, stream) {
        if (err) throw err;
        stream.on('close', function(code, signal) {
            console.log('Stream :: close :: code: ' + code + ', signal: ' + signal);
            conn.end();
        }).on('data', function(data) {
            console.log('STDOUT' + data);    ça m'affiche bien ---> "Enter password:"

           Et là rien de ce que j'essaie ne fonctionne... (prompt, prompt-sync, inquirer...)


Si quelqu'un a une solution, je lui en serais éternellement reconnaissant. (je débute totalement en node)

----------


## Getz

Ton Client, j'imagine qu'il vient du module ssh2 ? (https://www.npmjs.com/package/ssh2)
Je ne l'ai jamais utilisé, mais vu que tu reçois un stream dans ton callback, s'il s'agit d'un duplex stream (sur lequel tu peux lire et écrire), tu devrais pouvoir faire un stream.write() ?

----------


## Verygromf

exact, ssh2.

oui c'est ce que j'essaye de faire, mais je ne parviens pas à obtenir un prompt. La doc de ssh2 n'est pas claire là dessus.

----------


## Foksadure

Pour info, il y a un fil spécifique pour le dev web (et les outils qui en dérivent) :
https://forum.canardpc.com/threads/7...nt-des-cookies

----------


## Sangoon

> exact, ssh2.
> 
> oui c'est ce que j'essaye de faire, mais je ne parviens pas à obtenir un prompt. La doc de ssh2 n'est pas claire là dessus.


Comme le disait Gets dans ton .on('data', () => stream.write(`${password}\n`)) devrait suffir non ?

----------


## Verygromf

> Comme le disait Gets dans ton .on('data', () => stream.write(`${password}\n`)) devrait suffir non ?


Exact, j'ai fini par trouver une solution, avec readline avant le write.
Seul défaut, le mot de passe apparait en clair lorsqu'on le tape, mais bon.

- - - Mise à jour - - -




> Pour info, il y a un fil spécifique pour le dev web (et les outils qui en dérivent) :
> https://forum.canardpc.com/threads/7...nt-des-cookies


Oui, de toute façon j'ai une autre problématique maintenant, je vais poser la question là  ::):

----------


## Getz

> Exact, j'ai fini par trouver une solution, avec readline avant le write.
> Seul défaut, le mot de passe apparait en clair lorsqu'on le tape, mais bon.
> 
> - - - Mise à jour - - -
> 
> 
> 
> Oui, de toute façon j'ai une autre problématique maintenant, je vais poser la question là


Ha ok j'avais pas compris que tu voulais un prompt pour que tu puisses saisir le mot de passe manuellement.
Tu ne peux pas masquer le mot de passe de base avec readline, mais tu peux contourner le problème: https://stackoverflow.com/questions/...nodejs-console

----------


## Thamior

Hello les canards. Je joue un peu avec les features de C++20, notamment les concepts (avec clang11). Je suis tombé sur un comportement un peu bizarre, qui est peut-être dû à l'aspect un peu expérimental de C++20, ou à mon incompréhension (plus probable).

J'ai le code suivant ou j'ai une classe de base qui sérialise/désérialise de façon simple (je prend/mets sizeof(Structure) depuis/dans le stream), sauf si la classe a un membre statique "custom_struct_size", auquel cas je mets/prends le nombre de bytes spécifiés par ce membre statique. Ca donne un truc comme :



```
template <typename T>
concept custom_serdes_size = requires(T e)

  { T::custom_struct_size } -> std::same_as<size_t>;
};

template<typename UnderlyingType>
struct SerDes
{
  void deserialize(std::istream & input)
  {
    if constexpr(custom_serdes_size<UnderlyingType>)
    {
      input.read((char*) this, UnderlyingType::custom_struct_size);
    }
    else
    {
      input.read((char*) this, sizeof(UnderlyingType));
    }
  }

  void serialize(std::ostream & output)
  {
    if constexpr(custom_serdes_size<UnderlyingType>)
    {
      output.write((char*) this, UnderlyingType::custom_struct_size);
    }
    else
    {
      output.write((char*) this, sizeof(UnderlyingType));
    }
  }
};
```

La blague, c'est que quand j'ai un struct A qui hérite de SerDes<A> et qui a un membre "custom_struct_size"



```
struct A : public SerDes<A>
{
  int a;
  int b;
  int c;

  //Pour ne ser/des que a et b 
  static constexpr size_t custom_struct_size = sizeof(a) + sizeof(b);
};
```

eh bien la fonction serialize() de SerDes<A> prends la version du code qui est dans le else, donc ignore le concept. Par contre, si j'écris mon concept comme ceci :



```
template <typename T>
concept custom_serdes_size = requires(T e)
{
  { 0 + T::custom_struct_size } -> std::same_as<size_t>;
};
```

Eh ben là ça fonctionne. Est-ce que j'ai raté un truc sur les concepts et on ne peut pas s'en servir pour tester un membre (enfin sauf à tricher comme je l'ai fait) ?

Edit : j'ai changé mes couleurs  ::):

----------


## Cwningen

Il faudrait vérifier les règles exactes pour la déduction de type, mais peut-être que T::custom_struct_size donne le type "size_t &" (c'est une lvalue), alors que qu'avec le "0 +", tu en fais une prvalue. same_as est donc peut-être trop strict, essaye quelque chose de plus tolérant comme convertible_to.

PS: tes couleurs sont illisibles avec un thème clair.
PPS: Pour la déduction de type c'est équivalent à decltype((expr)), donc c'est bien ça (mais j'avais oublié un const).


```
	static_assert(std::is_same_v<decltype((A::custom_struct_size)), size_t>); // fail
	static_assert(std::is_same_v<decltype((A::custom_struct_size)), size_t &>); // fail
	static_assert(std::is_same_v<decltype((A::custom_struct_size)), const size_t &>); // ok
	static_assert(std::is_convertible_v<decltype((A::custom_struct_size)), size_t>); // ok
```

----------


## Thamior

Bingo ! Ca fonctionne avec convertible_to<size_t>. Par contre ça ne fonctionne pas avec same_as<size_t&> ou same_as<const size_t&>, donc je ne sais pas très bien quel type exact done T::custom_struct_size (en tout cas rien d'intuitif).

----------


## Cwningen

Chez moi (g++ (GCC) 11.2.1 20211203 (Red Hat 11.2.1-7)), tous les exemples suivants fonctionnent avec A.


```
template <typename T>
concept custom_serdes_size = std::same_as<const size_t &, decltype((T::custom_struct_size))>;

template <typename T>
concept custom_serdes_size = std::is_same_v<const size_t &, decltype((T::custom_struct_size))>;

template <typename T>
concept custom_serdes_size = requires (T e)
{
	{ T::custom_struct_size } -> std::same_as<const size_t &>;
};
```

(au passage "(T e)" est inutile, puisque tu n'utilises pas "e")

----------


## Thamior

Hmm, je vais retester demain, car les "vraies" structures que j'utilise ne sont pas plus compliquées que la structure A que j'ai donné en exemple (c'est complètement POD).

En tout cas je n'aurais pas pensé aux deux premières versions qui sont un peu plus compactes, merci !




> (au passage "(T e)" est inutile, puisque tu n'utilises pas "e")


Bien vu, un reste d'un copié collé sans aucun doute  ::): 

EDIT, : Bon, je viens de tester, et pour que ça fonctionne chez moi (Ubuntu clang version 11.0.0-2~ubuntu20.04.1), il faut mettre std::same_as<const size_t, decltype((T::custom_struct_size))>; Je pense que je vais me rabattre sur std::is_convertible pour éviter les surprises...

RE-EDIT : Je corrige, ton code fonctionne bien, c'est moi qui ne connaissait pas la différence entre decltype(X) et decltype((X)) et qui avait omis les doubles parenthèses dans mon code. Pas sûr d'avoir bien compris, mais j'y travaille.

----------


## Cwningen

Plus compactes mais pas forcément plus lisibles, surtout ici avec le decltype à doubles parenthèses. C'était surtout parce que c'était plus proche de mes static_assert, et que je n'étais pas sur que c'était parfaitement équivalent.

C'est plus intéressant si ton concept n'est qu'un combinaison de concepts/type_traits (par exemple "concept a_ou_b = a<T> || b<T>")

----------


## Thamior

Le decltype à double parenthèses ne semble pas nécéssaire (si on enlève le "&") :



```
template <typename T>
concept custom_serdes_size = std::same_as<const size_t, decltype(T::custom_struct_size)>;
```

En tout cas ça fait ce que je veux  ::):

----------


## Nilsou

Petite question C++ : 

J'ai rencontré un cas qui fonctionne et qui pour moi ne devrait pas ...




```

template <class T> B;

template <class T> A
{
B<T> truc;
}

template <class T> B
{
int bidule;
T bloup;
}
```

Pour moi le code devrait crasher à B puisqu’à ce moment là la classe est incomplète, pourtant ça semble compiler et fonctionner sans problème ...

J'ai un petit doute sur le fait qu'étant des templates, leur taille n'est pas calculée à ce moment là du programme mais plutôt durant leur usage dans le code. Mais je n'arrive pas à voir comment le compilateur se sort du méli-mélo même ainsi.  ::unsure::

----------


## Cwningen

Je suppose que tu as oublié des class/struct devant A et B.

Le compilateur essaye de ne pas trop se poser de question tant que le type n'est pas instancié. Si tu instancies plus tôt, tu as bien un problème.



```
template <class T> struct B;

template <class T> struct A
{
	B<T> truc;
};

template struct A<int>;

template <class T> struct B
{
	int bidule;
	T bloup;
};
```



```
nilsou.cpp: Dans l'instanciation de « struct A<int> » :
nilsou.cpp:8:17:   requis depuis ici
nilsou.cpp:5:14: erreur: « A<T>::truc » a un type incomplet
    5 |         B<T> truc;
      |              ^~~~
nilsou.cpp:1:27: note: déclaration de « struct B<int> »
    1 | template <class T> struct B;
      |                           ^
```

----------


## Kamikaze

Ouais c'est ce que tu dis Nilsou, ça fonctionne uniquement vu que c'est des templates et que le compilateur va faire la résolution au dernier moment. Donc à ce moment B sera une classe complète.

Donc:



```
template<class T> class B;

template<class T> class A {
    B<T> truc;
};

template<class T> class B {
};
```

est valide

En revanche:



```
class B;

class A {
    B truc; // B is incomplete
};

class B {
};
```

n'est pas valide.

Mais c'est un problème artificiel car il suffit de très simplement:



```
class B;

class B {
};

class A {
    B truc; // B is complete
};
```

Ce que le compilo peut faire avec les templates vu que les templates sont résolus tardivement selon les instances qui les utilisent. Donc il aura la définition de B à ce moment.

- - - Mise à jour - - -

Après sinon, et de manière plus pratique, si tu veux faire des classes interdépendantes, tu peux utiliser les forward declaration comme ça:



```
class A;

class B {
public:
    int known_member;
    void use(A a);
};

class A {
    B truc;
};

void B::use(A a) {

}
```

----------


## Nilsou

Oui ok. Effectivement j'avais oublié les class devant A et B.
Merci pour vos réponses.

Je suis étonné par ton exemple final Kamikaze, c'est vrai que d'habitude je ne me pose pas trop la question (parce que j'ai une façon de faire et au final je converge toujours sur ça, ça marche, et j'ai un peu oublié le détail) mais vu que j'ai du corriger pas mal d'erreurs aujourd'hui je me poses la question du détail   ::P:  
Donc ici, le compilo n'a t-il pas besoin dès le prototype de use du type complet de A ?

----------


## Kamikaze

Yep

----------


## Nilsou

Donc ton exemple ne fonctionne pas si ?  ::P:

----------


## Kamikaze

Si, rho suffit de le copier coller...

- - - Mise à jour - - -

https://godbolt.org/z/fbqzc35jE

Ah my bad j'avais mal lu ton message "n'a t-il pas" j'ai lu "n'a pas"

Donc non, y'a pas besoin, ça marche, click, click mon lien

----------


## Nilsou

Ok je te crois haha, mais pourquoi ça marche ? 

edit : bon je viens de voir que la taille d'une fonction d'une classe en C++ est de 0 : https://nolowiz.com/size-of-cpp-classes/

Donc j'en déduit que le code n'a en effet nul besoin de calculer la taille de A, quelque soit la fonction et cie.

Je m'attendais à ce qu'en interne il y ait au moins un pointeur (mais ça aurait marché quand même puisque pointeur = taille fixe) mais au final même pas ...  ::unsure::  
C'est le compilo qui gère tout en sous main en fait ? Les fonctions membres n'ont pas de véritables existence dans la classe comme on le faisait en trichant en (très vieux) C en rajoutant des pointeurs de fonctions dans une structure.

----------


## Cwningen

Un prototype est une déclaration, ça ne définit rien. Pas besoin que les types de retour ou des paramètres soient complets. Et ça vaut aussi pour les méthodes virtuelles, il n'y a pas besoin de type complet pour définir un pointeur.

----------


## Kamikaze

Voilà, comme une interface, conceptuellement quoi, tu déclares mais y'a pas l'implem, tout est ok

----------


## Nilsou

Ok c'est noté, c'est plus clair, merci.

----------


## Nilsou

J'ai besoin de vos éclaircissements. Je dev en windows avec des lib pour la première fois et j'ai un peu du mal à comprendre l'association .lib avec les .dll . 

De ce que je comprends les .lib sont l'équivalent des .a sous linux tandis que les .dll sont plutôt l'équivalent des lib dynamique façon .so. MAIS les .lib peuvent aussi être associé à des dll  ::unsure::  ? 

Comment ça se passe dans ce dernier cadre ? le compilateur va chercher la dll pour inclure le tout en linkage statique dans l’exécutable ou alors il aura besoin de la dll. Et comment distinguer un .lib d'un autre alors ? Même ligne de commande à la compil et deux comportements différents ?  ::unsure:: 

Je demande ça parce que j'ai un programme compilé avec gcc sous windows et la .lib en brut qui lui est donné pour le linkage. Mais le programme crash sans la DLL dans le repertoire. Donc d'une manière ou d'une autre j'en déduit que le lien s'est fait en dynamique. Mais l'ensemble me parait assez flou.  ::unsure::  (et comment le savoir à la compilation ? )

----------


## Mr Slurp

> J'ai besoin de vos éclaircissements. Je dev en windows avec des lib pour la première fois et j'ai un peu du mal à comprendre l'association .lib avec les .dll . 
> 
> De ce que je comprends les .lib sont l'équivalent des .a sous linux tandis que les .dll sont plutôt l'équivalent des lib dynamique façon .so. MAIS les .lib peuvent aussi être associé à des dll  ? 
> 
> Comment ça se passe dans ce dernier cadre ? le compilateur va chercher la dll pour inclure le tout en linkage statique dans l’exécutable ou alors il aura besoin de la dll. Et comment distinguer un .lib d'un autre alors ? Même ligne de commande à la compil et deux comportements différents ? 
> 
> Je demande ça parce que j'ai un programme compilé avec gcc sous windows et la .lib en brut qui lui est donné pour le linkage. Mais le programme crash sans la DLL dans le repertoire. Donc d'une manière ou d'une autre j'en déduit que le lien s'est fait en dynamique. Mais l'ensemble me parait assez flou.  (et comment le savoir à la compilation ? )


Bienvenu dans "l'enfer" des lib sous windows.

En effet un .lib peut être l'équivalent d'un .a, mais une .dll aura toujours un .lib associé pour permettre le linkage.
Si ton .lib est une lib statique (.a), alors c'est auto suffisant, il contient les exports et le code pré compilé
Si ton .lib est associé à une .dll, imagine le comme un fichier qui contient les symboles qu'exporte publiquement ta .dll. Dans le temps c'était des .def, qui n'étaient plus ou moins que des textes avec la liste des symboles, mais il me semble que c'est encore utilisable de nos jours.

----------


## Patate

Hello !Est-ce que quelqu'un utilise CMake / vcpkg sous Linux ? Je voudrais commencer un petit projet mais j'avoue que je galère à intégrer certaines lib. Je détaillerai si il y a des utilisateurs pour pas poluer.

----------


## Nilsou

> Bienvenu dans "l'enfer" des lib sous windows.
> 
> En effet un .lib peut être l'équivalent d'un .a, mais une .dll aura toujours un .lib associé pour permettre le linkage.
> Si ton .lib est une lib statique (.a), alors c'est auto suffisant, il contient les exports et le code pré compilé
> Si ton .lib est associé à une .dll, imagine le comme un fichier qui contient les symboles qu'exporte publiquement ta .dll. Dans le temps c'était des .def, qui n'étaient plus ou moins que des textes avec la liste des symboles, mais il me semble que c'est encore utilisable de nos jours.


Ok merci pour la clarification.
Mais en pratique, comment savoir si la lib est l'une ou l'autre, sans info donné par le mec qui l'a fait.

Il y a un outil en ligne de commande ?

Et même question à la compilation : pas moyen d'avoir une info venant de gcc par exemple ?

----------


## Mr Slurp

> Hello !Est-ce que quelqu'un utilise CMake / vcpkg sous Linux ? Je voudrais commencer un petit projet mais j'avoue que je galère à intégrer certaines lib. Je détaillerai si il y a des utilisateurs pour pas poluer.


Je connais pas mal CMake mais pas du tout vcpkg.

----------


## Mr Slurp

> Ok merci pour la clarification.
> Mais en pratique, comment savoir si la lib est l'une ou l'autre, sans info donné par le mec qui l'a fait.
> 
> Il y a un outil en ligne de commande ?
> 
> Et même question à la compilation : pas moyen d'avoir une info venant de gcc par exemple ?


Avec Visual Studio, y'a un outil nommé dumpbin qui permet d'aller fouiller dans les .lib/.dll et sûrement d'autres choses


```
dumpbin /DIRECTIVES <path to lib>
```

Si c'est une lib static, ca va dump toutes les directives (charabia pour le linker de visual studio)
Par contre j'ai pas tant utilisé gcc sous windows, donc je ne saurai pas te dire.

----------


## Nilsou

Hum, malheureusement je ne dev pas avec visual studio. J'aurais aimé avoir dans l'idéal une commande externe mais merci pour l'info. 
Pour gcc c'est plus une question générale : qu'on soit sous linux ou windows ce serait pas mal d'avoir un retour du linker sur le type de lien qu'il a créé...

----------


## Kamikaze

J'avais fait un long post d'insulte à l'époque sur comment intégrer cmake + vcpkg (+vulkan accessoirement) sur windows. Faut que je m'y remette je vais en avoir besoin aussi. 

Et faut que je remette la main dessus c'est plus haut dans le topac

----------


## gros_bidule

Question de gros noob en C/C++, mais il n'y a pas moyen d'unifier tout ça en déléguant le build à Gradle ?

----------


## Patate

Bon c'est un truc de noob je pense  ::P: 

En gros je voudrais utiliser cette librairie : https://github.com/thebracket/rltk

Je vois qu'il conseil d'utiliser vcpkg pour installer les dépendances. Je me renseigne et c'est vrai que c'est sympa un gestionnaire de dépendances. J'ai testé un peu Rust et Cargo c'est bien pratique.

J'ai installé vcpkg et les librairies demandées. Sachant que celle qui m'interesse n'est pas dans les dépôt, dommage. Donc je  clone le git et compile. Je me retrouve avec un librltk.a dans le dossier master.

Voici mon CMakeLists.txt :



```
cmake_minimum_required(VERSION 3.0.0)
project(rl VERSION 0.1.0)

include_directories(/opt/vcpkg/installed/x64-linux/include/) #include où VCPKG installe les lib
include_directories(/home/patate/devs/lib/rltk/rltk) #Là où j'ai compilé la lib qui m'intéresse
link_directories(/opt/vcpkg/installed/x64-linux/lib/) #les lib où VCPKG installe les lib
link_directories(/home/patate/devs/lib/rltk)

find_library(RLTK_LIB NAMES rltk PATHS /home/patate/devs/lib/rltk)

find_package(ZLIB REQUIRED)
find_package(SFML 2 COMPONENTS system window graphics REQUIRED)
find_package(cereal REQUIRED)

add_executable(rl main.cpp)

target_link_libraries(rl sfml-system sfml-graphics sfml-window ${RLTK_LIB})
```

Bon j'ai avancé, je crois qu'il trouve tout mais j'ai encore une erreur de link au niveau de la SFML dans la lib rltk :



```
[main] Building folder: rl 
[build] Starting build
[proc] Executing command: /usr/bin/cmake --build /home/patate/devs/cpp/rl/build --config Debug --target all -j 10 --
[build] [1/1 100% :: 0.554] Linking CXX executable rl
[build] FAILED: rl 
[build] : && /bin/c++ -g -rdynamic CMakeFiles/rl.dir/main.cpp.o -o rl -L/opt/vcpkg/installed/x64-linux/lib   -L/home/patate/devs/lib/rltk -Wl,-rpath,/opt/vcpkg/installed/x64-linux/lib:/home/patate/devs/lib/rltk  /opt/vcpkg/installed/x64-linux/debug/lib/libsfml-system-s-d.a  /opt/vcpkg/installed/x64-linux/debug/lib/libsfml-graphics-s-d.a  /opt/vcpkg/installed/x64-linux/debug/lib/libsfml-window-s-d.a  /home/patate/devs/lib/rltk/librltk.a  /opt/vcpkg/installed/x64-linux/debug/lib/libsfml-system-s-d.a  -lpthread  -lrt  -ludev  -lOpenGL  -lX11  -lXrandr  /opt/vcpkg/installed/x64-linux/debug/lib/libfreetyped.a  /opt/vcpkg/installed/x64-linux/debug/lib/libbz2d.a  /opt/vcpkg/installed/x64-linux/debug/lib/libpng16d.a  /opt/vcpkg/installed/x64-linux/debug/lib/libz.a  -lm  /opt/vcpkg/installed/x64-linux/debug/lib/libbrotlidec-static.a  /opt/vcpkg/installed/x64-linux/debug/lib/libbrotlicommon-static.a && :
[build] /usr/bin/ld: /home/patate/devs/lib/rltk/librltk.a(gui.cpp.o): attention: réadressage sur « _ZTVN2sf11VertexArrayE » dans la section en lecture seule « .text._ZNSt10_HashtableIiSt4pairIKiN4rltk7layer_tEESaIS4_ENSt8__detail10_Select1stESt8equal_toIiESt4hashIiENS6_18_Mod_range_hashingENS6_20_Default_ranged_hashENS6_20_Prime_rehash_policyENS6_17_Hashtable_traitsILb0ELb0ELb1EEEE12_Scoped_nodeD2Ev[_ZNSt10_HashtableIiSt4pairIKiN4rltk7layer_tEESaIS4_ENSt8__detail10_Select1stESt8equal_toIiESt4hashIiENS6_18_Mod_range_hashingENS6_20_Default_ranged_hashENS6_20_Prime_rehash_policyENS6_17_Hashtable_traitsILb0ELb0ELb1EEEE12_Scoped_nodeD5Ev] »
[build] /usr/bin/ld : /home/patate/devs/lib/rltk/librltk.a(rltk.cpp.o) : dans la fonction « rltk::run(std::function<void (double)>) » :
[build] /home/patate/devs/lib/rltk/rltk/rltk.cpp:92 : référence indéfinie vers « sf::Window::isOpen() const »
[build] /usr/bin/ld : /home/patate/devs/lib/rltk/rltk/rltk.cpp:97 : référence indéfinie vers « sf::Window::pollEvent(sf::Event&) »
[build] /usr/bin/ld : /home/patate/devs/lib/rltk/rltk/rltk.cpp:97 : référence indéfinie vers « sf::Window::pollEvent(sf::Event&) »
...
```

Là j'ai du mal à voir le problème. librltk.a a besoin de la SFML mais pourtant je lui donne dans le CMake. Les fichier .so doivent être présent dans le dossier de build ?!

----------


## Cwningen

Peut-être un problème d'ordre des bibliothèque sur la ligne de commande ? Si tu crées un "imported target" pour rltk avec une dépendance sur sfml, ça marche mieux ? Ou alors on peut améliorer le script cmake de rltk pour qu'il installe ce qu'il faut pour un find_package.

----------


## Kamikaze

Bon j'ai retrouvé mon projet Vulkan, si jamais ça peut aider:

Je me souviens que j'en ai chié avec ce truc, à mettre dans les options CMake:



```
-DCMAKE_TOOLCHAIN_FILE=C:\dev\vcpkg/scripts/buildsystems/vcpkg.cmake
```

Mon CMake est tout simple



```
cmake_minimum_required(VERSION 3.19)
project(test_cpp)

set(CMAKE_CXX_STANDARD 20)

find_package(glfw3 REQUIRED)
find_package(Vulkan REQUIRED)

add_executable(test_cpp main.cpp)

target_link_libraries(test_cpp glfw Vulkan::Vulkan)
```

- - - Mise à jour - - -

Et mon vcpkg ressemble à ça:



```
PS C:\dev\vcpkg> .\vcpkg.exe list
glfw3:x64-windows                                  3.3.3            GLFW is a free, Open Source, multi-platform libr...
glfw3:x86-windows                                  3.3.3            GLFW is a free, Open Source, multi-platform libr...
vulkan-headers:x64-windows                         1.2.157          Vulkan header files and API registry
vulkan:x64-windows                                 1.1.82.1-1       A graphics and compute API that provides high-ef...
vulkan:x86-windows                                 1.1.82.1-1       A graphics and compute API that provides high-ef...
```

----------


## Mr Slurp

> [...]


Parce que le projet que tu intègres est un projet CMake, ce projet export très probablement une target CMake lors de la phase "install". Si le package exporte bien tout comme il faut, tu devrais être en mesure de le trouver grace à find_package et tu pourra ainsi l'utiliser comme la zlib ou cereal qui sont listé dans ton cmake.



```
    set( RLTK_LIB_ROOT "<dossier>")
    find_package(RLTK_LIB REQUIRED)
```


RLTK semble être une lib statique, ce qui implique que lorsque tu link dessus, il faut obligatoirement que tu link avec les librairies que elle même a besoin pour linker, c'est justement tout le but de la target qu'elle est sensé générer puisque cette dernière définie toutes les options de compilation et de linkage nécessaires.
Les erreur que tu as le montre bien, c'est le code de RLTK qui ne trouve pas les symboles externes qu'il utilise, justement parce que au moment du linkage de ton projet, celui ci ne connais pas les "Third Party" de RLTK

----------


## Cwningen

> Parce que le projet que tu intègres est un projet CMake, ce projet export très probablement une target CMake lors de la phase "install". Si le package exporte bien tout comme il faut, tu devrais être en mesure de le trouver grace à find_package et tu pourra ainsi l'utiliser comme la zlib ou cereal qui sont listé dans ton cmake.


rltk n'exporte pas, mais cadeau :


Spoiler Alert! 


Patch pour le CMakeLists.txt de rltk :


```
diff --git a/CMakeLists.txt b/CMakeLists.txt
index a67d12f..e965f06 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,7 +1,6 @@
-cmake_minimum_required(VERSION 3.1)
+cmake_minimum_required(VERSION 3.8)
 project("rltk")
 
-set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${PROJECT_SOURCE_DIR}/cmake_modules")
 set(CMAKE_CXX_STANDARD 14)
 set(CMAKE_CXX_STANDARD_REQUIRED on)
 
@@ -27,22 +26,15 @@ add_library(rltk    rltk/rltk.cpp
                                        rltk/rexspeeder.cpp
                                        rltk/scaling.cpp)
 target_include_directories(rltk PUBLIC
-               "$<BUILD_INTERFACE:${SFML_INCLUDE_DIR}>"
-               "$<BUILD_INTERFACE:${CEREAL_INCLUDE_DIR}>"
-               "$<BUILD_INTERFACE:${ZLIB_INCLUDE_DIRS}>"
-               )
-target_link_libraries(rltk PUBLIC ${ZLIB_LIBRARIES} ${SFML_LIBRARIES})
+       $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
+       $<INSTALL_INTERFACE:include>)
+target_link_libraries(rltk PUBLIC ZLIB::ZLIB sfml-system sfml-window sfml-graphics cereal::cereal)
 if(NOT MSVC) # Why was this here? I exempted the wierd linker flags
        target_compile_options(rltk PUBLIC -O3 -Wall -Wpedantic -march=native -mtune=native -g)
 else()
        target_compile_options(rltk PUBLIC /W3 /EHsc)
 endif()
 
-install (TARGETS rltk
-               ARCHIVE DESTINATION lib
-               LIBRARY DESTINATION lib
-               RUNTIME DESTINATION bin)
-
 set(RLTK_HEADERS
                rltk/astar.hpp
                rltk/colors.hpp
@@ -72,9 +64,17 @@ set(RLTK_HEADERS
                rltk/visibility.hpp
                rltk/xml.hpp)
 
-install(FILES ${RLTK_HEADERS}
-               DESTINATION "include/rltk"
-               )
+set_target_properties(rltk PROPERTIES PUBLIC_HEADER "${RLTK_HEADERS}")
+
+install (TARGETS rltk EXPORT rltk-config
+               ARCHIVE DESTINATION lib
+               LIBRARY DESTINATION lib
+               RUNTIME DESTINATION bin
+               PUBLIC_HEADER DESTINATION include/rltk)
+install (EXPORT rltk-config
+               NAMESPACE rltk::
+               DESTINATION lib/cmake/rltk)
+
 
 # Examples
```

Ensuite dans ton CMakeLists.txt à toi, tu fais


```
find_package(rltk REQUIRED)

...

target_link_libraries(rl rltk::rltk)
```

----------


## Mr Slurp

> rltk n'exporte pas, mais cadeau :


Monsieur!  :Prey:   :Clap:

----------


## Patate

Woh ! Merci pour vos réponses vous assurez !  :Prey: 

Je regarde ça et je reviens avec plein de questions  ::ninja::

----------


## Patate

Bon j'essai de faire ça bien et approfondir mes connaissance de git (qui sont presque à 0)... J'ai fork le dépôt rltk, clone sur mon pc, créer un fichier patch avec le contenu de ton post Cwningen. Mais lors de l'appliquer avec git apply patch_cmake.patch
J'ai un "error: patch corrompu à la ligne 59" qui correspond à la fin du fichier, j'ai beau virer la fin, j'ai toujours ce message avec comme ligne la dernière du fichier.

Est-ce que tu as c/c ton diff complet et je peux utiliser git ou bien tu as juste c/c le principal ? Dans ce cas je modifie le CMakeLists à la main.

----------


## Nattefrost

Faut pas utiliser l'utilitaire "patch" pour ce genre de choses ?

----------


## Kamikaze

Vérifie déjà que t'arrives à compiler et run rltk en stand alone, si ça fonctionne pas c'est que le problème est au niveau de l'install de SFML sinon c'est que ton cmake merde.

Regarde mon précédent post et poste ton setup vcpkg & cmake.

Vérifie que tu as bien les targets X64 ou X86 selon ton compilateur. Parce que si t'as la mauvaise target CMake va trouver le package mais ça va planter au link voire au runtime (?)

Ensuite s'pas compliqué, si les exemples de ce machin RLTK fonctionnent y'a aucune raison pour que ça ne fonctionne pas avec toi.

Donc tu peux simplement ouvrir RLTK, et linker contre les sources au lieu d'essayer d'exporter/installer RLTK

Une fois que t'auras vérifié que tout ça fonctionne proprement tu pourras te prendre la tête à essayer de créer un cmake correct.

Mais ils ont l'air un peu amateur RLTK donc ça a l'air d'être un petit bordel et ça a l'air pénible à fix. Sans compter que t'es sous windows (windows c'est une horreur pour dev) et que t'as l'air d'utiliser WSL donc là ça rajoute de la complexité dans la résolution des dépendances j'imagine.

Mais ils ont pas l'air d'exporter/d'exposer leur lib proprement. Et puis les chemins relatifs dans les headers (.hpp), très très sale, et leur CMake fait pas vraiment les choses de manière moderne.

From scratch chez moi:



Si tu veux vraiment partir vers un "vrai" package. Je te conseil de démarrer chez toi avec une dummy library et un dummy consumer et t'essayes de link les deux. Une fois que t'auras un bon setup d'example avec une lib (qui fait juste hello world genre) et quelqu'un qui la consomme reproduit ça avec RLTK mais bon comme je le disais la qualité a pas l'air ouf, mais bon au moins si tu corriges leurs trucs tu pourras push dans leur repo fièrement haha



```
PS C:\dev\vcpkg> .\vcpkg.exe list
[...]
cereal:x64-windows                                 1.3.0            a header-only C++11 serialization library (built...
sfml:x64-windows                                   2.5.1#10         Simple and fast multimedia library
zlib:x64-windows                                   1.2.11#10        A compression library
[...]
```

----------


## Cwningen

Le forum a du modifier les espaces. Ajoute une ligne vide à la fin et utilise l'option --ignore-whitespace de git apply. Ou applique le patch à la main comme ça tu revois en détails les changements.

Pour bien comprendre, les changements sont :
On retire de l'ajout des scripts cmake fournis par rltk : sfml et cereal sont fournis avec leurs propres scripts qui marchent bien (chez moi).On retire les dossiers include des dépendances ce sera fait par target_link_libraries à la place.On ajoute les dossiers include de rltk (build et install), pour que l'utilisateur de la bibliothèque n'est pas à le faire lui-même.On remplace les nom de fichiers par les "targets" pour target_link_libraries, comme ça cmake ajoute tout ce que les dépendances demandent, pas seulement les "-lsomelib".On ajoute les headers dans la propriété PUBLIC_HEADER pour les installer plus facilement.On installe un export de la config, pour que l'utilisateur puisse facilement importer le target rltk.

----------


## Kamikaze

Ouais voilà Cwningen a raison on parlait de la même chose j'avais pas lu son patch, donc, au lieu de leur cmake infâme de 200 lignes, tu peux simplement avoir ça (moderne)

Là je fais l'exemple rapide sans importer, directement dans les sources rtlk



```
cmake_minimum_required(VERSION 3.1)
project("rltk")

set(CMAKE_CXX_STANDARD 14)

find_package(ZLIB REQUIRED)
find_package(SFML 2 COMPONENTS system window graphics REQUIRED)
find_package(Cereal REQUIRED)

add_library(
        rltk
        rltk/rltk.cpp
        rltk/texture_resources.cpp
        rltk/color_t.cpp
        rltk/virtual_terminal.cpp
        rltk/rng.cpp
        rltk/geometry.cpp
        rltk/input_handler.cpp
        rltk/font_manager.cpp
        rltk/gui.cpp
        rltk/layer_t.cpp
        rltk/gui_control_t.cpp
        rltk/virtual_terminal_sparse.cpp
        rltk/ecs.cpp
        rltk/xml.cpp
        rltk/perlin_noise.cpp
        rltk/rexspeeder.cpp
        rltk/scaling.cpp
)

target_link_libraries(rltk PUBLIC ZLIB::ZLIB sfml-system sfml-window sfml-graphics cereal)

add_executable(patate patate_custom.cpp)
target_link_libraries(patate rltk)
```

Ca tu peux le copier coller et ça marche d'office. Dans un deuxième temps tu pourras faire comme Cwningen explique et faire l'export pour que l'utilisateur puisse import.
A noter, je suis peut être pas à jour mais chez moi cereal::cereal n'est pas défini j'ai que cereal, chui p'têt en retard niveau version de la lib, bref

- - - Mise à jour - - -



Et tu peux même utiliser "add_subdirectory" quand t'as les sources comme ça, même pas besoin de faire un export cmake si tu veux rester simple



```
cmake_minimum_required(VERSION 3.20)
project(test_rtlk)

set(CMAKE_CXX_STANDARD 20)

add_subdirectory(rltk)

add_executable(patate_test main.cpp)
target_link_libraries(patate_test rltk)
```



- - - Mise à jour - - -

Tu pourrais en faire un git submodule par exemple

----------


## Cwningen

> Ouais voilà Cwningen a raison on parlait de la même chose j'avais pas lu son patch, donc, au lieu de leur cmake infâme de 200 lignes, tu peux simplement avoir ça (moderne)


Je ne le trouve pas infâme. C'est justement parce que je l'ai trouvé simple que j'ai tenté le patch.

----------


## Kamikaze

Disons verbeux et pas super à jour, pas infâme

----------


## Patate

Merci ! Je regarde ça dans le week-end !

----------


## Patate

Merci Kamikaze d'avoir pris le temps, je comprend mieux le fonctionnement ! Les exemples fonctionnaient bien chez moi de base donc j'ai essayé de m'inspiré de son cmake pour créer mon projet avant de venir ici. Sinon je suis sous linux (arch).

Au final j'ai utilisé le patch de Cwingen (Merci !!!) que j'ai copié à la main, même avec l'option, j'ai toujours eu le message "patch corrompu". Et j'ai pu build mon projet extérieur !

Encore merci !

Petite question (pour les linuxiens) :
Je me trouve ici en console : ~/devs/cpp/rl/      <- A ce niveau j'ai mes sources et cmakelists.txt

ls


```
assets
build
CMakeLists.txt
main.cpp
```

Dans le main.cpp, il accède au dossier assets pour des ressources (font, etc) avec cette ligne et un chemin relatif :


```
init(config_simple("../assets", 80, 50, "RLTK Hello World", "8x8"));
```

Ce qui est marrant c'est que le contexte change suivant d'où je lance le programme :

Ne fonctionne pas : "what():  Font directory does not exist."


```
./build/rl
```

Fonctionne :


```
cd build && ./rl
```

Le cwd du programme est celui de la console ? Pas celui où il se trouve dans l'arborescence ?

----------


## Kamikaze

Ah! Sous Linux il vaut vraiment mieux se passer complètement de vcpkg. Y'a de bien meilleures alternatives, ne serait que le package manager de ta distrib. En plus d'expérience je vois souvent que les packages sous vcpkg sont pas très à jours et surtout il manque pas mal de trucs.
Je me suis dit que tu devais être sous WSL car je voyais des chemins unix et du vcpkg en même temps.

Sinon ouais quand tu fais .. c'est à partir du répertoire courant.

Leur code est pas de super, super bonne qualité de manière générale. Perso je recommande de toujours utiliser des chemins absolu, donc genre:

(Là je suis sous windows car depuis le début (avec vcpkg) je croyais que t'étais sous windows donc)



```
int main() {
    init(config_simple(R"(C:\Users\ASUS-ROG\CLionProjects\patate\assets)", 80, 25, "RLTK Hello World", "8x16", false));
    run(tick);

    return 0;
}
```

Mais sinon ce qu'on voit aussi très souvent c'est de récupérer l'argument de main, le premier argument (std::cout << argv[0]) contient toujours le chemin vers l'exécutable, et donc en partant de là tu peux garantir que ça fonctionne quelque soit l'endroit d'où c'est appelé.
D'ailleurs si tu regardes dans tes services sous arch linux ou n'importe quelle distrib, la plupart des daemon/services (programmes qui s'exécutent dans le background) sont géré par un super service (genre systemd) qui va spécifier le répertoire d'exécution.

Du genre



```
[Service]
WorkingDirectory=/www
```

(tout ça pour dire que s'pas nécessairement trivial et qu'effectivement faut se décider sur un contexte)

Bon et des fois je vais un peu vite en besogne à lacher des "code infame", c'est de l'hyperbole, j'exagère. Juste quelques trucs qui me sautent aux yeux.

Donc là direct effectivement j'avais vu des chemins relatif j'étais pas content, 



```
init(config_simple("../assets", 80, 25, "RLTK Hello World", "8x16", false));
```

ensuite on voit qu'ils passent leur argument par copie au lieu d'une référence dans plusieurs de leurs méthodes, 



```
register_font_directory(const std::string path)
```

dans leurs exemples ils font références aux headers de manière relative alors que ça devrait être une référence absolue avec le cmake/le build qui s'occuper d'exposer le include folder. (target_include_directories)



```
#include "../../rltk/rltk.hpp"
```

Et ils utilisent le system call "stat" pour vérifier l'existence du fichier, qui à ma surprise fonctionne sous windows mais s'pas très cross platform, feraient mieux d'utiliser une abstraction qui fait les choses proprement.



```
    struct stat buffer;
    return (stat (filename.c_str(), &buffer) == 0);
```

M'enfin bref je chipote, c'est simplement que ça me démange de refactor et de faire un commit dans leur repo haha

----------


## Cwningen

> Mais sinon ce qu'on voit aussi très souvent c'est de récupérer l'argument de main, le premier argument (std::cout << argv[0]) contient toujours le chemin vers l'exécutable, et donc en partant de là tu peux garantir que ça fonctionne quelque soit l'endroit d'où c'est appelé.


Non, ce n'est pas fiable. argv[0] est un argument comme un autre, il peut valoir n'importe quoi. Même dans le cas le plus usuel où l’exécutable est dans le PATH, ça ne marche pas. argv[0] contiendra seulement le nom de l'exécutable sans le chemin.

Si tu dois charger des fichiers de données ou de configuration, le mieux sur Linux, c'est de suivre cette spécification. Évidemment, si tu veux être cross-platform, il faudra un autre comportement pour les autres OS.

----------


## Kamikaze

Ah tout à fait, pas rigoureux de ma part. C'tait plus une remarque sur ce que je vois parfois, perso je consomme jamais argv[0] je suis toujours en chemins absolus (autant que possible) et de temps en temps je passe un unique argument au main avec un fichier de config, ça s'arrête là pour mon expérience avec les arguments pour main (puis bon parfois un --version voire --help)

----------


## Patate

Intéressant tout ça !
D'ailleurs vous utilisez un gestionnaire de dépendance en c++ ? J'ai l'impression qu'il y en a beaucoup mais pas vraiment un qui perce. J'ai utilisé vcpkg parce qu'il revient souvent. J'ai testé Conan vite fait qui est plus simple à utiliser (pour moi qui suis une brèle en cmake) mais il n'y avait pas tout dans les dépots.

Après utiliser des chemins absolus c'est risqué le jour où tu déplaces tes ressources ou autres non ? Tu dois modifier ton code source et recompiler.

----------


## Kamikaze

Y'a pas mal de conférences/présentations à ce sujet. C'est un des "problèmes" (rien d'insurmontable hein) en C++. Y'a pas vraiment d'unification à ce niveaux.




Tu peux choisir un peu ce que tu veux selon tes besoins. Je recommande de démarrer avec le package manager de ta distrib c'est une très bonne option.

Et une option populaire:

https://www.jetbrains.com/lp/devecos...libraries-in-C

Pour Conan tu peux faire un  truc custom et fournir les packages toi même si y'a pas ce dont t'as besoin par défaut.

Donc si ton besoin, c'est un dev solo qui veut se faire plaisir, pars sur le package manager de ta distrib. C'est même une option viable pour une team pro hein, mais la je suppose que tu test des trucs en solo de ce qu'on a vu.

Si un package un peu obscur n'est pas dispo (ou pas la version que tu veux), tu peux simplement l'obtenir toi même, compiler depuis les sources ou autre, c'est aussi un bon entraînement (c'est ce que t'as fait pour rltk t'façon, tu connais).

Surtout si t'es sur Archlinux ça devrait être très propre niveau repos dispo

Concernant les chemins absolus là tu parles d'un truc hardcodé qui demande un redéploiement (compile + distribue ton truc), s'pas vraiment lié à absolu vs relatif.
Le problème avec "../../" c'est que tu ne sais pas s'il va être consumé maintenant ou être combiné à quelque chose par exemple, ça rend pénible la compréhension.

Donc bref, y'a jamais besoin de faire ../../asset ou autre
Tu définis le répertoire où tu travail et tu nommes tout à partir de là.

Donc dans un fichier de config "asset", ou "somewhere/asset" (sous entendu par rapport à un chemin connu, donc ('executable'/asset), donc bien sûr c'est "relatif", tout est relatif) voire même un truc vis à vis du système "/tmp/asset"

----

Et y'a pas besoin d'être "fort" en CMake pour ça  ::o:  Le flow c'est find_package(mon_truc), qui fonctionne dans la grande majorité des cas (si le package n'est pas trouvé tu y vas à grand coup de "apt install mon_truc-dev" (généralement y'a le suffixe "dev" ou "devel" parce que tu veux pas un binaire executable mais consumer la lib))

Et dans le cas où les mecs n'exporte pas de machin cmake, faudra le faire à l'ancienne ouais

Mais comme tu le vois tous les projets un tant soit peu populaire (genre sfml, etc.) bah y'a le package cmake kivabien

----------


## Raplonu

J’utilise conan tous les jours, utilisation de dépendances, déploiement de package et gestion d'un repo privé. Je trouve que ce gestionnaire a vraiment une valeur ajoutée (Bon, j'ai pas trop testé les autres non plus... ).

Par contre, il encore est en développement très actif et a tendance à péter à la figure. Des projets qui changent de nom, qui deviennent incompatible avec ta version de conan (Sur le slack de mon équipe, pendant un temps, mon pseudo était _pip install conan --upgrade_ tellement on venait me voir pour ça).

Bon c'est globalement du passé bien que... certaines choses risquent de changer de nouveau mais surtout pour le meilleur.

----------


## Kamikaze

Le seul truc qui me dérange avec Conan, c'est (au début en tout cas) qu'il poussait à mort la solution payante et sous entendait qu'il fallait que tu payes le serveur Conan chez eux si tu veux que ça fonctionne. Non pas que ça me dérange qu'on gagne sa vie mais l'usage était pas clair

Mais dernièrement, puis tiens là je viens de passer sur le site, je vois qu'ils ont l'air d'avoir complètement changé d'approche. Je retrouve même plus les offres payantes immédiatement sur leur site, ça pourrait enfin devenir la solution qui fait l'unanimité

----------


## Cwningen

Je suis un vieux con, j'aime les gestionnaire de paquets des distributions Linux (ou msys2 pour Windows).

La seule fois où j'ai eu affaire à Conan (en tant qu'utilisateur), j'ai vraiment détesté. Je ne sais pas si c'était la faute de Conan ou du projet en question qui l'utilisait mal. Il téléchargeait et compilait des dépendances que j'avais déjà, et les installait dans mon home sans me demander mon avis. À un moment il était même incapable de les compiler parce que ma version de gcc était trop récente et il ne la connaissait pas. Et impossible de s'en passer. Installer les dépendances manuellement, ça peut être fastidieux, mais au moins c'est flexible.

----------


## Kamikaze

Ouais tout à fait d'accord, je fais de même, mais du coup tu gères comment la grande question du "mes dépendances pour dev" vs. "les dépendances de mon système"

Genre ton système utilise une version donnée d'un soft, mais toi tu veux upgrade ou downgrade, par défaut ça va override l'existant sur ton système avec le package manager y'a pas de séparation.

Pour l'instant dans les endroits où je travaille, je force un peu les gens à toujours utiliser "latest" en gros, donc je force un peu tout le monde à s'aligner sur ce qui est à jour, et ça résout tous les problèmes. Quelque cas où y'a des breaks d'APIs mais rien de grave.

Parfois ça ronchonne parce que ça veut downgrade, mais c'est souvent par flemme de mettre à jour et rien de légitime (et ils sont criminellement pas à jour la majorité du temps, genre y'a des failles connus dans ce qu'ils utilisent).

Y'a tout de même de rares cas ou installer une dépendance va pas être compatible et là s'pas forcément simple à résoudre.

Y'a pas mal de gens qui proposent Docker pour résoudre ça mais je suis pas fan du tout, me parait absolument pas l'outil pour. Du coup je zieute du côté de NixOS mais je l'ai pas encore utilisé

----------


## Cwningen

Tu installes dans des préfixes différents (genre /opt/<package> ou ~/opt/<package>). C'est facile d'ajouter des préfixes dans lesquels cmake va chercher ses dépendances. Tu peux les remplir avec des sources que tu as compilé toi-même ou avec des gestionnaire de paquets alternatifs (par exemple vcpkg). Le reproche que je fais à mon expérience avec conan, c'est surtout une trop forte intégration avec le script cmake qui empêche de le contourner quand ça déconne (ou que mes autres sources de paquets seraient plus pratiques).

Après ça dépend du contexte. Dans mon cas, je parlais de logiciel libre que n'importe qui peut vouloir compiler dans des environnements différents. Si on parle de logiciels internes à une entreprise, l'approche peut-être différente.

----------


## Raplonu

> La seule fois où j'ai eu affaire à Conan (en tant qu'utilisateur), j'ai vraiment détesté. Je ne sais pas si c'était la faute de Conan ou du projet en question qui l'utilisait mal. Il téléchargeait et compilait des dépendances que j'avais déjà, et les installait dans mon home sans me demander mon avis. À un moment il était même incapable de les compiler parce que ma version de gcc était trop récente et il ne la connaissait pas. Et impossible de s'en passer. Installer les dépendances manuellement, ça peut être fastidieux, mais au moins c'est flexible.


Conan fourni les binaires quand il les possède et recompile quand la config est manquante. Je trouve que c'est plutôt une bonne chose. On peut espérer qu'ils fourniront un plus grand panel de binaires à l'avenir. Concernant le compilo, ils sont listés dans _settings.yml_ dans le répertoire conan. Tu peux y ajouter le tiens.

Aussi, tu peux lui dire où DL avec _CONAN_USER_HOME_.

Conan a beaucoup changé ces dernières années. Il est totalement sorti du cmake. Tu peux ainsi tout à fait enlever une dépendance de ton conanfile.txt et laisser cmake la trouver dans ton système. Mais ça reste limité. Par exemple, boost utilise zlib, impossible de lui dire d'utiliser zlib de ton système.
C'est en discussion mais ils ont pas l'air très préoccupé par ça pour le moment.

Bon par contre, je le défend mais son utilisation m'a pousser à en être un expert. Comme vous le montrez, même avec une utilisation simple, on se retrouve confronté a plein de problèmes contrairement à pip ou cargo. Un des points noirs pour moi est comme avec cmake, c'est pas claire pour un débutant pour savoir comment l'utiliser. Avec cmake, il faut utiliser quel générateur ? _cmake, cmake_multi, cmake_paths, cmake_find_package, cmake_find_package_multi, CMakeToolchain_ ou _CMakeDeps_ ? L'exemple qu'ils donnent dans la doc utilise le premier, _cmake_ qui est clairement à éviter.

----------


## Thamior

Bonjour à tous, je reviens avec une autre question C++. En gros j'ai un constructeur template variadique pour ma classe (qui est elle même templatée) :



```
template <class T>
class MaClasse
{
 template<class... Args, 
 MaClasse<T>(Args&&... args);
};
```

Jusqu'ici, ça marche, je tatonne un peu avec l'histoire du perfect forwarding (le "Args&&" qui n'est pas une rvalue reference, si j'ai bien compris).
Par contre, là ou ça commence à moins marcher c'est quand je veux construire un MaClasse<T> à partir d'un MaClasse<T>, donc quand j'appelle le constructeur de copie. En effet, la signature du constructeur de copie passe dans le template, donc il génère ça (qui ne fait pas du tout ce que je veux) au lieu du constructeur de copie.

Ma solution, que je trouve horrible, est d'utiliser enable_if pour empêcher l'utilisation du constructeur template quand je veux utiliser le constructeur de copie.




```
template <class T>
class MaClasse
{
 template<class... Args, 
 std::enable_if_t<!std::is_same<const MaClasse<T>&, Args...>::value, bool> = true,
 std::enable_if_t<!std::is_same<MaClasse<T>&, Args...>::value, bool> = true,
 std::enable_if_t<!std::is_same<MaClasse<T>&&, Args...>::value, bool> = true>
 MaClasse<T>(Args&&... args);
};
```

Alors ça marche, et il y a peut-être moyen d'exprimer ça avec un seul enable_if, mais ce que je me demande surtout c'est si c'est la façon "standard" de faire, parce que bon désolé mais  :Gerbe:

----------


## Cwningen

Déjà il me semble que le constructeur c'est MaClasse et non MaClasse<T>, je suis étonné que ça marche.

Pour le problème de la référence universel qui te défini le constructeur de copie/move, la solution c'est ajouter un paramètre qui ne sert à rien :


```
class MaClasse
{
public:
    static inline constexpr struct tag_special_t {} tag_special = {};
    template<typename... Args>
    MaClasse(tag_special_t, Args &&... args) {
        // ...
    }
};

int main() {
    MaClasse mon_objet(MaClasse::tag_special, "plein de choses ici");
}
```

PS: Et aussi std::is_same<const MaClasse<T>&, Args...>, ça doit pas marcher quand le nombre de Args... est différent de 1.

----------


## Thamior

> Déjà il me semble que le constructeur c'est MaClasse et non MaClasse<T>, je suis étonné que ça marche.
> 
> PS: Et aussi std::is_same<const MaClasse<T>&, Args...>, ça doit pas marcher quand le nombre de Args... est différent de 1.


Merci, que de très bonnes remarques, ça marchotte dans mes tests unitaires mais en effet quand le nombre de Args... est différent de 1 ça s'arrête de marcher. Le MaClasse<T> c'est juste moi qui n'ai pas réfléchi en recopiant.

Une version qui je pense fait ce que je veux est donc plutôt :



```
class MaClasse
{
public:
    template<typename... Args>
    std::enable_if_t<
      ((!std::is_same<const ReferenceCounted<Pointed>&, Args>::value && ...) &&
      (!std::is_same<ReferenceCounted<Pointed>&, Args>::value && ...) &&
      (!std::is_same<ReferenceCounted<Pointed>&&, Args>::value && ...))
      , bool
    > = true
  >
  MaClasse(Args &&... args);
};
```

Ca fonctionne même avec 0 paramètres, ce qui est top vu que MaClasse je m'en sers comme smart pointer. C'est aussi pour ça qu'ajouter un paramètre "dummy" je n'aime pas trop car ça casse un peu le truc. Après j'imagine que c'est peut-être pour ça qu'on a std::make_shared() et std::make_unique()...

----------


## Cwningen

Je pense que tu as un problème si tu passes plusieurs paramètres dont au moins un est une référence. Si tu tiens à aller dans cette direction, utilise un type_traits custom dans le genre :


```
template <typename T, typename... Args>
struct is_copy_or_move_constructor_args: std::false_type {};
template <typename T>
struct is_copy_or_move_constructor_args<T, const T &>: std::true_type {};
template <typename T>
struct is_copy_or_move_constructor_args<T, T &>: std::true_type {};
template <typename T>
struct is_copy_or_move_constructor_args<T, T &&>: std::true_type {};
```

Ces types de références ne sont pas suffisant, dans cet article, l'auteur prend on compte le cas où on passe un objet de type dérivé au constructeur de copy dans la classe de base. Il faudrait peut-être aller jusqu'à considérer tout ce qui est convertible en référence ?

C'est très compliqué, je préfère contourner le problème avec des fonctions libres/méthodes statiques make_truc, ou des constructeurs à tags (qui peuvent être utilisés en interne par les fonctions make_truc, si tu les trouves moches).

Edit: J'ai retrouvé l'exemple dans le livre de Scott Meyers, c'est is_base_of + decay.


```
class Person {
public:
  template<
    typename T,
    typename = std::enabled_if_t<
      !std::is_base_of<Person, std::decay_t<T>>::value
      &&
      !std::is_integral<std::remove_reference_t<T>>::value
    >
  >
  explicit Person(T&& n)        // ctor for std::strings and
  : name(std::forward<T>(n))    // args convertible to
  { … }                         // std::strings

  explicit Person(int idx)      // ctor for integral args
  : name(nameFromIdx(idx))
  { … }

  …                             // copy and move ctors, etc.

private:
  std::striing name;
};
```

----------


## Thamior

Merci pour l'article ! Je pense que pour le moment, je vais rester sur l'exemple de Scott Meyers qui a quand même l'air d'être le plus concis (pour du template...), et si jamais j'ai des soucis je passerai sur une fonction statique à la "make_shared()".

----------


## Kamikaze

Bon je viens de démarrer sur un projet qui utilise du Ruby (+ Rails) et Go (golang), avec du C++.

Franchement pas très impressionné de ce que je vois du côté de Ruby. Genre je comprends l'idée de "c'est facile de faire des prototypes", y'a pas mal de trucs pré-machés, mais vu qu'il faut aussi prendre le temps d'apprendre les conventions du language (qui franchement sont déstabilisantes parfois, genre le délire de parser le suffixe d'un nom de fichier pour faire un truc derrière)... Au final j'irai plus vite à installer la lib C++ qu'il me faut et basta.
Aussi direct on voit les écueils classiques, y'a une bonne partie des tests du projet qui seraient résolus directement si y'avait du typage fort.

'Fin bref curieux d'avoir les avis des canards qui sont sur du Ruby, mais ça me vend pas le truc. Puis la communauté n'a pas l'air super active, m'enfin, j'apprendrai de quoi faire les 2-3 trucs dont j'ai besoin.

Sinon Go ça va, franchement rien d'extraordinaire, p'têt qu'à l'époque l'idée de faire un langage en réaction à l'état du C++ tel qu'il était avait du sens. Mais aujourd'hui avec le C++ moderne y'a pas vraiment un moment où je me dis "ah, pratique le Go, ça aurait été chiant en C++".
L'avantage du Go pour l'instant c'est la gestion des dépendances, là y'a pas trop à chier, C++ devrait s'en inspirer niveau simplicité. Et puis la cross compilation est super facile aussi en Go.

Là encore si y'a des canards qui ont des pro-tips en go, je prends.

Et je suis resté sur les IDE de jetbrains pour les 2, on change pas une équipe qui gagne

----------


## MrBeaner

Go c'est mon langage à apprendre cette année  ::):  J'hésitais avec C++, mais je suis plus hypé par ça.

J'ai pas de besoin particulier actuellement, mais je voulais apprendre un truc moderne si jamais j'ai envie de plus de perfs que Python ou JS.

----------


## gros_bidule

Go j'ai vraiment du mal avec la syntaxe. J'ai l'impression que ses créateurs font parti des gens qui se disent qu'un nouveau langage doit forcément se démarquer de par sa syntaxe :
- un tableau de strings ? Par ex en Java on déclare "String[]", c'est établit, tout le monde connaît. Bah en Go : "[]string"
- en python on a les fonctions "fun" : bah écrivons "func", parce que
- une affectation : plutôt que "=", faisons ":="
- rhoo et puis si je me fiche du retour d'une fonction, je dois faire "_ = mafonction()" (sur ce point on peut peut être faire mieux ? je ne suis pas expert non plus)
- la librairie standard n'est pas très fournie pour ce qui concerne la gestion des listes/tableaux, j'ai miséré...
- en Pyhon la gestion des listes, tableaux, maps et même du Json c'est super méga simple. Pourquoi ne pas avoir repris cette super idée ?
Pourquoi ne pas reconnaître que les précédents langages ont de bonnes idées, et essayer d'en faire un mix plutôt que forcément chercher à tout changer ? C'est comme la gueguerre des OS avec LF vs CR vs CRLF, ou / vs \, j'ai l'impression qu'on en est encore là.
Quand dans une même semaine tu fais du Java, Kotlin, Python, et Go, la gymnastique intellectuelle devient un calvaire. C'est comme ça que tu laisses tomber des langages.

C'est dommage car en effet la cross-compilation est cool, et installer un environnement de dev se fait en quelques clics. Pas besoin d'installer et configurer plein de trucs : installeur du SDK, clics sur Enter, voilà tu peux faire du Go. *Et ça marche*.
Sous Windows y'a juste certains antivirus (comme Node32) qui n'aiment pas que les exe soient générés et exécutés depuis %TMP% lorsque tu dev, c'est effectivement moche, mais les AV se configurent. Peut être Go aussi, je n'ai pas creusé plus loin.

Ruby ce n'est pas comme Perl, Groovy ou Scala ? C'est vieuuuuuux et laid, plus personne n'en veux. Je ne sais pas si vous le ressentez comme moi, mais un langage doit voir un bon écosystème, mais ledit langage doit aussi être agréable à utiliser.

----------


## Teocali

Perso, là, c'est Dart dans lequel je vais me plonger. On a récupérer le code d'une application mobile developpé en Flutter pour la maintenir, et je dois avouer que mes premiers contact le code m'ont un peu déstabilisé mais rien de rédhibitoire. on verra ce que ça donne au fil du temps

----------


## Kamikaze

Ah oui le truc parfois pénible avec Go c'est quand tu veux chercher un truc sur google, vu que "Go" c'est trop petit la moitié du temps je tombe sur des réponses pour un autre langage haha.
Je m'en sors avec du "golang" ou autre dans la recherche, rien de bien grave. 

Mais je sais que pour C ou C++ google a fait en sorte que ça fonctionne bien (genre j'avais lu un article qui expliquait comment le moteur de recherche gérait des termes aussi petit et était capable de comprendre c++ = cpp), marrant qu'ils n'aient pas l'air d'avoir implémenté ça pour Go (qui est le langage "de chez google")

----------


## Helix

> Go j'ai vraiment du mal avec la syntaxe. J'ai l'impression que ses créateurs font parti des gens qui se disent qu'un nouveau langage doit forcément se démarquer de par sa syntaxe :
> - une affectation : plutôt que "=", faisons ":=".


Juste sur ce point, la syntaxe mainstream n'est pas toujours bien claire. Par exemple il est souvent plus naturel à mes étudiants débutants (iut Ge2i) d'utiliser '=' pour le test. L'idée de garder ce '=' pour le test et d'avoir un ':=' pour l'affectation (ce que faisait Pascal) me semble une très bonne chose.

Ah mince, en écrivant je vérifie et Go utilise '==' pour le test. Il a deux opérateurs d'affectation, '=' et ':=' qui implique une déclaration. C'est bof ça.

----------


## GrandFather

Ruby est, parmi tous les langages que j'ai utilisés ou seulement étudiés, celui avec une implémentation de l'objet parmi les mieux foutues et les plus limpides sur le plan théorique. Sans bidouille du type autoboxing (Java) et à des années-lumières de l'implémentation foutraque des objets dans Python. Pour le reste, le langage a été conçu dans une optique de « moindre surprise », et pour l'avoir utilisé dans un cadre professionnel je trouve que ce contrat a été rempli. Les choix de nommage et de syntaxe qui ont été faits l'ont été pour faciliter l'apprentissage du langage et le rapprocher du langage naturel. Pour tout dire, si mon contexte de travail le permettait, je ne travaillerais qu'en Ruby.

Ruby est quand même le langage dans lequel a été conçu le framework web MVC Rails, qui a servi de référence à tous les frameworks MVC modernes dominants comme Symfony, par exemple. Et si vous voulez coder un DSL (Domain Specific Language), vous ne trouverez pas un meilleur langage pour le faire.

----------


## acdctabs

Moi = pour l'affectation et == ou === pour la profondeur du test 
(égalité simple, égalité + type) je trouve ça parfait.

Après je dois avouer j'aime bien le php.

----------


## Cwningen

> Moi = pour l'affectation et == ou === pour la profondeur du test 
> (égalité simple, égalité + type) je trouve ça parfait.


Donc, si === c'est la version plus "profonde" de ==, ça veut dire que = est la version plus "superficielle" de ==. C'est bien ça ?

----------


## Shurin

> Perso, là, c'est Dart dans lequel je vais me plonger. On a récupérer le code d'une application mobile developpé en Flutter pour la maintenir, et je dois avouer que mes premiers contact le code m'ont un peu déstabilisé mais rien de rédhibitoire. on verra ce que ça donne au fil du temps


Tu va kiffer je pense.
Le duo Flutter/Dart est vraiment cool, hésites pas à poser des questions d'ailleurs, je suis beaucoup dessus depuis 2ans.

----------


## acdctabs

Après un test d'égalité et une affectation ça s'utilise pas au même endroit, enfin je ne vois pas trop où ça pourrait.
Bon je code peut être trop à l'ancienne...

----------


## Cwningen

En C, c'est courant. Surtout avec les appels systèmes posix :


```
if ((fd = open("fichier", O_RDWR)) == -1)
```

Mais aussi quand tu as une valeur que tu peux directement tester comme un booléen (par exemple un pointeur) :


```
if ((ptr = get_pointer(...)))
```

Au point, qu'il y a une convention pour éviter les avertissements du compilateur.

----------


## Orhin

C'est très moche le C.  :tired:

----------


## Cwningen

Et pourtant plein de langages ont repris sa syntaxe. Mais pour l'affectation avec un simple =, il semble que ce soit Fortran le coupable.

----------


## Orhin

Je ne parlais pas de la syntaxe, mais de faire une assignation en même temps qu'un test.  ::P:

----------


## William Vaurien

C'est l'absence de gestion standard des erreurs qui rend moche le C.  Quasiment toutes les fonctions de la lib standard n'utilisent la valeur de retour que pour remonter un code d'erreur. En plus souvent c'est 0 -> pas d'erreur, comme en shell et  donc ça ne se comporte pas comme un booléen et ça donne des trucs encore plus moche et pas facile à lire pour un dev non habitué. Sans compter que des fois le comportement change un peu dans une lib donné: des fois c'est une variable globale qui est utilisé pour stocker le dernier code d'erreur éventuel.

Cette absence de gestion d'erreur par exception (couplé aussi avec l'absence de String standard) rend le C vraiment désuet et assez insuportable pour un gros projet quand on est habitué à d'autres idiomes. 

Un de mes collègues qui ne fait que du C et à arrété de faire de la 'veille technologique' vers 2000 (il fait du html avec des balises en majuscule  :^_^:  ) et il est toujours surpris par les langages plus modernes comme Java (pour lui c'est très moderne Java...). Il à beaucoup de mal avec les try/catch, ou encore à utiliser le retour de la fonction pour retourner le résultat d'une opération non mathématique. Il a tendance à plutôt vouloir modifier un paramètre que de retourner un résultat.

Perso je suis habitué à la syntaxe C dans sa variante Java et j'ai du mal avec les langages comme Kotlin ou Scala qui changent par example l'ordre de déclaration entre type et nom de paramètre. 
Après c'est comme un changement de layout de clavier: c'est chiant parceque ça devient 'cablé en dur' dans le cerveau et que le changement génére une frustration car on fait la même erreur tout le temps et que ça ralenti, mais on fini par s'habituer si on utilise assez longtemps...

Pour Ruby j'ai l'impression que ce langage, qui devait tuer Java un peu avant 2010, est quand même un peu en train de crever, ou au moins de stagner... 
J'avais fait qqs scripts avec et je l'avais trouvé sympa (plus que Python qui termine systématiquement en code bordélique pour moi; je ne comprend pas pourquoi ni comment Python a pu devenir si populaire...)
Là je n'en entends quasi plus jamais parler.

----------


## Teocali

> Perso je suis habitué à la syntaxe C dans sa variante Java et j'ai du mal avec les langages comme Kotlin ou Scala qui change par example l'ordre de déclaration entre type et nom de paramètre.


Pour Kotlin, l'inversion s'explique par la volonté de donner beaucoup de capacité au compilateur, et entre celle de l'inférence de type. Si tu gardais le type avant, ça serait compliqué de le supprimer dans le cas d'un typage implicite.

Exemple :


```
//Typage explicite en Kotlin
val variable:String = methodeQuiRetourneUneString()

//Typage implicite en Kotlin
val variable = methodeQuiRetourneUneString()

// Typage explicite en java
String variable = methodeQuiRetourneUneString()

//Typage implicite en java
variable = methodeQuiRetourneUneString() //ERROR : c'est quoi ? Une déclaration ou une affectation ?
```

Je sais que Java a introduit le mot clé val, mais il faut avouer que la manière de Kotlin donne une meilleur cohérence au langage. Perso, je suis très heureux de coder en kotlin full time et les quelques fois ou j'ai du retourner sous Java, j'ai eu du mal.

Bon après, il est vrai que Kotlin est destiné à être utilisé au sein d'un IDE moderne. Lire le code d'une application Kotlin au sein d'un simple editeur de texte, même avec la coloration syntaxique, tu tousses.

Mais bon, y'a que quelque cas bien spéciaux qui continue a coder sans IDE  ::P:

----------


## Orhin

Après cette inversion n'est pas spécifique à Kotlin, on la trouve dans la majorité des langages "récents" (Swift, Typescript, Rust ou Go par exemple).
Langages qui ont généralement de l'inférence de type (comme le souligne Teocali pour Kotlin).

----------


## deathdigger

Je viens de mettre à jour mon visual studio community vers la version 2022 et putain cette auto-complétion  :Mellow2: 
Genre, un truc tout bête quand t'as un tableau de strings :

----------


## Shinosha

> Ruby ce n'est pas comme Perl, Groovy ou *Scala* ? C'est vieuuuuuux et laid, plus personne n'en veux. Je ne sais pas si vous le ressentez comme moi, mais un langage doit voir un bon écosystème, mais ledit langage doit aussi être agréable à utiliser.


Première fois que je me sens obligé de parler sur ce topic, mais je ne peux pas laisser passer ça  :Fouras:  Ok le langage est pas opinionated, mais Scala (notamment la version 3) met à l'amende tous les autres langages de la JVM. Si je devais commencer un nouveau projet backend entreprise aujourd'hui et si j'avais un peu de latitude dans le process de formation et du recrutement, je choisirai forcément Scala. Quant à Ruby oui il est clairement en train de crever  ::ninja::

----------


## Nattefrost

Du perl j'en vois encore un peu chez les vieux sysadmins (pour du cron par ex quand sh/bash est trop limité). Ruby a été partiellement remplacé par du Golang dans les outils/services de devops/infra ( les 'nouveaux' projects Hashicorp par ex). 
Du coté dev pur genre web ou client lourd je sais pas je m'en suis éloigné depuis longtemps mais je veux bien croire que ç'ait été supplanté par d'autres langages plus modernes  ::P:

----------


## TwinBis

Scala est au mieux stagnant, au pire moribond.
Probablament en partie à cause de Kotlin, qui remplit une niche proche (sans être tout à fait identique).

Après ça ne retire rien aux mérites propres du langage.
Mais encore faut-il trouver des devs pour bosser avec, et avoir un écosystème vivant autour, ce qui me semble être problématique avec Scala ces derniers mois/années.

----------


## Orhin

Kotlin a le gros avantage d'être poussé par Google pour le dev Android.
Ça donne une base très importante de développeurs utilisant le langage au quotidien.

Du coup forcément ça a tendance à "déborder" sur le reste de l'environnement Java.

----------


## Shinosha

> Scala est au mieux stagnant, au pire moribond.
> Probablament en partie à cause de Kotlin, qui remplit une niche proche (sans être tout à fait identique).
> 
> Après ça ne retire rien aux mérites propres du langage.
> Mais encore faut-il trouver des devs pour bosser avec, et avoir un écosystème vivant autour, ce qui me semble être problématique avec Scala ces derniers mois/années.


En terme d'adoption oui c'est probable, et je trouve ça fort dommage. Son gros problème niveau adoption c'était surtout les breaking changes entre chaque version à mon sens (ce qui était surtout un problème pour Spark, et donc tout le monde, soyons honnêtes). Pour le coup Scala 3, en plus d'améliorer le langage substantiellement, est censé être maintenant rétrocompatible sur les versions mineures. 
Concernant l'écosystème, il est toujours très vivant. On y trouve beaucoup de libs très cools. On peut citer par exemple ZIO qui vise à rendre la programmation fonctionnelle accessible aux devs OOP, ou Tapir qui te permet te décrire des endpoints HTTP pour ensuite te générer un client ou serveur associé avec la doc Swagger qui va bien. Le tout en restant le plus typesafe possible bien sûr.

Pas sûr que Kotlin vampirise tant que ça par contre. Initialement conçu et vendu comme un meilleur Java alors que Scala c'est juste pas pareil. D'ailleurs je me demande ce qu'il va advenir de Kotlin quand Java aura rattrapé un peu son retard. Et vu son nouveau rythme de release... Contrairement à Scala par contre ils ont été assez intelligents pour se faire soutenir par Android et Spring.

----------


## gros_bidule

Une des forces de Kotlin, c'est de proposer des releases fréquentes tout en restant compatible avec du vieux bytecode.
Tu as les bénéfices de Kotlin récent tout en ciblant du bytecode java8 ou java11 (et java6 pendant un temps). Java se remet à évoluer rapidement (enfin... ça reste un peu lent hein, je parle des LTS), mais en entreprise on commence tout juste à penser à migrer des bases de code Java 8 vers Java 11. Alors Java 17 (toutes les 3 des LTS. En milieu pro on évite évidemment les non-LTS)...
Du coup on fait du Kotlin, comme ça on a pas le stress de devoir mettre à jour le JDK pour l'attrait des nouvelles fonctionnalités, vu que c'est décorrélé now.

Puis c'est super bien pris en charge par les IDE, les linters, etc. Avoir un env de dev sexy ça compte.

Rhoo et le compilateur était déjà rapide à la base, et il s'améliore encore. Côté Scala on ne peut pas en dire autant je crois ?  ::trollface::  (je suis resté sur Scala 2 cela dit, pour faire du Gatling uniquement). De mémoire, le compilo Scala est suuuuuuuper lent. Ses devs ont même eu l'audace de titrer un jour "rholala c'est trop cool Scala rendez-vous compte, on a amélioré les perfs du compilo de 50%". Sauf que 50% de _super méga lent_ ça fait _super lent_, le compilo part de très très loin.

Les écosystèmes de Java Kotlin et Scala, ça serait dommage d'essayer de les comparer vu que tout ça c'est grosso-modo un seul écosystème, celui des langages de la JVM. "Akka" par ex, un "grand" projet Scala tel qu'on le présentait à l'époque, bah tu peux l'utiliser en Java...
Les libs faites en Scala, la plupart existent aussi en Java / Kotlin de toutes façons. Les "bons" trucs de Scala ou des libs Scala ont tous (sinon 99%) été repompés pour en faire de très bonnes libs Java ou Kotlin, et améliorer ces langages. Scala n'a plus autant d'avance sur les autres langages JVM, c'est finit ça.
Je pense sincèrement que Scala mérite les honneurs, il a introduit de très belles nouveautés. Mais c'est un vieux soldat, sa place est dans la maison de retraite des vieux langages.

---

L'avenir de Kotlin aussi, et là c'est un pari (et c'est porté par des devs assez renommés), c'est d'en faire un des grands langages du frontend. Tu peux déjà générer du JS, ça marche super, mais le futur c'est de faire du webassembly. Ca plus des framework front basés sur Kotlin, si ça prend, ça serait une tuerie. Tu aurais un seul langage pour le backend et le frontend. Ca serait tellement mieux que cette horreur de NodeJS.

----------


## Shinosha

> Rhoo et le compilateur était déjà rapide à la base, et il s'améliore encore. Côté Scala on ne peut pas en dire autant je crois ?  (je suis resté sur Scala 2 cela dit, pour faire du Gatling uniquement). De mémoire, le compilo Scala est suuuuuuuper lent. Ses devs ont même eu l'audace de titrer un jour "rholala c'est trop cool Scala rendez-vous compte, on a amélioré les perfs du compilo de 50%". Sauf que 50% de _super méga lent_ ça fait _super lent_, le compilo part de très très loin.


C'est sûr que quand ton compiler fait rien c'est rapide  ::trollface::  Évidemment c'est mieux qu'avant mais franchement je trouve ce point un peu surfait. Il y a plusieurs choses à considérer avant de déclarer ça comme un problème bloquant... Est-ce gênant pour le feedback développeur ? Pas vraiment, normalement t'as un IDE qui t'aides et surtout la compilation incrémentale. C'est long de build sur la CI ? Peut-être mais est-ce que c'est grave que ça dure 5 mins de plus alors qu'en échange t'as un type system qui t'offre vachement plus de possibilités et de sécurité. Moi j'pense la question, elle est vite répondue.




> Les écosystèmes de Java Kotlin et Scala, ça serait dommage d'essayer de les comparer vu que tout ça c'est grosso-modo un seul écosystème, celui des langages de la JVM. "Akka" par ex, un "grand" projet Scala tel qu'on le présentait à l'époque, bah tu peux l'utiliser en Java, Kotlin, Groovy...
> Les libs faites en Scala, la plupart existent aussi en Java / Kotlin de toutes façons. Les "bons" trucs de Scala ou des libs Scala ont tous (sinon 99%) été repompés pour en faire de très bonnes libs Java ou Kotlin, et améliorer ce langages. Scala n'a plus d'avance sur les autres langages JVM, c'est finit ça.


Niveau fonctionnalités si, Scala 3 a toujours de l'avance, et pas qu'un peu. Par exemple les opaque types, un pattern matching complet, dependent function type, les typeclasses, higher-kinded type et beaucoup d'autres choses. Ces manquements se traduisent bien sûr niveau écosystème.
En effet même si certaines libs fournissent une API Java ou autre, c'est souvent avec une ergonomie inférieure ou avec des implems spécifiques (dédicace à  Lombok ou Vavr). Là tu as pris un exemple qui t'arranges avec Akka (qui aurait peut-être pu être implémenté en Java), mais si je te parle des substituts aux for-comprehensions ou aux HKT dans Arrow-kt par exemple, c'est tout de suite moins joli. Pensons aussi aux maintainers derrière, toi tu peux potentiellement avoir une belle API mais par contre en coulisses c'est moins reluisant.




> Je pense sincèrement que Scala mérite les honneurs, il a introduit de très belles nouveautés. Mais c'est un vieux soldat, sa place est dans la maison de retraite des vieux langages.


 :Boom:  :Boom:  :Boom: 




> L'avenir de Kotlin aussi, et là c'est un pari (et c'est porté par des devs assez renommés), c'est d'en faire un des grands langages du frontend. Tu peux déjà générer du JS, ça marche super, mais le futur c'est de faire du webassembly. Ca plus des framework front basés sur Kotlin, si ça prend, ça serait une tuerie. Tu aurais un seul langage pour le backend et le frontend. Ca serait tellement mieux que cette horreur de NodeJS.


Scala.js suit le sujet aussi  ::ninja::

----------


## Orhin

> L'avenir de Kotlin aussi, et là c'est un pari (et c'est porté par des devs assez renommés), c'est d'en faire un des grands langages du frontend. Tu peux déjà générer du JS, ça marche super, mais le futur c'est de faire du webassembly. Ca plus des framework front basés sur Kotlin, si ça prend, ça serait une tuerie. Tu aurais un seul langage pour le backend et le frontend. Ca serait tellement mieux que cette horreur de NodeJS.


Ouais alors ça je parierais pas dessus (ou en tout cas pas avant 5 ans minimum).
Les gros framework JS (React/Angular/Vue) sont vraiment bien implantés et l'environnement TS/ESnext est très dynamique.




> Contrairement à Scala par contre ils ont été assez intelligents pour se faire soutenir par Android et Spring.


Ben c'est un peu le cœur du sujet.
Les qualités intrinsèques d'un langage c'est bien, mais l'environnement tout autour (framework, IDE, plateforme de dev, etc) est encore plus important.




> D'ailleurs je me demande ce qu'il va advenir de Kotlin quand Java aura rattrapé un peu son retard. Et vu son nouveau rythme de release...


Alors déjà Y'a encore du boulot à ce niveau.
Au delà des fonctionnalités, la syntaxe Java donne quand même moins envie que celles de langages "modernes".

Mais surtout, ça va être une question de dynamique.
Aujourd'hui passer de Java à Kotlin a du sens car ce dernier est objectivement mieux.
Si demain Java ne fait *que* rattraper son retard, quel serait l'intérêt pour les dev Kotlin de repasser sur du Java ?

Le seul argument pour moi serait une forme d'inertie, si les grosses organisations sont encore sur du Java, alors il y aura une pression pour uniformiser.
Mais ça ne sera le cas que si Java rattrape son retard *avant* que Kotlin soit devenu majoritaire.




> C'est sûr que quand ton compiler fait rien c'est rapide  Évidemment c'est mieux qu'avant mais franchement je trouve ce point un peu surfait. Il y a plusieurs choses à considérer avant de déclarer ça comme un problème bloquant... Est-ce gênant pour le feedback développeur ? Pas vraiment, normalement t'as un IDE qui t'aides et surtout la compilation incrémentale.


Ben ça dépend ce que tu fais.
Quand tu bosses sur de l'UI, avoir une compilation quasi instantanée est vraiment appréciable.

----------


## Teocali

Scala, le vrai gros problème quand j'avais touché du truc (et c'est également le discours de deux potes dev Scala avec qui j'ai discuté), c'était la toolchain complement aux fraises. C'est entre la raison du switch vers Kotlin pour les potes en question. Ca et le fait que le language évolue extrêmement vite (ce qui n'est pas le cas de Scala), et dans le bon sens.

----------


## Shinosha

Tu as eu quoi comme problèmes ? Je sais pas de quand date ces constats mais à part si toi et tes potes vous avez bossé avec des versions < 2.11 (aka les versions maintenant inexistantes), c'est juste pas possible. IntelliJ a un plugin Scala qui est très bon, et sauf si tu joues avec des trucs très très avancés de Scala 2 (en entreprise ça devrait pas), tu n'aurais dû avoir aucun problème. On attend encore une meilleure prise en charge de Scala 3 mais ça devrait arriver. L'écosystème a pas encore entièrement migré de toutes façons. Tu peux même bosser sur VSCode via Metals si tu veux un truc plus léger.

De plus si vous avez peur de SBT il y a maintenant des alternatives production ready, comme Mill.





> Ben c'est un peu le cœur du sujet.
> Les qualités intrinsèques d'un langage c'est bien, mais l'environnement tout autour (framework, IDE, plateforme de dev, etc) est encore plus important.


Voir au dessus  ::): 




> Ben ça dépend ce que tu fais.
> Quand tu bosses sur de l'UI, avoir une compilation quasi instantanée est vraiment appréciable.


Qui choisi un langage JVM pour du front ? Ou plutôt qui fait encore du server side rendering de nos jours ? Cela étant c'est possible de faire ça avec un feeback décent, car Play Framework y arrive par exemple. Sûrement avec du hotswap JVM ou je ne sais quoi.

----------


## Orhin

> Qui choisi un langage JVM pour du front ? Ou plutôt qui fait encore du server side rendering de nos jours ? Cela étant c'est possible de faire ça avec un feeback décent, car Play Framework y arrive par exemple. Sûrement avec du hotswap JVM ou je ne sais quoi.


Je ne pensais pas au web mais plutôt aux applis desktop et android.

----------


## Foksadure

> Tu aurais un seul langage pour le backend et le frontend. Ca serait tellement mieux que cette horreur de NodeJS.


Oui, vive l'ASP 3.0.  :Emo:

----------


## Teocali

> Tu as eu quoi comme problèmes ?


 Plus les details en tête, j'avoue. Je veux bien croire que ça ait évolué dans le bon sens, vu que j'y avait touché avant la sortie de Kotlin de beta.




> Qui choisi un langage JVM pour du front ? Ou plutôt qui fait encore du server side rendering de nos jours ? Cela étant c'est possible de faire ça avec un feeback décent, car Play Framework y arrive par exemple. Sûrement avec du hotswap JVM ou je ne sais quoi.


Concernant le SSR, tu serais surpris, c'est en phase de retour en grace, notamment avec des solutions comme HTMX. Je sais que de notre coté, vu les contraintes humaines et financière que l'on a, c'est une des solution qu'on explore pour la prochaine refonte de notre front end.

----------


## gros_bidule

Langage JVM pour du front -> je pense qu'il faut le voir comme un remplaçant de Typescript  ::): 
KT qui transpile en JS ou TS qui transpile en JS, quelle différence ? Si tu préfères Kotlin, elle a son importance. Il manque juste un bon framework équivalent à Angular/React/Vue, et là, tu auras des devs Kotin qui vont se remettre à faire du frontend.

----------


## Orhin

> Langage JVM pour du front -> je pense qu'il faut le voir comme un remplaçant de Typescript 
> KT qui transpile en JS ou TS qui transpile en JS, quelle différence ? Si tu préfères Kotlin, elle a son importance. Il manque juste un bon framework équivalent à Angular/React/Vue, et là, tu auras des devs Kotin qui vont se remettre à faire du frontend.


Y'a quand même une différence dans l'intégration des librairies JS.

Aujourd'hui t'as quasi rien à faire pour utiliser une lib JS en Typescript.
Dans le pire des cas y'a pas de typage mais ça va marcher "de base" car TS reste juste un superset de JS.

Je demande à voir une intégration aussi simple en Kotlin.

----------


## gros_bidule

Kotlin permet déjà de transpiler en JS, donc de là à monter un framework dessus... y'a peut être un manque de volonté de certains acteurs ? Ou bien c'est en dev ou encore un poil trop tôt ? Aucune idée, mais y'a rien de bloquant.
Intégrer des libs JS tierces c'est une autre histoire, mais l'idée serait de s'en passer ou de passer par des wrappers pour les plus populaires d'entre elles.

- - - Updated - - -

Puis mince, ça serait dommage de faire du Kotlin pour devoir se taper la compatibilité avec des libs JS toutes pourries  ::ninja:: 
De toutes façons l'avenir *tousse-tousse* c'est les webassemblies.

----------


## Orhin

> Kotlin permet déjà de transpiler en JS, donc de là à monter un framework dessus... y'a peut être un manque de volonté de certains acteurs ? Ou bien c'est en dev ou encore un poil trop tôt ? Aucune idée, mais y'a rien de bloquant.


Ben c'est pas vraiment simple de créer un framework de l'envergure de React ou d'Angular.
Y'a énormément de boulot derrière.

Et d'ailleurs, ceux-ci utilisent pas mal de fonctionnalités avancées et "bas niveau" de JS pour fonctionner.
Pas sur que ce soit facile à faire avec une phase de transpilation.

Dans un premier temps, y'a surement moyen de faire plus simple en rendant compatible React avec Kotlin.




> Intégrer des libs JS tierces c'est une autre histoire, mais l'idée serait de s'en passer ou de passer par des wrappers pour les plus populaires d'entre elles.


Ben du coup tu retombes dans le cas du Scala : un beau langage mais un environnement vide.

Et les wrappers, c'est rarement au top.
Je le vois bien dans l'autre sens (code natif Android/iOS => JS) dans le monde Ionic/Cordova.
Si t'as pas une boite qui finance le dev, à part quelques gros projets, ce n'est plus maintenu (ou pas suffisamment) au bout de quelques années.

----------


## TwinBis

Le Kotlin compilé en JS je vois ça surtout comme un moyen de partager une partie de la logique métier entre le front et le back (à des fins de validation des inputs utilisateur sans avoir à contacter le back par exemple).

Du front "UI" en Kotlin JS je n'y crois pas une seconde, l'écosystème ne suivra pas.

----------


## Shinosha

> Ben du coup tu retombes dans le cas du Scala : un beau langage mais un environnement vide.


Mais mais... C'est pas bientôt fini  :Boom:  Ça veut dire quoi avoir un environnement vide ? Pas avoir un support natif pour des libs JS ? À ce moment là beaucoup de langage ont un environnement vide. J'ai pas compris ton exemple. Ionic c'est pas dans l'autre sens ? React -> Natif mobile ?

----------


## Orhin

> Mais mais... C'est pas bientôt fini  Ça veut dire quoi avoir un environnement vide ? Pas avoir un support natif pour des libs JS ? À ce moment là beaucoup de langage ont un environnement vide.


Non mais c'était une petite pique.  ::P: 

Par "environnement vide", j'entend un faible nombre de librairies/framework disponible dans un cas d'utilisation donné.
Le support natif des libs JS, on s'en fout dans la majorité des cas *sauf* si tu veux utiliser ton langage pour faire du front web.

Que tu prennes le JS ou le PHP, y'a un très gros environnement avec plein d'outils/libs/framework matures et faisant le taf.
Que Kotlin puisse se transpiler en JS c'est bien, mais si faut tout réinventer à côté, ça nous fait une belle jambe.

Imagine si, au démarrage de Kotlin, il avait été impossible d'utiliser facilement les libs Java et qu'aucun gros framework ne l'avait supporté directement.
Personne n'aurait utilisé le langage.




> J'ai pas compris ton exemple. Ionic c'est pas dans l'autre sens ? React -> Natif mobile ?


Oui c'est dans l'autre sens, appel de code natif par le JS.
Ça se présente sous forme de plugins qui contiennent le code natif + un wrapper JS.

----------


## Teocali

> Non mais c'était une petite pique. 
> 
> Par "environnement vide", j'entend un faible nombre de librairies/framework disponible dans un cas d'utilisation donné.


Alors, ça, c'est faux. Scala compilant pour la JVM, t'as acès a la librairie standard Java. Si tu considères seulement les librairies codées en Scala, ben, t'as le même souci en Kotlin.

----------


## Orhin

> Alors, ça, c'est faux. Scala compilant pour la JVM, t'as acès a la librairie standard Java. Si tu considères seulement les librairies codées en Scala, ben, t'as le même souci en Kotlin.


Non mais je sais (cf le reste de mon post), c'était un petit troll (réussi).

Surtout que la situation est similaire pour Typescript / Javascript.

----------


## Shinosha

> Non mais c'était une petite pique. 
> Par "environnement vide", j'entend un faible nombre de librairies/framework disponible dans un cas d'utilisation donné.
> Le support natif des libs JS, on s'en fout dans la majorité des cas *sauf* si tu veux utiliser ton langage pour faire du front web.
> 
> Que tu prennes le JS ou le PHP, y'a un très gros environnement avec plein d'outils/libs/framework matures et faisant le taf.
> Que Kotlin puisse se transpiler en JS c'est bien, mais si faut tout réinventer à côté, ça nous fait une belle jambe.


La police de l'internet viendra vous voir pour manquement à l'utilisation d'un emoji. En tout cas oui en Scala on a tout ce qu'il faut, et à part pour des besoins spécifiques genre crypto, on a tout en natif. Y compris un transpiler Scala to JS et les façades aux libs JS connus (dont les framework même si perso j'ai jamais utilisé). Ces façades ne réinventent pas tout comme leur nom l'indique, elles sont similaires aux définitions TS. Pas mal de libs Scala sont aussi cross compiled pour Scala.js. Je sais pas comment c'est en Kotlin par contre, j'imagine que c'est similaire.

Sinon vous avez entendu parler de Unison ? Je sais je sais c'est un dialecte de Haskell, ça fait un peu peur niveau syntaxe, mais si je vous dis :
- Plus besoin de build votre programme si quelqu'un l'a déjà fait avant, hormis les parties que vous avez changé
- Quand on lance les tests ça lance seulement ceux dont le code a changé
- Plus de conflit de dépendance
- Programmation distribuée native
- Refactoring puissant et assisté
- Gestion des dépendance plus fine (je veux juste cette fonction de la lib)

Alors ? Stylé ou pas ? En gros c'est Git ou Nix mais appliqué à un langage. Chaque fonction est lié à un hash de l'AST du code de la dite fonction. Ça constitue littéralement une base de code durable, immuable, partageable et explorable facilement. Bon ok ça cible pas la JVM et c'est pas prod ready, mais c'est très intéressant. Avec Graal et Truffle cela dit la JVM est peut-être pas hors de portée un jour.

----------


## vectra

J'ai pas encore eu trop de réussite sur le topic des expats, alors je viens vous emmerder un peu  ::ninja:: 

75K GBP à Londres, c'est correct ou pas pour un poste de dev C++ scientifique?

----------


## deathdigger

La question c'est : est-ce que t'as envie de vivre à Londres ?
Si oui, pourquoi pas, si non, tu peux trouver un salaire correct en France en te bougeant le fion.

----------


## gros_bidule

Ou bien bosser en télétravail ?
C'est facile de dire de se bouger le f***, mais c'est peut être plus compliqué dans certaines spécialités de l'informatique  :^_^:

----------


## Awake

J'ai trouvé une solution non-mathématique à mon soucis, je supprime du coup.

----------


## FB74

:OO:

----------


## acdctabs

C'est impressionnant le niveau qu'il faut pour être capable de faire ça.

----------


## gros_bidule

On a aussi aujourd'hui des outils qui n'existaient pas à l'époque (matos, et logiciels de dev qui ont énormément évolué, de bons profilers...). Et plus de temps, le mec n'avait probablement pas une deadline serrée pour faire ce qu'il a fait.  :^_^: 
Ca ne diminue en rien le mérite, ça reste super chouette. Mais ce n'est pas si étonnant non plus. Y'a 20 ans, c'était encore la préhistoire côté dev, et pourtant ça a déjà permis de créer des pépites. Je pense que ces devs méritent un respect infini.

----------


## deathdigger

Bon, vraiment, VS2022 m'épate.
Alors il est un poil gourmand et je ne me suis pas encore habitué à l'espèce de lissage des polices, mais alors, sur l'autocomplétion...
Si tu tapes :


```
string inputKeys = "";
foreach (KeyValuePair<string, string> kvp2 in kvp)
     {
          inputKeys += kvp2.Value + ";";
     }
```

Dans la foulée, il va te proposer de taper


```
inputKeys = inputKeys.TrimEnd(';');
```

 ::O:

----------


## Orhin

C'est propre en effet.

Ce qui l'est moins, c'est de ne pas avoir utilisé un "String.Join".  ::ninja::

----------


## deathdigger

> C'est propre en effet.
> 
> Ce qui l'est moins, c'est de ne pas avoir utilisé un "String.Join".


Il aurait fallu que je sache que ça existe  ::ninja::

----------


## FB74

Tu mets pas un string en été ?  :tired:

----------


## deathdigger

> Tu mets pas un string en été ?


non, je mets un String?  ::ninja::

----------


## Ladioss

> Qui choisi un langage JVM pour du front ? Ou plutôt qui fait encore du server side rendering de nos jours ? Cela étant c'est possible de faire ça avec un feeback décent, car Play Framework y arrive par exemple. Sûrement avec du hotswap JVM ou je ne sais quoi.





> Concernant le SSR, tu serais surpris, c'est en phase de retour en grace, notamment avec des solutions comme HTMX. Je sais que de notre coté, vu les contraintes humaines et financière que l'on a, c'est une des solution qu'on explore pour la prochaine refonte de notre front end.


Tombé sur ça il y a quelque temps, j'ai beaucoup rit :
https://www.thoughtworks.com/radar/t...ipid=202203029
J'aime bien ce côté de la tech d'être à la fois un éternel recommencement, mais d'une façon inédite à chaque coup.




> Langage JVM pour du front -> je pense qu'il faut le voir comme un remplaçant de Typescript 
> KT qui transpile en JS ou TS qui transpile en JS, quelle différence ? Si tu préfères Kotlin, elle a son importance. Il manque juste un bon framework équivalent à Angular/React/Vue, et là, tu auras des devs Kotin qui vont se remettre à faire du frontend.


L'histoire et GWT, nodejs, etc nous enseigne que si un jour le marché a un trop-plein de devs Kotlin, et pas assez de devs web, alors inévitablement quelqu'un viendra très vite nous pondre un tel framework. En attendant je vois pas trop la demande pour ça (à un niveau business s'entends - en tant que petit projet tech pour des esprits joueurs et curieux, je suis sûr que quelqu'un bosse déjà sur ça dans son coin).

(après passer direct à la case webassembly... ça oui ça aurait du sens, pourquoi pas)

----------


## Teocali

> Tombé sur ça il y a quelque temps, j'ai beaucoup rit :
> https://www.thoughtworks.com/radar/t...ipid=202203029
> J'aime bien ce côté de la tech d'être à la fois un éternel recommencement, mais d'une façon inédite à chaque coup.


Eh, j'avais pas pensé a ça comme solution pour le mobile, mais c'est vrai que ça a un certain sens, si ton objectif c'est de passer la merde sous le radar des apps store :D

----------


## Robix66

> C'est propre en effet.
> 
> Ce qui l'est moins, c'est de ne pas avoir utilisé un "String.Join StringBuilder".


Fixed.

----------


## deathdigger

Le StringBuilder, je ne l'utilise que lorsque je sais que je vais avoir de grosses strings. Pour des trucs de moins d'une centaine de caractères, je ne sais pas si ça a une utilité.

----------


## Kesitem

Salut!

J'ai une petite question, je me lance dans Python.
Ayant ces dernières années bossé en Java sur Intellij, je suis naturellement parti vers Pycharm.

Mais est-ce le bon choix? Sur pas mal de tuto, je vois plutôt vscode. 
Et Visual Studio Community, ça vaut quoi pour le Python?

J'ai d'ailleurs rencontré quelques problèmes sur l'inclusion des modules dans Pycharm alors que le code passe crème avec vscode (dans le même env).

----------


## GrandFather

Pour l'utiliser depuis des années sur des projets Python 3/Qt, PyCharm me convient parfaitement. Il intègre parfaitement les Venv.

----------


## Foksadure

En IDE Python léger, il y a Thonny : https://thonny.org/

----------


## Kesitem

Bon, je vais préserver avec PyCharm. Les erreurs que j'ai rencontré sont certainement liées à des problèmes de configuration. Je vais creuser pour comprendre.

Thonny me parait un peu trop léger pour moi: j'aime bien les charentaises que constituent les outils Jetbrains  ::):

----------


## MilouseVH

J'utilise Sublime, quand l'envie me prend de faire du python : https://www.sublimetext.com/
C'est pas un IDE, c'est plutôt un éditeur de texte avancé. Mais l'intégration python est bonne (selon moi), et l'éditeur est hyper sympa.

----------


## Kesitem

Ah non même chose que pour Thonny, pour les petits projets je suis habitué à vs code + les extensions qui vont bien.

La, je commence petit (c'est pour l'instant une petite webapp interne utilisant FastAPI et une base de donnée PG qui tape sur un UEM pour faire des stats), mais ça devrait grossir assez rapidement.

Et j'avoue que le confort d'un IDE un peu plus velu est toujours le bienvenu à un moment donné.

D'ailleurs, j'ai résolu mes problèmes avec PyCharm (le projet avait été créé avec vscode et à l'import dans pycharm, la config était un peu bancale).

Merci pour vos retours en tout cas!

En tout cas, j'ai été con pendant tout ce temps, j'avais de gros à priori sur Python et finalement j'adore.
J'espère pouvoir continuer mon projet avec ce langage et pas devoir revenir à Java (filière principale de dev chez nous, la filière Python est expérimentale).

----------


## Foksadure

Il a fallu que je cherche pour savoir ce qu'était un UEM en dehors des Universités des Entrepreneurs Mayennais.  ::P: 




> Et j'avoue que le confort d'un IDE un peu plus velu est toujours le bienvenu à un moment donné.


Tu peux développer (sic) ?

Pour du dev solo de trucs "simples" avec un langage de script haut-niveau comme Python, quel est l'intérêt concret qui justifie la nécessité d'un IDE pesant +300Mo, lourd et lent, là où un éditeur de texte plus ou moins évolué suffit (je rejoins MilouseVH sur Sublime) ?

----------


## MilouseVH

> La, je commence petit (c'est pour l'instant une petite webapp interne utilisant FastAPI et une base de donnée PG qui tape sur un UEM pour faire des stats), mais ça devrait grossir assez rapidement.


Kamoulox
Tu m'a perdu à fastAPI  ::): . Mais je ne suis pas un initié de ce genre de choses, je fais surtout du dèv embarqué.




> Pour du dev solo de trucs "simples" avec un langage de script haut-niveau comme Python, quel est l'intérêt concret qui justifie la nécessité d'un IDE pesant +300Mo, lourd et lent, là où un éditeur de texte plus ou moins évolué suffit (je rejoins MilouseVH sur Sublime) ?


La réponde est là, je pense  :;):  : "*j'aime bien les charentaises*".
En vrai, je cite Sublime à chaque occasion au boulot, car c'est un super éditeur pour moi. mais chacun a ses préférences.

----------


## Kesitem

> Tu peux développer (sic) ?
> 
> Pour du dev solo de trucs "simples" avec un langage de script haut-niveau comme Python, quel est l'intérêt concret qui justifie la nécessité d'un IDE pesant +300Mo, lourd et lent, là où un éditeur de texte plus ou moins évolué suffit (je rejoins MilouseVH sur Sublime) ?


C'est un projet voué à s'industrialiser rapidement (d'ailleurs la semaine prochaine, il faut que je le dockerise, je n'ai pas encore fait, va falloir que je prenne le temps de le faire correctement) et on a déjà une petite une liste de fonctionnalités à ajouter.
On travaille déjà à deux dessus (un collègue à la base pas développeur, mais qui progresse à la vitesse de l'éclair!).
Alors, les fonctionnalités comme le refactoring avancé, l'intégration de GIT, etc... me facilitent la tâche surtout en venant d'IntelliJ. Je suis en terrain connu.

Après, je suis d'accord avec vous, sur les petits projets perso, j'ai mes habitudes avec vscode, je n'ai pas besoin d'un truc plus gros.

----------


## TarteAuxFleurs

> Il a fallu que je cherche pour savoir ce qu'était un UEM en dehors des Universités des Entrepreneurs Mayennais. 
> 
> 
> 
> Tu peux développer (sic) ?
> 
> Pour du dev solo de trucs "simples" avec un langage de script haut-niveau comme Python, quel est l'intérêt concret qui justifie la nécessité d'un IDE pesant +300Mo, lourd et lent, là où un éditeur de texte plus ou moins évolué suffit (je rejoins MilouseVH sur Sublime) ?


En utilisant un IDE même pour des petites tâches tu as le confort d'un outil qui augmente ta productivité.

----------


## vectra

Tout dépend de ce que vous aspirez à faire. Si vous n'êtes pas dev, ou si vous ne travaillez que sur des "petits" projets, vous pouvez sans grosse contrainte rester sur un éditeur léger comme VsCode ou Sublime, le premier étant d'ailleurs parfois utilisable comme un IDE complet si j'en crois mes collègues (mais là c'est plutôt "tout sauf Visual Studio" l'idée).
Si vous devez reprendre des projets gros, avec plein de code, là vous risquez de prendre dans la figure les limitations des éditeurs. Avec obligation d'abandonner vos charentaises et d'apprendre from scratch un IDE étranger.

Investir dans du Jetbrains, c'est pas une mauvaise idée. T'en connais un, tu les connais presque tous et tu peux transporter ta config de l'un à l'autre. J'ai connu personne qui m'ait parlé de limitations de Jetbrains, personnellement.

----------


## acdctabs

Moi j'aime beaucoup PHPStorm en tout cas mais je ne dois même pas l'exploiter à 10% de ce qu'il sait faire.

----------


## war-p

> Tout dépend de ce que vous aspirez à faire. Si vous n'êtes pas dev, ou si vous ne travaillez que sur des "petits" projets, vous pouvez sans grosse contrainte rester sur un éditeur léger comme VsCode ou Sublime, le premier étant d'ailleurs parfois utilisable comme un IDE complet si j'en crois mes collègues (mais là c'est plutôt "tout sauf Visual Studio" l'idée).
> Si vous devez reprendre des projets gros, avec plein de code, là vous risquez de prendre dans la figure les limitations des éditeurs. Avec obligation d'abandonner vos charentaises et d'apprendre from scratch un IDE étranger.
> 
> Investir dans du Jetbrains, c'est pas une mauvaise idée. T'en connais un, tu les connais presque tous et tu peux transporter ta config de l'un à l'autre. J'ai connu personne qui m'ait parlé de limitations de Jetbrains, personnellement.


Mais si, "IntelliJ c'est nul face à <insérer ici n'importe quel éditeur de texte moisi ou eclipse>, c'est super lent et on peu rien faire avec et ça bug"
Je grossi à peine le trait.

----------


## Teocali

> Mais si, "IntelliJ c'est nul face à <insérer ici n'importe quel éditeur de texte moisi ou eclipse>, c'est super lent et on peu rien faire avec et ça bug"
> Je grossi à peine le trait.


Aloooors... Autant, pour l'editeur de texte, je peux comprendre (J'utilise très souvent mon Sublime Text pour de la simple edition de texte), autant pour eclipse, le pekin qui te sort ça est pétri de mauvaise foi

----------


## acdctabs

Pour utiliser Éclipse par obligation (une version ancienne en +), je ne vois pas comment un IDE pourrait être pire.

----------


## Kesitem

Pareil, je suis passé il y a 4 ans d'une vieille version d'Eclipse (aussi par obligation) à IntelliJ, c'était du bonheur!

----------


## vectra

IntelliJ, le souci, c'est que ça repose sur du Java. Donc oui, c'est pas des plus rapide/économe en mémoire, mais une fois allouées les ressources qui vont bien, ça passe. La conso CPU va essentiellement dépendre du niveau d'inspection du code (clang chez les trve), mais c'est pas obligé de la laisser active tout le temps. Ca rend de gros, gros services aussi, l'inspection.

C'est sûr qu'un éditeur de texte est plus rapide, mais il ne fait pas la même chose.

----------


## war-p

> Aloooors... Autant, pour l'editeur de texte, je peux comprendre (J'utilise très souvent mon Sublime Text pour de la simple edition de texte), autant pour eclipse, le pekin qui te sort ça est pétri de mauvaise foi


Ah mais complètement, et quand je disais ça, forcément :"oui mais eclipse c'est gratuit".



> Pour utiliser Éclipse par obligation (une version ancienne en +), je ne vois pas comment un IDE pourrait être pire.





> Pareil, je suis passé il y a 4 ans d'une vieille version d'Eclipse (aussi par obligation) à IntelliJ, c'était du bonheur!


Obligation d'utiliser Eclipse? Sur une version autre que la dernière? C'est un motif pour poser une dem ça.

----------


## Kesitem

> Ah mais complètement, et quand je disais ça, forcément :"oui mais eclipse c'est gratuit".
> 
> 
> 
> Obligation d'utiliser Eclipse? Sur une version autre que la dernière? C'est un motif pour poser une dem ça.


J'ai changé de service (l'avantage d'être informaticien et fonctionnaire).
Bon après, le move était pas malin (je suis parti sur le pire projet que j'ai jamais vu. Une sorte d'encyclopédie des mauvaises pratiques, un truc de dingue. Le pire c'est qu'il tourne encore en prod).

----------


## Teocali

> Ah mais complètement, et quand je disais ça, forcément :"oui mais eclipse c'est gratuit".


Ce à quoi je réponds généralement que la version community d'Intellij aussi, et elle est déjà bien plus puissante que Eclipse ne peut l'être.
et que de toute façon, Eclipse n'est pas gratuit, vu le temps en plus qu'il coûte aux dev. et le temps, c'est de l'argent.

Après, on sort du sujet : Eclipse ne peut pas être plus rapide que Intellij. Pretendre ceci, c'est soit ne pas connaitre son sujet, soit être d'une telle mauvaise foi que ça doit être une des sources du déréglement climatique.

----------


## Kamikaze

Ouais je suis aussi du côté IntellJ. 

Généralement le meilleur moyen de mettre fin à toute discussion, de mon expérience, c'est simplement de comparer l'efficacité avec l'outil. Le worflow. Lors d'une session à plusieurs sur un exemple concret.

J'ai eu des mecs qui programment sous vi, des mecs sous eclipse, des mecs sous VS code. Ils me disent, "ouais ouais ça marche bien, j'en suis content", etc.

Puis je leur fait une démo, genre en reprennant le code sur lequel ils bossent ou via un code d'example, un exo.

En 2 min ils sont convaincus, la plupart n'ont pas de résolution de contexte propre, donc genre renommer une variable (ou un fichier, un namespace, une classe, etc. etc.) proprement (en propageant bien) c'est une aventure pour eux.
Naviguer le code aussi c'est une catastrophe pour eux, avec IntellJ tu sautes de fichier en fichier, tu peux naviguer vers l'arrière, etc.
Aussi la résolution de dépendance automatique, les mecs sur vi prétendent parfois qu'ils vont plus vite (avec 1'000 plugins qu'ils ont la flemme d'installer), mais avec IntellJ si je veux taper un truc du genre




> #include <format>
> #include <iostream>
> 
> int main() {
>     std::cout << std::format("Hello {}!\n", "world");
> }


Bah je peux taper sur les doigts d'une main le nombre de frappes que je vais faire, ça va être genre

std::c[tab] << std::f[tab]("Hello...

Ensuite ALT + ENTER et paf j'aurais la complétion des dépendances et c'est fini

Bon là c'est un exemple bidon avec la librairie standard, mais dans un projet inconnu c'est surpuissant.

De même l'extension automatique des macros avec CTRL+Q, la documentation depuis les librairies, etc. etc.

Toute l'analyse statique de code pendant que tu tapes. Super important pour développer rapidement et proprement

Genre y'a tellement pas photos que dans ma boite précédente ils ont fini par payer la license pour tout le monde, et c'est pas si cher que ça, le prix réduit chaque année dès que tu renouvelles.
Ca fait genre je sais plus, une dizaine d'euros par mois selon la license (all product, juste un seul, etc.)

Et y'a beaucoup d'autres exemple, intégration de git, interface graphique pour merge, customization de la GUI tu peux changer la police partout, développement remote, interface graphique pour le debugger, etc.

Y'a tout ce qui faut au même endroit.

Et c'est certes pas parfait mais ils s'améliorent d'année en année et communiquent clairement sur les améliorations à venir.
Les bugs sont publics et on peut voter pour les priorités

----------


## vectra

trve.

Par contre, ce qui est détestable (en l'état actuel de mes connaissances), ce sont les macros clavier.
C'est assez facile à enregistrer sous emacs, et ça tourne aussi vite qu'une fonction native. Sous IntelliJ, non. Mais genre, vraiment, tu vois les commandes s'exécuter péniblement à l'écran. 

J'en ai besoin de quelques unes, pas plus (vu comme l'IDE est de base pourvu de fonctions puissantes), mais ces dernières sont trop lentes. J'ai vu qu'on pouvait compiler des modules pour ce faire, faut que je m'y mette...

----------


## FB74

> Pour utiliser Éclipse par obligation (une version ancienne en +), je ne vois pas comment un IDE pourrait être pire.


Le truc qui barbouille en rouge ton code source quand tu t'absentes 5 minutes sans rien toucher ?  ::ninja:: 

 ::P:

----------


## acdctabs

Bon de toute façon je quitte cet été, ça ne sera plus qu'un mauvais souvenir avant de trouver un autre truc pourri ailleurs  ::):

----------


## William Vaurien

Pour impressionner un radical de vi ou emacs il y a le structural "search and replace" qui est très violent comme outil d'intellij (même si pas très documenté). 
(https://www.jetbrains.com/help/idea/...h_structurally).

Par exemple nous devions revoir tous nos tests avec des mocks pour inverser un appel chaîné de méthode. 
Les appels de ce genre:
- when(mockInstance.mockedMethod(arg1, arg2, ..., arg n)).thenReturn(mockedResult)

devaient être réécris sous la forme:
- doReturn(mockedResult).when(mockInstance).mockedMe  thod(arg1, arg2, ..., arg n)


Avec le structural search and replace le truc à été fait 'rapidement' (en gros 1 petite heure pour retrouver la bonne syntaxe car j'utilise pas tout le temps cette fonction et que j'ai farfouillé un peu dans la doc: IntelliJ peut comprendre la structure du code et là ça devient très puissant, il y a pas mal d'exemples fournis). 
Bon déjà ça devient un peu compliqué à faire avec vi ou emacs (surtout pour gérer les paramètres...). J'imagine que c'est possible de faire ça avec un plugin et des regexp mais ça calme déjà un peu.

Et en bonus, il suffit de dire à intellij que tu veux transformer cette recherche en inspection de code, et maintenant un warning est généré automatiquement quand du code correspond à la recherche, et une résolution automatique (utilisant la partie 'replace') est suggérée par Intellij.

Là généralement il y a abandon par ko  ::):

----------


## Kesitem

> Le truc qui barbouille en rouge ton code source quand tu t'absentes 5 minutes sans rien toucher ?


Ok, c'est vraiment le truc chiant avec IntelliJ.

----------


## war-p

> trve.
> 
> Par contre, ce qui est détestable (en l'état actuel de mes connaissances), ce sont les macros clavier.
> C'est assez facile à enregistrer sous emacs, et ça tourne aussi vite qu'une fonction native. Sous IntelliJ, non. Mais genre, vraiment, tu vois les commandes s'exécuter péniblement à l'écran. 
> 
> J'en ai besoin de quelques unes, pas plus (vu comme l'IDE est de base pourvu de fonctions puissantes), mais ces dernières sont trop lentes. J'ai vu qu'on pouvait compiler des modules pour ce faire, faut que je m'y mette...


En java, non c'est instant.
Après ce que j'apprécie, ce sont les plugins et le fait de pouvoir dev avec pas mal de langage juste avec IntelliJ (genre python, rust, java, docker, markdown, html, javascript, typescript etc...)

- - - Mise à jour - - -




> Le truc qui barbouille en rouge ton code source quand tu t'absentes 5 minutes sans rien toucher ?


Non, ça c'est éclipse quand tu essaie de recompiler ton projet et que, tu sais pas pourquoi, mais il ne connait plus java.  ::ninja::

----------


## gros_bidule

Ca le faisait aussi sous IntelliJ avec Gradle pendant quelques temps, mais c'est sensé être réglé  ::): 

Pour les macros, si c'est lent, faut pas hésiter à ouvrir un ticket sur youtrack, car ce n'est pas normal  :;):

----------


## Garrluk

> Pour impressionner un radical de vi ou emacs il y a le structural "search and replace" qui est très violent comme outil d'intellij (même si pas très documenté). 
> (https://www.jetbrains.com/help/idea/...h_structurally).
> 
> Par exemple nous devions revoir tous nos tests avec des mocks pour inverser un appel chaîné de méthode. 
> Les appels de ce genre:
> - when(mockInstance.mockedMethod(arg1, arg2, ..., arg n)).thenReturn(mockedResult)
> 
> devaient être réécris sous la forme:
> - doReturn(mockedResult).when(mockInstance).mockedMe  thod(arg1, arg2, ..., arg n)
> ...




```
when(mockInstance0.mockedMethod0(arg01, arg02, ..., arg 0n)).thenReturn(mockedResult0)
when(mockInstance1.mockedMethod1(arg11, arg22, ..., arg 1n)).thenReturn(mockedResult1)
```



```
%s/when(\(.\{-}\)\.\(.\{-}\)(\(.\{-}\))).thenReturn(\(.\{-}\))/doReturn(\4).when(\1).\2(\3)
```



```
doReturn(mockedResult0).when(mockInstance0).mockedMethod0(arg01, arg02, ..., arg 0n)
doReturn(mockedResult1).when(mockInstance1).mockedMethod1(arg11, arg22, ..., arg 1n)
```

Je ne dis pas que c'est facile (il m'a fallu ~10min pour taper ça en mangeant), mais ça se fait quand même bien juste avec les regex, pas besoin de plug-in pour ça.
Et la syntax est un peu dégueulasse par contre, mais bon, avec les regex c'est jamais très lisible.

----------


## gros_bidule

Dites, il y a des pros de Kunbernetes et de Helm (v2, mais je pourrai adapter de v3 si besoin) dans le coin(coin) ?

Voici mon soucis :

on a un helm chart qui nous sert à déployer 3 services. 
Ils sont tous indépendants, mais sont dans le même chart (ne me demandez pas pourquoi, erreur de jeunesse peut être, enfin bon).
Je voudrais les redéployer dans un nouveau namespace. Mais je voudrais avant tout désinstaller juste un des services, pour l'installer sur le nouveau namespace et faire des tests (pour voir comment migrer des données, etc).

Soucis : les 3 services sont dans le même chart, et ont le même nom de release (disons re-coin : installés avec _helm upgrade -i re-coin ..._). Je ne vois absolument pas comment désinstaller un service sans tout désinstaller.
La commande _helm delete_ (ou _helm uninstall_ en helm v3) prend le nom de la release, puis voilà, on ne peut pas choisir un service en particulier.

Donc mon idée, et je souhaiterais avoir votre avis, sachant que l'on peut se permettre un downtime. Rien de critique, si je fais ça dans la journée c'est bon :

- splitter mon helm chart pour avoir un chart par service. Ca fera 3 charts, chacun dépoyé avec son propre nom de release. Comme ça le jour où je dois à nouveau changer de namespace, ça ne posera pas de soucis
- je déploie ces nouveaux charts dans le nouveau namespace. Ce n'est pas grave si à un moment donnée les services sont actifs dans l'ancien et le nouveau namespace
- je teste mes trucs dans le nouveau namespace
- quand j'estime que c'est testé, je désinstalle le chart de l'ancien namespace
- joie ?

---

Aute question: idéalement, je souhaiterais arrêter les services du vieux namespace avant de tester dans le nouveau (arrêter, vu que je ne peux désinstaller un seul service. Le résultat serait le même et ça m'arrangerait). Pas obligatoire, mais ça serait un plus.
J'ai donc essayé de downscaller le nombre de replicas d'un service à 0. Ca dit ok, et marche effectivement 2s (0/1 instance en vie pour mon pod), puis kubenetes recrée un replica  :^_^: . J'ai fais un _kubectl scale --replicas=0 -n mon-namespace rs leReplicaset_. Je m'y prends mal ?

Merci !

(PS je suis encore débutant avec k8s et helm, donc je dis peut être des énormités)

----------


## gros_bidule

rhaa, je pense avoir mieux. Ca arrive toujours 2min après avoir posé la question sur CPC  :^_^:  

je peux refaire un _helm upgrade -i re-coin_ avec un helm chart dans lequel je retire mon service (je le mets en commentaire dans mon requirements.yaml je pense) ? Ca devrait le désinstaller ?
Je veux dire :
- la release re-coin est installée et a les 3 services
- je met à jour la release re-coin en ne définissant plus que 2 services
- après application de la mise à jour, helm aura désinstallé le service qui n'est plus définit ?
j'ai bon ?

[edit]
Trouvé, je peux désactiver des services dans le helm chart (enabled à false dans le values.yaml). Ca retire bien les instances que je veux  :Cigare:

----------


## William Vaurien

> ```
> when(mockInstance0.mockedMethod0(arg01, arg02, ..., arg 0n)).thenReturn(mockedResult0)
> when(mockInstance1.mockedMethod1(arg11, arg22, ..., arg 1n)).thenReturn(mockedResult1)
> ```
> 
> 
> 
> ```
> %s/when(\(.\{-}\)\.\(.\{-}\)(\(.\{-}\))).thenReturn(\(.\{-}\))/doReturn(\4).when(\1).\2(\3)
> ...


oui, mais tu n'as pas la détection avec surlignage et correction automatique enregistré dans l'IDE pour la suite... 
C'est un chercher/remplacer glorifié, donc c'est sûr que ça ressemble à ce qu'on peut faire avec des regex, juste un peu plus puissant avec la notion de structure de code accessible sous forme de langage.

Et c'est juste un exemple assez basique ce truc d'inversion de code, les possibilités vont  bien au delà...
et la syntaxe est litérallement 
"when($mockInstance$.$mockedMethod$($arg)).thenRet  urn($mockedResult$)" avec une option pour dire que $arg$ c'est un vararg. 

Ce qui est plus claire qu'une regexp.
voir exemple officiel qui transforme des system.println en log:
https://www.youtube.com/watch?v=fIPr...DEAbyJetBrains

Après c'est clairement pas le truc qui me sert tous les jours, mais c'est clairement un cran au dessus du chercher remplacer par regex.

----------


## war-p

Faudra que je teste ce truc du démon  :tired:

----------


## gros_bidule

Y'a peut être une initiation via le plugin *IDE Features Trainer* ? 
Au passage, très bon plugin si tu veux être un peu guidé dans ta découverte de l'IDE.
Le *IDEA Feature Suggester* semble aussi intéressant.

----------


## Cwningen

Ça va elle reste lisible cette regex. La limitation des regex dans vim c'est surtout d'être limité à une seule ligne. Ou si tu as besoin de matcher des parenthèses ou autres ce qui n'est pas possible avec des regex.

----------


## Garrluk

> oui, mais tu n'as pas la détection avec surlignage et correction automatique enregistré dans l'IDE pour la suite... 
> C'est un chercher/remplacer glorifié, donc c'est sûr que ça ressemble à ce qu'on peut faire avec des regex, juste un peu plus puissant avec la notion de structure de code accessible sous forme de langage.
> 
> Et c'est juste un exemple assez basique ce truc d'inversion de code, les possibilités vont  bien au delà...
> et la syntaxe est litérallement 
> "when($mockInstance$.$mockedMethod$($arg)).thenRet  urn($mockedResult$)" avec une option pour dire que $arg$ c'est un vararg. 
> 
> Ce qui est plus claire qu'une regexp.
> voir exemple officiel qui transforme des system.println en log:
> ...


En fait si j'ai besoin d'un truc plus compliqué qu'une regexp pour du refactoring, je sors clang-tidy qui fait ça très bien.
Mais je pense qu'il ne faut pas comparer vim à un IDE, ce n'est pas vraiment le cas. On peut sans doute le transformer en IDE en installant des milliers de plugins qui vont le rendre lourd et buggué mais ce n'est pas nécessaire.
La façon dont je vois les chose c'est que mon "IDE" c'est la console (c'est pas vraiment intégré, donc c'est pas un IDE non plus), vim c'est juste un éditeur de texte qui propose des binding vi (mais n'importe quel IDE correct a un plugin pour faire la même chose).
Et quand j'ai besoin du faire du search and replace ou du refactoring sur tout un projet, je n'essaie pas de trafiquer vim pour qu'il sache le faire, j'utilise directement des outils qui existent déjà. Ça peut être clang-tidy, sed, find, grep ou n'importe quoi d'autre.

Je pense que c'est une différence de logique dans la façon d'utiliser le PC, et je pense que le fait que tu mettes un lien youtube pour illustrer ton exemple alors qu'il existe un lien texte tout aussi officiel (ici : https://www.jetbrains.com/help/idea/...d-replace.html) le montre bien  ::): .
Après c'est pas du tout une critique, chacun fait comme il veut, l'essentiel c'est de ne pas être limité par les outils qu'on utilise  ::): .

----------


## vectra

C'est bien que tu parles des 50 000 plugins pour un éditeur.
Le principe de l'IDE, c'est qu'ils sont intégrés, comme le nom l'indique. Donc déjà là, testés, rapides, fonctionnels, et complètement intégrés au à l'interface comme à l'API.

Ca permet d'aller taper de suite dans le code plutôt que de passer du temps à se créer un IDE custom à partir d'un éditeur, et de le maintenir. C'est un service qu'on achète.

Si tu vas sur emacs par exemple, y'a des milliers de plugins pour tout, littéralement. Bien plus de fonctions et de possibilités que IntelliJ + la somme des plugins. La différence, c'est que l'assemblage est branlant et instable, ou alors extrêmement long à réaliser. Franchement, Spacemacs, c'est long au démarrage et pas convaincant une fois lancé. C'est amusant de voir le niveau de customisation possible, mais faut bosser des fois, aussi.

----------


## William Vaurien

> et je pense que le fait que tu mettes un lien youtube pour illustrer ton exemple alors qu'il existe un lien texte tout aussi officiel (ici : https://www.jetbrains.com/help/idea/...d-replace.html) le montre bien .
> Après c'est pas du tout une critique, chacun fait comme il veut, l'essentiel c'est de ne pas être limité par les outils qu'on utilise .


Bon en fait je déteste youtube pour tout ce qui est apprentissage, je suis partisan du bon vieux tuto à l'ancienne avec texte et screenshot. (Par contre je suis allergique au format 'man'...). J'ai juste été flemmard et consensuel en prenant le premier lien qui traîne. Donc ton analogie n'est pas terrible.

J'ai 2 vieux allergiques aux IDE dans mon équipe: ils font du C et utilisent principalement la console et vi. J'ai essayé de leur montrer les avantages d'un IDE, mais ça n'a pas pris. Ils ne voient pas l'intérêt d'avoir de la navigation dans le code ou du refactoring. Ils font du chercher/remplacer textuel et se bricolent des filtres avec sed. De même la coloration syntaxique est presque un gadget pour eux (ça sert juste pour les mots clefs du langage).
Au final ils sont autant efficace que les autres, mais leur code reflète aussi cette manière de travailler: par exemple beaucoup de grosses méthodes (donc pas besoin de voir qui utilise quoi, une recherhce suffit), idem le refactoring est compliqué voir impossible, il y a aussi beaucoup de copier/coller... Ils n'ont pas de warning ou d'analyse static et de suggestion de corrections en live... En revanche ils ont une très bonne mémoire et vision globale de leur code. Ils savent rapidement trouver tel out tel bout de code, alors que je vais plutôt utiliser la fonction de recherche de l'IDE pour naviguer dans le code.


Je ne dit pas que vi les amène à travailler comme ça, plutôt qu'ils travaillent comme ça et avec vi depuis tellement de temps qu'ils ont câblé en dur cette manière de faire., et moi aussi j'aurais du mal sans IDE (et j'aurais du mal avec un autre IDE que celui que je connais bien). Et comme pour word je ne dois utiliser que 10% de l'IDE tellement c'est blindé d'outils en tout genre. Et mes collègues utilisent chacun 10% différents du même IDE.

Ta comparaison avec l'OS est assez juste: pour moi l'IDE est un OS: je fais quasiment tout dedans. Et il faut reconnaître que certains outils qu'il propose sont vraiment puissant (même si je n'en utilise qu'une toute petite partie). Le fait de pouvoir se créer des pattern d'analyse static (c'est ce que fait le structural search and replace) ou des lives templates (des macros/générateur de code contextuelles capables de comprendre la structure du code) font partie de ces outils puissant: ces même collègues refractaires viennent parfois demander de l'aide pour faire un truc qu'ils pourraient bricoler mais qu'il est plus confortable de faire dans un IDE.

----------


## Kamikaze

Ouais justement pour moi c'est inacceptable que l'outil dicte la qualité du code source.

Le code source doit être lisible facilement, le plus simple et clair possible. Ce que tu décris avec vi c'est aussi quelque chose que j'ai vu, des astuces textuelles (genre du ASCII art) pour mieux naviguer dans le code, des conventions de nommage dégueulasse, avoir de longue fonction n'est pas acceptables. J'ai aussi vu des mecs réduire le nombre de fichier et dossier (et donc aggréger une tonne de code au même endroit) "parce que c'est dur de navigue dans vi".

Vu que parfois ils ont pas de résolution de contexte il savent pas d'où vient une variable donnée (locale, membre, globale?) du coup ils font n'importe quoi. Alors qu'un IDE te donner une coloration syntaxique comprenant le contexte.

Bref, franchement y'a pas débat, quand tu mets un mecs de ce genre en face d'un problème donné, tu compares la vitesse de résolution et la qualité du produit fini, y'a pas photo. Le mec qui sait se servir de son IDE aura un truc de meilleur qualité et plus vite.

----------


## Cwningen

> Ouais justement pour moi c'est inacceptable que l'outil dicte la qualité du code source.
> 
> Le code source doit être lisible facilement, le plus simple et clair possible. Ce que tu décris avec vi c'est aussi quelque chose que j'ai vu, des astuces textuels (genre du ASCII art) pour mieux naviguer dans le code, des conventions de nommage dégueulasse, avoir de longue fonction n'est pas acceptables. J'ai aussi vu des mecs réduire le nombre de fichier et dossier (et donc aggréger une tonne de code au même endroit) "parce que c'est dur de navigue dans vi".
> 
> Vu que parfois ils ont pas de résolution de contexte il savent pas d'où vient une variable donnée (locale, membre, globale?) du coup ils font n'importe quoi.
> 
> Bref, franchement y'a pas débat, quand tu mets un mecs de ce genre en face d'un problème donné, tu compares la vitesse de résolution et la qualité du produit fini, y'a pas photo. Le mec qui sait se servir de son IDE aura un truc de meilleur qualité et plus vite.


J'utilise beaucoup vim/neovim (mais pas vi désolé), et c'est tout le contraire : je ne supporte pas les fichiers trop longs, il faut que tout soit bien rangé à sa place.

----------


## vectra

Les situations décrites par Kamikaze et William, c'est un peu la 4ème dimension. On peut attendre ça de chercheurs ou de gens qui ne sont pas des pros de l'informatique, mais sinon c'est juste pas possible. Dans une base de code moderne, ils ne peuvent pas merger, s'tout.

Et cette idée d'apprendre par coeur la structure simplifiée de leur code pour se repérer, je ne vois pas comment tu peux faire ça dans le monde professionnel normal. Ce n'est déjà pas acquis que tu puisses commencer des projets from scratch, encore moins que tu sois seul à y bosser. Et ce sont des euphémismes.

----------


## William Vaurien

Tu prends des devs qui ont commencé à bosser au début des années 90 et qui sont resté en vase clos, sont les chefs de projet de leur logiciel et tu arrives dans cette quatrième dimension...
J'ai bien conscience que d'ici une dizaine/quinzaine d'année c'est moi qui serait à la même place avec mon IDE du temps passé et ma méthodologie surané. 
J'utilise déjà un langage sur le "déclin"...

J'avais oublié les conventions de nommage: il y a ça aussi dans le projet: chaque source commence par un code à 2 lettres pour les ranger par "fonction" (et donc pour pouvoir naviguer plus vite).

----------


## war-p

> Les situations décrites par Kamikaze et William, c'est un peu la 4ème dimension. On peut attendre ça de chercheurs ou de gens qui ne sont pas des pros de l'informatique, mais sinon c'est juste pas possible. Dans une base de code moderne, ils ne peuvent pas merger, s'tout.
> 
> Et cette idée d'apprendre par coeur la structure simplifiée de leur code pour se repérer, je ne vois pas comment tu peux faire ça dans le monde professionnel normal. Ce n'est déjà pas acquis que tu puisses commencer des projets from scratch, encore moins que tu sois seul à y bosser. Et ce sont des euphémismes.


Des scientifiques/data scientist qui font du python : le neuvième cercle de l'enfer  :ouaiouai:

----------


## Nilsou

> Des scientifiques/data scientist qui font du python : le neuvième cercle de l'enfer


Oui.

Mais n'est-ce pas le python lui même le 9ème siècle de l'enfer ?  ::ninja::

----------


## war-p

> Oui.
> 
> Mais n'est-ce pas le python lui même le 9ème siècle de l'enfer ?


Si aussi  ::ninja::

----------


## vectra

Vous me l'ôtez de la bouche.

----------


## Kamikaze

Lol alors le 10ème cercle c'est des matheux qui programment en VBA, jamais vu une merde pareille

On en était au stade où les mecs ne connaissait pas la notion de "fonction", du coup quand ils ont besoin d'un truc il le copie colle (genre tout le code en question)

Pas de source version control aussi, c'est sauvé en local sur le pc, donc si tu veux partager la nouvelle version faut l'envoyer (par mail) à tout le monde

J'imagine le bonheur quand il faut résoudre un merge par mail interposé

----------


## vectra

Pourtant les matheux, ça aime bien dériver des fonctions  ::P: ouêt:

J'ose pas imaginer. Une seule fois dans ma vie, j'ai vu quelqu'un au taf à qui j'ai dû expliquer qu'il fallait faire des fonctions.
C'était quelqu'un en reconversion pro, et dans les années 90 en plus.

----------


## Nilsou

Vous allez en voir de plus en plus, vu le niveau des étudiants qu'on récolte en post bac là, je vous dit pas le niveau à la sortie, vous allez rigoler aux embauches dans quelques années  ::trollface::

----------


## FB74

> In this video, I utilized artificial intelligence to generate an animated music video for the song Canvas by Resonate. 
> *This tool allows anyone to generate beautiful images using only text as the input*. 
> My question was, what if I used song lyrics as input to the AI, can I make perfect music synchronized videos automatically with the push of a button?

----------


## Lazyjoe

> Des scientifiques/data scientist qui font du python : le neuvième cercle de l'enfer


Utiliser un outil python pour faire de la réécriture automatique de code Fortran, c'est situé dans quel cercle ?  ::ninja::

----------


## war-p

> Utiliser un outil python pour faire de la réécriture automatique de code Fortran, c'est situé dans quel cercle ?


Tu veux dire du code python qui utilise des librairies écrites en fortran?  ::ninja::

----------


## Lazyjoe

> Tu veux dire du code python qui utilise des librairies écrites en fortran?


Ca existe ça des gens qui écrivent des libs en fortran ?  ::ninja:: 

Non je parle bien de transformer le code, à la sortie on a un code Fortran pur jus.  ::P:

----------


## Nilsou

C'est des matheux qui ne s'assument pas. Apprendre le Fortran c'est pas vraiment d'une difficulté folle ^^.

----------


## Thelann

> Des scientifiques/data scientist qui font du python : le neuvième cercle de l'enfer


T'inquiètes, on laisse les pro coder pour de vrai et on fait juste un import la_solution_à_mon_probleme suivit de solve(problem) et ça roule tout seul !

----------


## FB74

> C'est des matheux qui ne s'assument pas. Apprendre le Fortran c'est pas vraiment d'une difficulté folle ^^.


Remarque les ukrainiens de 8 ans ont le niveau en maths des français de 11 ans, donc la relève est assurée.  ::ninja::

----------


## rOut

> Ouais justement pour moi c'est inacceptable que l'outil dicte la qualité du code source.
> 
> Le code source doit être lisible facilement, le plus simple et clair possible. Ce que tu décris avec vi c'est aussi quelque chose que j'ai vu, des astuces textuelles (genre du ASCII art) pour mieux naviguer dans le code, des conventions de nommage dégueulasse, avoir de longue fonction n'est pas acceptables. J'ai aussi vu des mecs réduire le nombre de fichier et dossier (et donc aggréger une tonne de code au même endroit) "parce que c'est dur de navigue dans vi".
> 
> Vu que parfois ils ont pas de résolution de contexte il savent pas d'où vient une variable donnée (locale, membre, globale?) du coup ils font n'importe quoi. Alors qu'un IDE te donner une coloration syntaxique comprenant le contexte.
> 
> Bref, franchement y'a pas débat, quand tu mets un mecs de ce genre en face d'un problème donné, tu compares la vitesse de résolution et la qualité du produit fini, y'a pas photo. Le mec qui sait se servir de son IDE aura un truc de meilleur qualité et plus vite.


Alors qu'en vrai ça n'a rien à voir avec l'outil. Le monde fourmille de gens qui ne savent travailler que dans un IDE et ne sont pourtant pas foutus d'architecturer un code correctement ou qui n'ont juste pas la rigueur ou le bon sens nécessaire pour rendre du code lisible, ou compréhensible.

C'est pas parce que t'as un IDE que tu vas forcément te préoccuper des warnings. C'est pas parce que tu n'en as pas que tu vas considérer que c'est annodin.

Perso je bosse dans Sublime Text, je fais de la recherche textuelle, du remplaçage textuel aussi. J'ai dû tester à peu près tous les IDE auparavant, bossé avec des gens qui les utilisaient aussi, et d'autres qui utilisent vi ou EMacs, et franchement je n'ai vu aucune difference qui puisse être reliée à l'outil utilisé. Y'a des branques et des crados, et y'a des devs serieux, c'est tout.

----------


## Dross

L'outil va t'aider dans certaines tâches et ça va teinter le code malgré tout. Si c'est 3 fois plus facile de faire certaines refactorisations, tu les fera plus fréquemment, inconsciemment ou pas.

Et ça ne veux évidemment pas dire que si tu utilise un IDE tu sera un bon dev. 

Pour SublimeText, j'ai une licence aussi, mais faut se rendre à l'évidence, rien que l’autocomplétion n'a rien à voir entre un truc comme ST et un IDE de type VS/Jetbrains. Juste pour ça, je suis toujours dubitatif des devs qui encore aujourd'hui n'utilisent pas ces outils, votre vitesse de dev serai tellement plus rapide en les utilisant (non, votre dextérité n'égalera jamais une autocompletion de type Intellisense surtout maintenant qu'en plus ils utilisent le machine learning pour te proposer des blocs de code entiers).

----------


## rOut

Non, c'est faux en pratique.

J'ai bossé sur les mêmes projets avec VS (avec tous les plugins qui vont bien Visual Assist et cie), et avec Sublime. Et je vais définitevement plus vite avec Sublime. VS c'est l'usine à gaz qui mouline pour être le plus malin possible, et qui du coup ne réagit plus à la microseconde.

Le moindre code un peu touffu ou temporarirement cassé (le temps de finir de taper ce que tu veux) et Intellisense est en PLS. Parser du C++ correctement c'est difficile. Rajoute un peu de compilation conditionelle avec du préprocesseur et c'est fini le truc est tout juste capable de parser la configuration active. Sans parler des resources que ça bouffe tranquillou, et quand tu dois régulièrement relancer l'IDE pour peu que le projet soit un peu gros.

J'ai pas besoin que mon outil soit malin, je sais ce que je veux écrire et je veux juste qu'il soit réactif. ST il est pas malin, il indexe les tokens les plus courants et les plus proches et c'est beaucoup plus efficace. J'ai intégré ses heuristiques de completion et j'obtiens bien plus vite le bon token qu'avec n'importe quelle autocomplétion théoriquement correcte.

----------


## Dross

Ok ça doit venir de ta stack alors. 

Si tu utilisait un langage plus moderne (C#) tu aurai probablement un avis différent. (je n'ai pas les problèmes que tu cite sur .NET : l'autocomplétion et la réactivité est immédiate).

----------


## rOut

Ha oui, c'est bien connu que les developpeurs C#/Java font du code plus propre que les devs C/C++ grâce à leur IDE et leur langage moderne.  ::rolleyes::

----------


## Dross

On ne parle pas de qualité du code, on parle d'écrire du code rapidement.

----------


## rOut

Le temps gagné se situe plus sur les briques déjà disponibles et réutilisables que sur l'écriture du code en elle même à mon avis. Pour le reste je crois qu'on passe plus temps à réfléchir à ce qu'on veut faire qu'à écrire le code lui même. Ou alors c'est peut être mauvais signe.

----------


## Dross

Sauf que ce temps gagné est totalement gratuit et facile à obtenir et n'est pas obtenu au détriment d'autre chose. 

C'est surtout ça qui me sidère quand je vois des personnes travailler sans ce genre d'outil.

----------


## rOut

Je pense que c'est une idée reçue assez classique.

Etant habitué à un outil, ou une méthode, on voit ce qu'il nous apporte et on imagine que d'autres pourraient en bénéficier. En réalité non seulement chacun a ses préférences, mais surtout et avant tout ses habitudes. Ce sont les habitudes, les réflexes et les méthodes, qui permettent d'aller vite, d'être à l'aise dans ce que l'on fait, pas tellement les outils en eux même. Chacun se construit ses habitudes avec les outils qu'il utilise, et tend vers un niveau d'efficacité maximale dans son contexte d'utilisation personelle.

S'il faut changer d'outil, changer de méthode, alors c'est tout remettre à zéro. Et même si le niveau d'efficacité absolu limite serait plus important, le temps nécessaire pour oublier les anciens réflexes et en récupérer de nouveaux fait que c'est généralement à perte. Et plus la personne à d'experience plus il se sera cristallisé et plus il perdra au change.

C'est la même histoire avec les layout claviers. Tu vas avoir des gens qui vont te bassiner que le Programmer Dvorak permet de taper 200% plus efficacement. Sauf que quand t'as passé 20ans à taper sur un clavier Azerty, oublier tous tes réflexes de frappe pour obtenir la même efficacité sur un nouveau layout va te prendre un temps fou et tu vas longtemps avoir au mieux une vitesse de frappe médiocre et frustrante.

----------


## Dross

C'est vrai que les habitudes ont la vie dure. Tu as un point.

Par contre du coup ça me renforce dans ma façon de gérer mon équipe : je suis intransigeant sur la vitesse et les outils utilisés (qui sont directement corrélés chez un junior), il faut effectivement que je ne laisse pas de mauvaises habitudes se mettre en place.

Mais de l'autre ça me fait un peu peur, le jour où on recrute un senior qui sera un anti-IDE, je pense pas qu'on pourra le garder. C'est un truc auquel j'avais jamais pensé avant.

----------


## rOut

C'est pour ça qu'à mon avis construire une équipe sur des gros outils est une mauvaise idée. Il vaut mieux privilégier des outils versatiles, qui ne forcent pas à se figer dans une certaine méthode, et des méthodes qui s'adaptent aux outils.

Git est un outil versatile, son modèle est très simple, un graphe de modifications, des pointeurs vers des noeuds privilégiés. Tu fais ce que tu veux avec après, tu peux imaginer n'importe quel modèle par dessus pour organiser le travail, des nomenclatures sur les noms de branches, un processus de développement à suivre. Chaque développeur est libre d'utiliser le client Git qu'il préfère. Les juniors peuvent éventuellement être plus encadrés, par des outils préconfigurés, qui offrent moins de liberté, les seniors sont libres de faire comme ils veulent, et du moment que tout le monde respecte l'organisation et le processus, tout ira bien. Rien n'est non plus figé, le processus de développement peut évoluer, toujours au risque de bouleverser les habitudes, mais ça fait partie du travail de transition, et c'est beaucoup plus facile de changer une organisation de travail que d'imposer des outils complexes à des gens qui n'ont pas l'habitude de les utiliser.

Un IDE c'est un peu l'exemple inverse. Il y a une manière bien particulière de travailler dans Visual Studio. C'est complexe, il faut prendre le temps et apprendre à s'en servir. Ca peut faire plein de choses, mais à chaque fois c'est d'une manière bien précise. A chaque mise à jour c'est le risque d'être perdu. Imposer Visual Studio à une équipe c'est déjà l'enfermer dans un modèle de travail précis. L'existence de générateur de projets Visual Studio en est la preuve d'ailleurs. Si VS était aussi simple et versatile que Git, il n'y aurait pas besoin d'outils comme CMake, il serait possible de construire autour, comme on peut construire autour de Git.

----------


## Dross

Ce que tu vois comme une faiblesse je le vois comme une force : c'est comme dans le web, soit tu utilise une soupe de dépendances qui t'est propre et où chaque nouvel intervenant devra passer un temps fou à comprendre qui/quoi/où.

Ou alors tu utilise Angular et alors il ne sera pas surpris par quoi que ce soit et sera directement productif. 

Et à embaucher c'est plus facile aussi : s'il a déjà fait du Angular et qu'il en est pas mort, c'est bon.

----------


## gros_bidule

Avoir un modèle de dev précis, ou au moins une stack imposée, ça a en effet du bon.
Puis si on utilise sans arrêt de nouvelles stacks ou frameworks, on est condamné à répéter des erreurs (purement techniques) qu'on ne ferait pas avec la stack qu'on maîtrise. Ca ne veut pas dire qu'il ne faut pas être curieux, et on peut même migrer vers une nouvelle stack un jour, mais rester sur un truc connu durant un temps raisonnable nous évite bien des soucis. Ca permet même d'être un expert, un vrai (les "experts®" qui ont bossé juste un an ou deux on les connaît...).

A moins biensûr d'être un goa'uld et d'hériter de la connaissance des anciens devs. Ca ça serait chouette  ::):

----------


## Teocali

f

c’est marrant toute cette discussion sur la complétion automatique alors que bon, c’est clairement pas la où se situe l’intérêt d’un IDE moderne.
Je veux dire, prenez Intellij. La complétion automatique c’est cool mais c’est pas ce qui me fait gagner le plus de temps et m’allège le cerveau.
Par contre, le fait d’avoir la possibilité d’interroger les bases de donnés directement depuis l’outil oui. Mais surtout de relier ces bases de données à mon code et le schéma qui va avec.
Ce qui permet à intellij de m’indiquer quand ma configuration Hibernate pointe vers un élément de schéma (colonne ou table) qui n’existe pas. Ou que ma commande sql est invalide pour cause de type non existant.

Ou bien la possibilité de marquer une chaîne de caractère dans mon code comme étant d’un langage spécifique comme le JSON. Ou le sql. Et donc d’avoir la coloration syntaxique et surtout les avantages de l’intégration de ce language (cf. plus haut sur l’intégration des BdD)

Ou bien l’intégration avec le docker registry, ce qui lui permet de me dire que je pointe vers une image inexistante quand j’essaye de jouer avec Testcontainer. et ce sans lancer le code œuf corse.

Et les dizaines d’autres intégration avec mes outils et mes librairies : la détection et la competion automatique des dépendances dans Gradle et Maven, l’intégration avec Spring, l’execution et la présentation des résultats de mes tests unitaires avec la possibilité de naviguer du résultat au test et vice versa. Et même d’avoir dans mon code un petit indicateur qu’un test a échoué à cet endroit. et plein d’autre intégration super utile. En gros le I de IDE quoi.

Et je passe sur la navigation facilitée vers l’implantation ou la déclaration des méthodes , les raccourcis de refactoring ultra puissant (conversion entre return body et function body en kotlin, déplacement des champs à vers le constructeur et vice versa, etc.), les détections _live_ des _codes smells_ et leur correction quasi instantanée et des milliers de petits gain de productivité et oui, de qualité.
.

Limiter un IDE à la completion automatique, c’est ultra réducteur. Autant que de limiter vim à une prison pour dev junior ou emacs a un outil pour masochiste digital. Un IDE moderne ça te libère du temps de cerveau pour réfléchir justement, vu que tu passes moins de temps à pondre du boilerplate et surtout parce que les petits trucs de merde il y pense pour toi. et ouais, j’assume, ça augmente la qualité du code au sein d’une équipe. 


peut-être que ça ne s’applique  pas à tous les languages. mais pour les languages récents comme le C#, le kotlin et même le java, ben ouais, un IDE c’est un vrai atout qu’aucun montage d’éditeur de texte + plugin n’arrivera à compenser. Alors oui, ça convient ptet pas à tout le monde, mais perso, quand je recrute maintenant pour du kotlin, on informe que oui le taf, ça sera sur Intellij, parce qu’il n’y a pas de meilleur outil pour notre stack. Et que si tu veux utiliser un autre setup t’as intérêt à avoir de sérieux arguments….

----------


## gros_bidule

Je ne pense pas que l'on limite les IDE à la complétion auto, loin de là.
Pareil, j'apprécie énormément les autres fonctionnalités. Je fais du Kubernetes et Helm en ce moment, et le plugin Kubernetes d'IntelliJ est juste super. Ca aide à s'y retrouver dans tous les fichiers de config, ça évite des soucis et donc des migraines, et parfois je n'ai même pas besoin de sortir mon k9s, ce genre de chose.

Si l'on parle autant de l'autocomplétion, c'est peut être parce qu'il sagit d'une fonctionnalité de base, mais aussi, nous sommes probablement un certain nombre à avoir connu une époque où cette autocomplétion n'existait pas encore. Perso j'ai commencé sous Visual Stutio C++ 6 (aka 1998) et NetBeans 4, et hum, un l'éditeur dans je ne me souviens plus le nom sous Mandrake 8 mais c'était pas fameux. Pas d'autocomplétion au moins sous Visual Studio, et pire que ça, y'avait même pas le surlignage des erreurs, genre le ";" qui manque, bah tu devais le voir à la compilation, compilation qu'il fallait savoir déchiffrer (_l'erreur A312 ligne 52 c'est un point virgule qui manque ligne 47. Hawayyy ok j'aurais jamais deviné, merci professeur_).
Les IDE ont quand même super bien évolué, et l'arrivée de l'autocomplétion, maman, ce fut féerique  ::): . Et se planter sur ça, ça peut faire tâche. N'empêche, c'est ce qu'a fait Visual Studio pendant un temps, car l'autocomplétion sur tes classes ne marchait que si tu avais utilisé l'assistant graphique pour créer et nommer tes champs et fonctions, sinon il ne trouvait rien, ou bien il fallait recharger ton projet (ça reset Intellisense qui réindexe tout bien) - vécu sur Visual Studio sur du dotNet y'a bien ~15 ans, la version 2003~2005 je crois. A côté, NetBeans gérait ça à la perfection. Pas d'excuse du "nan mais Intellisense il marche comme ça, faut s'adapter gnagnagna".

----------


## Kamikaze

Sublime c'est le pire exemple, enfin j'ai pas trop eu le temps de tout lire ça va un peu vite pour moi.

Dans CLion en C++ t'as, à la volée, l'analyse statique de code de clang et de jetbrains (il font leur petit truc de leur côté). Et ça protège énormément des erreurs humaines inévitables.

Y'a forcément un jour où tu vas passer un truc par copie au lieu de par référence, faire une conversion implicite sans t'en rendre compte, etc. etc., et l'analyse statique de code est rapide, y'a pas de lenteur.

Si t'as pas ça, tu dois avoir bien configuré ton compilo pour qu'il te prévienne et tu ne verras les erreurs qu'à la compilation où quand tu run clang-tidy manuellement, et si t'as pas bien configuré le bordel, ton code sera mauvais. Donc de facto ça rend le worflow plus rapide d'avoir un setup propre. Après bien sûr peu importe que ce soit Jetbrains ou autre, ça se trouve t'as écrit que t'as configuré l'analyse statique de code dans Sublime mais j'en doute.

Et elle est locale, donc le problème est indiqué à l'endroit correspondant dans le code.
Si tu run l'analyse statique ailleurs, il faut faire le va et vient entre les résultats et le code, c'est lent et de nouveau sujet à l'erreur humain (exhaustivité, manquer une ligne, etc.).

M'enfin comme je le disais à plusieurs reprise. Y'a rien qui bat un exemple pratique, j'entends toujours des mecs me dire qu'ils ont pas de problème, mais quand je vois leur code je leur fait un document de 10 pages avec tous les problèmes que j'ai trouvé, je leur montre une meilleure version et la discussion évolue rapidement.

Après ouais t'as raison, tu donnes un IDE à un mec qui ne sait pas s'en servir, ça va rien changer à la situation.

Mais là ou un IDE correct brille encore c'est qu'il est simple de faire une configuration complète et de la partager.

Donc quand un mec de mon équipe me fait une pull request avec du code faisandé, au moins toutes les conventions de nommage sont là, toutes les guidelines en terme de taille de code, analyse statique de code etc. sont là.
Donc le code sera mauvais mais d'avantage facile à analyser et corriger car plutot bien unifié.

Et partager une config jetbrains c'est super super simple, c'est fait pour, et le degré de configuration est assez élevé
Tu peux configurer chaque entrée d'analyse statique de code individuellement par exemple.

----------


## rOut

> Y'a forcément un jour où tu vas passer un truc par copie au lieu de par référence, faire une conversion implicite sans t'en rendre compte, etc. etc., et l'analyse statique de code est rapide, y'a pas de lenteur.
> 
> Si t'as pas ça, tu dois avoir bien configuré ton compilo pour qu'il te prévienne et tu ne verras les erreurs qu'à la compilation où quand tu run clang-tidy manuellement, et si t'as pas bien configuré le bordel, ton code sera mauvais. Donc de facto ça rend le worflow plus rapide d'avoir un setup propre. Après bien sûr peu importe que ce soit Jetbrains ou autre, ça se trouve t'as écrit que t'as configuré l'analyse statique de code dans Sublime mais j'en doute.


C'est ta compilation et ta CI qui doivent servir de référence. Si ton éditeur choppe plus de trucs c'est que tu fais les choses à l'envers à mon avis. Donc oui, si clang-tidy c'est ton truc, il doit tourner sur chaque commit avant de merger. Je doute que ça soit le cas, généralement personne ne fait ça parce-que c'est super contraignant. Nous oui, chaque commit doit compiler, zéro warning, et passer tous les tests. C'est pas tellement l'éditeur qui aide, c'est la rigueur et la CI.




> Et elle est locale, donc le problème est indiqué à l'endroit correspondant dans le code.
> Si tu run l'analyse statique ailleurs, il faut faire le va et vient entre les résultats et le code, c'est lent et de nouveau sujet à l'erreur humain (exhaustivité, manquer une ligne, etc.).
> 
> M'enfin comme je le disais à plusieurs reprise. Y'a rien qui bat un exemple pratique, j'entends toujours des mecs me dire qu'ils ont pas de problème, mais quand je vois leur code je leur fait un document de 10 pages avec tous les problèmes que j'ai trouvé, je leur montre une meilleure version et la discussion évolue rapidement.


Bah t'es pas le premier à prétendre pouvoir faire ça, mais souvent les résultats ne sont pas au rendez vous. Pourtant personne dans mon équipe actuelle n'utilise d'IDE à ma connaissance. Et ce n'est pas non plus parceque c'est pas intégré à l'éditeur que les gens ne lancent pas coverity ou static analyzer. Pour autant le nombre de corrections venant d'un outil d'analyse statique est complètement anodin.




> Après ouais t'as raison, tu donnes un IDE à un mec qui ne sait pas s'en servir, ça va rien changer à la situation.
> 
> Mais là ou un IDE correct brille encore c'est qu'il est simple de faire une configuration complète et de la partager.


Les vcproj comittés dans les repo, red flag direct pour moi.




> Donc quand un mec de mon équipe me fait une pull request avec du code faisandé, au moins toutes les conventions de nommage sont là, toutes les guidelines en terme de taille de code, analyse statique de code etc. sont là.
> Donc le code sera mauvais mais d'avantage facile à analyser et corriger car plutot bien unifié.


Quand un gars soumet un patch et que le code est dégueu, les changements trop importants ou mal organisés, ça se voit direct. Je lui dit et il peut recommencer. Je vais même pas chercher à analyser ce qu'il a fait.

----------


## vectra

VS, c'est pas bon du tout, Intellisense non plus, y'a des crashes.
VS supporte CMake, comme la plupart des autres IDE (Meson, etc): aucune excuse non plus pour push des fichiers propriétaires VS.

C'est lapidaire comme constat, mais c'est ce que j'entends de plein de gens. C'est pas pour rien que tu as VS.Code qui monte, ou les outils Jetbrains qui marchent si fort.
VS C++ reste difficile à contourner du fait de son débogueur, mais pour le reste c'est l'usine à gaz. Se faire torcher par une solution codée en Java, c'est un peu la honte.

TL;DR: ne pas utiliser VS comme sauf-conduit dans le débat IDE contre éditeur de texte. 
Jetbrains c'est pas la perfection, mais ça enterre VS. Et effectivement, au vu de l'immense quantité de choses que l'IDE fait tourner en même temps que l'on code, on ne tape pas aussi vite que sur de l'éditeur pur. Mais là encore, y'a moyen de désactiver le moteur d'indexation/correction pour les phases de codage "rapide" si on en a besoin. Selon moi, on gagne plus de temps à avoir les assistances au bon moment qu'a posteriori.

----------


## Teocali

> Je ne pense pas que l'on limite les IDE à la complétion auto, loin de là.


Toi, non. rOut bien.

Après, très clairement, rOut, je ne pense qu'on arrivera a te convaincre de l'intérêt des IDEs, et c'est pas forcément un mal. C'est pas comme si tu en avais besoin

Par contre, ce est dommage, c'est très clairement, la dernière fois que tu as utilisé un IDE serieusement, ça remonte a loin. Ou alors ce n'en était pas un bon. Et au final, tu les mets tous dans le même panier.

C'est un peu comme si moi je disais que les éditeur de texte c'était de la merde parce que je m'étais contenté de tester un Notepad++ vanilla.

----------


## rOut

Je ne crois pas que ça remonte à si loin, à environ 5 ans très exactement, et c'était Visual Studio.

Et franchement je peux comprendre que vu mon discours j'ai l'air d'être un vieux barbu qui ne jure que par vi, mais j'ai longtemps été sous Eclipse, Netbeans et d'autres (et vi ou Emacs c'est trop abscons). J'ai fait du Java, et je suis d'accord que dans ce contexte précis l'IDE est peut être pas loin d'être indispensable. Mais c'est plus de la faute de la stack bourrée de magie vaudou. Quand t'as des ORM ou des trucs qui te génèrent 90% de ton code au build, le code que tu peux lire ne constitue qu'une infime partie du code réel, et le seul moyen de t'en sortir c'est d'avoir des outils qui te montrent le tout. Je trouvais ça très bien à l'époque, et je sais de quoi il s'agit quand on me parle de refactoring rapide, d'analyse statique intégrée et autres avantages.

Maintenant j'en suis pas mal revenu parce que, mon experience pro m'a montré que les outils pour faciliter la vie des gens, ça ne les a jamais empeché de faire de la merde voir même l'inverse. Quitte à avoir des gens qui codent n'importe comment, je préfère que tout soit explicite, ça évite de nombreuses mauvaises surprises, et ça simplifie grandement la facilité de compréhension à la lecture puisqu'il n'y a aucun contexte implicite à garder en tête. Je crois même que moins les outils font de la magie, et plus les devs sont forcés à faire gaffe à ce qu'ils font. Je serais même partisan de la lenteur de développement, parce que coder vite ça ne finit toujours dans le mur.

Je fais aussi la différence entre les situations ou l'IDE est utile, voire indispensable, et les situations où il ne l'est pas. Il n'y a pas de vérité absolue, et un projet en C++ ne nécessite pas, et ne bénéficie pas tant que ça de l'utilisation d'un IDE. Critiquer des devs dans l'absolu parce qu'ils font sans, c'est débile et suivant le contexte ça peut être parfaitement justifié.

----------


## Orhin

> Je ne crois pas que ça remonte à si loin, à environ 5 ans très exactement, et c'était Visual Studio.


5 ans c'est une éternité en informatique.
Et Visual Studio c'est franchement bof comparé aux IDE Jetbrains.

----------


## rOut

> 5 ans c'est une éternité en informatique.
> Et Visual Studio c'est franchement bof comparé aux IDE Jetbrains.


Et pourtant, les arguments n'ont pas évolué. Y'a 5 ans ça se pignolait déjà sur les mêmes sujets, avec les mêmes arguments que déjà à l'époque les outils à la mode du moment étaient bien supérieurs au reste du monde.

----------


## William Vaurien

Je suis beaucoup moins dans l'idée de l'IDE obligatoire comme j'ai pu lire plus haut. J'ai été pendant longtemps le vilain petit canard avec mon Intellij perso au bureau... Tout le monde me cassait les pieds avec Eclipse et je devais batailler pour avoir le droit d'utiliser mon IDE. L'arrivée et la généralisation de maven a été un vrai soulagement car la config du projet passait du mode proprio d'Eclipse à un modèle universel. 

Je ne me vois pas imposer aujourd'hui mes choix sur un outil qui se doit d'être le plus agréable pour son utilisateur. Je suis particulièrement contre les IDE préconfigurés dans certaines boîtes, genre le developpeur est un peu débile et son temps et tellement précieux qu'il ne peut pas ou ne doit pas passer 1h à le mettre en route...

Idéallement chacun fait comme il veut, et à part l'autocompletion que tout le monde utilise, je crois bien qu'au final chacun a un usage perso de la palette d'outils. Quand je bosse avec un collègue je vois que nous n'utilsons pas du tout l'IDE de la même manière, surtout les outils les plus avancés ou un peu cachés. 
Et quelqu'un de bon avec son outil peut quand même faire du code de merde...

Cet usage de l'IDE change parfois fondamentalement la manière de travailler (par exemple en C mes collègues redoute de renommer une méthode parce qu'ils utilisent le chercher/remplacer: c'est puissant, avec les regex et tout, mais parfois c'est fastidieux et il y a un risque de faire une erreur grossière). Pareil pour savoir quel code est utilisé à quel endroit c'est une recherche textuelle: ça marche bien mais c'est souvent plus fastidieux que d'avoir un rapport d'usage classé par rubrique.

Après j'ai toujours été épaté par les 'vrais' pros du vi / emacs, parce que c'est super puissant, et qu'il faut avoir une très bonne mémoire couplé avec une forte capacité d'abstraction pour en utiliser les fonctions avancées. J'ai eu ma période à la fac (sous Linux) ou je m'étais bricolé mes configs sur vim pour avoir une sorte de mini IDE, mais au final je n'arrivais pas très bien à l'utiliser. 
Pour analogie c'est un peu comme débugger en ligne de commande avec gdb: c'est aussi puissant que la contrepartie graphique mais c'est un peu plus chiant à utiliser si on ne pratique pas tous les jours. Il faut relire la doc pour trouver comment faire telle ou telle action autre que poser un breakpoint. Et puis il faut regarder son source à côté pour avoir la bonne ligne sur laquelle s'arrêter. En face on clique dans la marge et c'est bon.

Par contre je reste convaincu que l'outil déteint sur le code, pas forcément en bon ou mauvais code, mais plutôt sur la manière d'appréhender les choses et de s'organiser.

Je pense aussi que le point important soulevé est l'utilisation ou non des outils puissants et dispo au sein de l'IDE qui sont orienté code.
Java et l'exemple de langage idéal avec un IDE: j'ai commencé à coder à l'IUT en java avec un éditeur de texte ultra basique (nedit) sur des écrans monochromes (vieux matos à la fin des années 90). C'était une expérience pas très amusante (et le côté verbeux de Java prend là toute sa mesure). Ensuite j'ai appris à me servir un peu mieux de vi, mais quand j'ai découvert Intellij vers la fin des étude j'ai tout de suite bazardé les éditeurs de texte à la maison. C'est vraiment un autre monde.

(Par contre on ne me fera pas utiliser Visual Studio, Eclipse ou Netbeans: je les touve tous plus insuportable les uns que les autres !)

----------


## rOut

> Pour analogie c'est un peu comme débugger en ligne de commande avec gdb: c'est aussi puissant que la contrepartie graphique mais c'est un peu plus chiant à utiliser si on ne pratique pas tous les jours. Il faut relire la doc pour trouver comment faire telle ou telle action autre que poser un breakpoint. Et puis il faut regarder son source à côté pour avoir la bonne ligne sur laquelle s'arrêter. En face on clique dans la marge et c'est bon.


Tout à fait et certains  :ouaiouai:  ne jurent que par les débuggeurs graphiques. Je suis d'accord que ça peut avoir des avantages, comme permettre d'avoir un meilleur aperçu des différents éléments intéressants au cours de la session de debug, mais au final si tu sais utiliser (ne serait-ce que basiquement) Gdb en ligne de commande sans GUI, bah t'es le roi du monde. Tu peux débugger n'importe quoi et dans n'importe quelle condition, en ssh sur une machine distante, ou n'importe où, avec ou sans infos de debug.

----------


## gros_bidule

Debugger en ssh ? A quel moment tu te dis que tu as besoin de debugger depuis une session ssh ? Tu ne debug pas en prod tout de même ? Ton env de dev est remote ?
J'ai donné ton nom à la police internationale du dev (PID), c'est pas possible une telle maltraitance  ::P:

----------


## Kamikaze

Il se dévoile, ça livre les exécutable avec les symboles de debug et tout en prod, un monstre

----------


## rOut

Je débuggue tous les jours, sur des devices où tout ce que j'ai en gros c'est une connexion ssh, oui, et en général je débuggue des applis dont je n'ai pas le code, et pour beaucoup qui sont obfusquées.

Dans tous les cas ça arrive aussi les crash obscurs en prod dans des parties qui sont complètement hors du code de dev. Si t'es chanceux tu peux peut être reproduire le problème dans un environnement moins sensible, mais parfois non. Et en dernier recours, savoir utiliser un debugguer dans ces cas là ça peut sauver des vies.

----------


## TwinBis

Oui du coup votre longue discussion sur les outils de dev, c'est un peu comme un livreur de pizza et un chauffeur de bus scolaire qui s'engueulent sur le choix du meilleurs véhicule pour rouler.

Vous ne faites pas la même chose, donc ça peut être intéressant de comparer, mais pas de tenter d'établir une solution universelle.

----------


## rOut

Bah oui, je n'ai jamais prétendu que ST était supérieur à quoi que ce soit dans l'absolu, je défends l'idée que chaque dev doit pouvoir utiliser les outils auxquel il est habitué, et qu'il considère adapté au contexte où il doit travailler, à partir du moment ou il respecte le workflow. Et je réagissais aux gens qui disaient que les devs qui travaillent sous vi sont des nullos qui ne savent pas travailler correctement.

----------


## vectra

> Tout à fait et certains  ne jurent que par les débuggeurs graphiques. Je suis d'accord que ça peut avoir des avantages, comme permettre d'avoir un meilleur aperçu des différents éléments intéressants au cours de la session de debug, mais au final si tu sais utiliser (ne serait-ce que basiquement) Gdb en ligne de commande sans GUI, bah t'es le roi du monde. Tu peux débugger n'importe quoi et dans n'importe quelle condition, en ssh sur une machine distante, ou n'importe où, avec ou sans infos de debug.


Aucune fonction de ma connaissance mappée par gdb n'est pas mappée sur CLion.
Et à ma connaissance, y'a rien qui arrive à la cheville du débogueur de VS. Il serait mort et enterré sinon.

----------


## rOut

> Aucune fonction de ma connaissance mappée par gdb n'est pas mappée sur CLion.
> Et à ma connaissance, y'a rien qui arrive à la cheville du débogueur de VS. Il serait mort et enterré sinon.


Je sais pas, encore une fois question de pratique et d'habitude je dirais. Par exemple je me sers beaucoup du batch mode de gdb pour enregistrer et reproduire facilement ma session de debug, j'ai aussi pas mal utilisé la fonction gdb record quand j'avais un CPU Intel, extrêmement utile pour analyser à postériori l'exécution. Je doute un peu que ça soit bien mappé, mais peut être.

----------


## Teocali

> Et pourtant, les arguments n'ont pas évolué. Y'a 5 ans ça se pignolait déjà sur les mêmes sujets, avec les mêmes arguments que déjà à l'époque les outils à la mode du moment étaient bien supérieurs au reste du monde.



Ben si. Voir plus haut. Mais toi t’as l’air bloqué sur les meme reproches.

cf plus haut : ce qui fait la force d’un IDE moderne (et VS n’en n’est pas un), c’est l’intégration de plein de fonctionnalités au sein d’un même environnement et surtout l’enrichissement mutuels des ces fonctionnalités. Et « écrire du code » n’est qu’une de ces fonctionnalités.

Après, encore une fois, j'essaye pas de te faire changer d'outil, hein. ST et ta stack fonctionnent très bien pour ton environnement, pas de raison pour toi de changer. Mais je maintiens : ta vision d'un IDE moderne, de ses capacités et surtout de son utilité est incomplète, très datée et surtout extrêmement réductrice.

----------


## rOut

> cf plus haut : ce qui fait la force d’un IDE moderne (et VS n’en n’est pas un), c’est l’intégration de plein de fonctionnalités au sein d’un même environnement et surtout l’enrichissement mutuels des ces fonctionnalités. Et « écrire du code » n’est qu’une de ces fonctionnalités.


Non mais ça a toujours été là définition d'un IDE, faut arrêter de croire qu'on révolutionne l'informatique tous les deux jours.

Toutes les fonctions décrites (refactoring, build, warnings, analyse statique, debugger, completion) jusqu'à présent, Éclipse le faisait déjà quand je l'utilisais y'a 15 ans. Pas très bien peut être et encore, ça allait.

----------


## Dross

> ce qui fait la force d’un IDE moderne (et VS n’en n’est pas un)


VS 2022 n'est pas moderne ? Que lui manque-t-il ? (déjà qu'ils pompent les fonctionnalités de Resharper depuis 2017...)

----------


## Tramb

> VS 2022 n'est pas moderne ? Que lui manque-t-il ?


T'as pas écrit la même chose avec les 200 révisions précédentes ? :D

----------


## rOut

Le support du c++23

----------


## Teocali

> Toutes les fonctions décrites (refactoring, build, warnings, analyse statique, debugger, completion) jusqu'à présent, Éclipse le faisait déjà quand je l'utilisais y'a 15 ans. Pas très bien peut être et encore, ça allait.


Bon, ok, c’est confirmé : tu ne lis pas ce qu’on te réponds. Ça fait au moins deux posts que je répéte que l’intérêt d’un IDE ne se limite pas à ce que tu décris. Et ça confirme que ta vision d’un IDE est super limitée. 

D’ailleurs, je me demande même si c’est pas un biais de confirmation de ta part ? Parce que les fonctionnalités auquel tu le limites sont au finales celle qui sont le plus faciles à répliquer dans un éditeur de texte.

Enfin bon, j’vais arrêter de me battre pour me faire comprendre, j’ai mieux a faire.

----------


## rOut

> Bon, ok, c’est confirmé : tu ne lis pas ce qu’on te réponds. Ça fait au moins deux posts que je répéte que l’intérêt d’un IDE ne se limite pas à ce que tu décris. Et ça confirme que ta vision d’un IDE est super limitée. 
> 
> D’ailleurs, je me demande même si c’est pas un biais de confirmation de ta part ? Parce que les fonctionnalités auquel tu le limites sont au finales celle qui sont le plus faciles à répliquer dans un éditeur de texte.
> 
> Enfin bon, j’vais arrêter de me battre pour me faire comprendre, j’ai mieux a faire.


Bah j'ai beau chercher dans tes messages je n'ai rien trouvé d'instructif. Le seul point qui me parait potentiellement valable c'est:




> Pour impressionner un radical de vi ou emacs il y a le structural "search and replace" qui est très violent comme outil d'intellij (même si pas très documenté). 
> (https://www.jetbrains.com/help/idea/...h_structurally).
> 
> Par exemple nous devions revoir tous nos tests avec des mocks pour inverser un appel chaîné de méthode. 
> Les appels de ce genre:
> - when(mockInstance.mockedMethod(arg1, arg2, ..., arg n)).thenReturn(mockedResult)
> 
> devaient être réécris sous la forme:
> - doReturn(mockedResult).when(mockInstance).mockedMe  thod(arg1, arg2, ..., arg n)
> ...


Et de mon point de vue, le check n'a rien à foutre dans un IDE s'il a effectivement une valeur importante. Ca doit être checké par la CI, au build, pour s'assurer que le code est sain quelle que soit la manière dont il a est édité, ou quelle que soit la manière dont il est buildé. Certes en Java il n'y a pas trop de notion de compilation conditionelle (il me semble?), mais dans beaucoup d'autres langages c'est le cas et des parties du code ne seront pas activées suivant la configuration. Le seul moyen de s'assurer que tout est sain c'est de build chacune des configurations supportées et de passer les checks de qualité dessus (cad, warnings, clang-tidy ou n'importe quel autre moyen d'assurer des critères de qualité du code, y compris des scripts perso si besoin). Et si les checks ne passent pas, ça merge pas, point.

Pour l'aspect refactoring ça se fait aussi très bien sans IDE je crois. Ou quand bien même ça serait un bon point pour un IDE mais c'est vraiment pas le genre de tâche sur lesquelles je passe ma vie, donc ça reste un avantage limité.

----------


## Tramb

> Cet usage de l'IDE change parfois fondamentalement la manière de travailler (par exemple en C mes collègues redoute de renommer une méthode parce qu'ils utilisent le chercher/remplacer: c'est puissant, avec les regex et tout, mais parfois c'est fastidieux et il y a un risque de faire une erreur grossière). Pareil pour savoir quel code est utilisé à quel endroit c'est une recherche textuelle: ça marche bien mais c'est souvent plus fastidieux que d'avoir un rapport d'usage classé par rubrique.


C'est une vision très centrée sur les appels de fonctions prefix, les dot notations, et les langages objects.
Ca n'a que peu de sens en C, donc, et dans plein de langages de plus haut niveau avec inférence de type ou dynamiques.

Edit: Et on PEUT vraiment débattre de s'il faut faire des compromis dans le design des PL pour les rendre plus IDE friendly.

----------


## Tramb

> Le support du c++23


:sifflote

----------


## vectra

> VS 2022 n'est pas moderne ? Que lui manque-t-il ? (déjà qu'ils pompent les fonctionnalités de Resharper depuis 2017...)


Je pense que je préfère passer à Sublime que de m'infliger VS.

- - - Mise à jour - - -




> Le seul moyen de s'assurer que tout est sain c'est de build chacune des configurations supportées et de passer les checks de qualité dessus (cad, warnings, clang-tidy ou n'importe quel autre moyen d'assurer des critères de qualité du code, y compris des scripts perso si besoin). Et si les checks ne passent pas, ça merge pas, point.
> 
> Pour l'aspect refactoring ça se fait aussi très bien sans IDE je crois. Ou quand bien même ça serait un bon point pour un IDE mais c'est vraiment pas le genre de tâche sur lesquelles je passe ma vie, donc ça reste un avantage limité.


Le check doit se faire dans les deux cas. Ca ne doit pas merger OK, mais ça ne doit pas non plus committer, autrement tu n'as pas des commits atomiques valides (prévu par les IDE).
Et quand tu as divergé dès le premier commit de ce que les outils de check peuvent parfaitement te dire et suggérer en temps réel, ben excuse-moi mais t'as du taf, lourd et pénible, à retaper toute la branche locale. Encore une fois: I comme intégré.

Franchement, le refactoring avec IDE, c'est aussi -encore une fois- de la facilité à faire les choses qu'il faut faire en temps et en heure, et je pense que la facilité enlève le côté rebutant des choses qui doivent être faites pour obtenir la qualité optimale du code. Quand la fin du sprint approche, y'en a un qui n'aura aucune difficulté à terminer la MR de sa branche, et un autre qui va devoir non seulement réécrire l'historique, mais en plus bien se faire chier. J'espère qu'il a provisionné du temps.

- - - Mise à jour - - -




> Le support du c++23


C'est un problème du compilateur, pas de l'IDE. L'IDE VS a déjà assez de problèmes  ::ninja::

----------


## Orhin

> Et de mon point de vue, le check n'a rien à foutre dans un IDE s'il a effectivement une valeur importante. Ca doit être checké par la CI, au build, pour s'assurer que le code est sain quelle que soit la manière dont il a est édité, ou quelle que soit la manière dont il est buildé.


Je ne vois pas en quoi les 2 seraient incompatibles.
Personne n'a dit qu'il ne fallait pas de CI car l'IDE permet de catch des erreurs en avance




> Pour l'aspect refactoring ça se fait aussi très bien sans IDE je crois.


Non.
C'est typiquement le genre de trucs où un bon IDE sera bieeeeeen plus efficace qu'un éditeur de texte.

----------


## rOut

> Le check doit se faire dans les deux cas. Ca ne doit pas merger OK, mais ça ne doit pas non plus committer, autrement tu n'as pas des commits atomiques valides (prévu par les IDE).
> Et quand tu as divergé dès le premier commit de ce que les outils de check peuvent parfaitement te dire et suggérer en temps réel, ben excuse-moi mais t'as du taf, lourd et pénible, à retaper toute la branche locale. Encore une fois: I comme intégré.


Bah non, pas d'accord du tout. Je passe mon temps à commit des trucs qui ne compilent pas forcément, ou qui sont temporairement crade, ça fait partie de mon process de développement, parce que devoir faire tout nickel à chaque instant pour du code que tu vas réécrire 50 fois c'est 49 fois de gaspiillé. Je nettoie au fur et à mesure, et une fois que c'est nickel et bien testé je demande à merger, et c'est seulement à ce moment qu'on doit demander un critère de qualité mini. D'ailleurs ça fait partie des raisons pour lesquelles je pense que Rust a beaucoup de mal à s'implanter, c'est juste impossible de hacker un truc vite fait pour voir ce que ça donne, et ça crée une friction horrible pour le dev de tous les jours. Et pour la même raison, des languages immondes comme le JS ou le Python marchent très bien, parce que tu peux faire des trucs dégueu vite fait qui marchottent sans te prendre la tête.

Foutre des hooks pour empêcher de commit c'est juste faire chier le monde et tu vas juste avoir des devs qui vont virer le hook parce que ça les emmerde.




> Je ne vois pas en quoi les 2 seraient incompatibles.
> Personne n'a dit qu'il ne fallait pas de CI car l'IDE permet de catch des erreurs en avance


Ok, mais bon la CI c'est la base, et si ta CI fait au moins tout ce que fait ton IDE, bah tu t'en fous pas mal que certains n'utilisent pas un IDE, leur code sera checké de la même manière.




> Non.
> C'est typiquement le genre de trucs où un bon IDE sera bieeeeeen plus efficace qu'un éditeur de texte.


Admettons, mais encore une fois ça devrait pas être une tâche très courante. Et pour un vrai refactoring, non trivial, aucun outil ne pourra le faire à ta place de toute manière.

----------


## vectra

Donc tu vas être forcé de réécrire *complètement* les historiques de toutes tes branches pour merger, au final, une branche avec des conventional commits ? 
C'est chaud. C'est aussi à dire qu'on n'a pas tous le même niveau de maîtrise GIT aussi.
D'ailleurs à ce sujet, l'approche très visuelle de CLion sur le sujet me permet de ramp-up avec un tout petit peu de sérénité. C'est déjà beaucoup pour moi.

----------


## rOut

Ha oui je passe mon temps à rebase mes branches de dev, et j'utilise git commit --fixup et git rebase --autosquash --interactive en permanence. Pour le dev en tant que tel mais aussi parce-qu'on a un historique linéaire et que je rebase aussi tout ce qui n'est pas mergé. J'ai une vingtaine de branches de dev, que je rebase toutes d'un coup avec git et un tout petit peu de scripting autour.

----------


## Tramb

> Non.
> C'est typiquement le genre de trucs où un bon IDE sera bieeeeeen plus efficace qu'un éditeur de texte.


C'est bien les "Non." mais tu peux adresser mon objection sur les langages dynamiques plutôt par exemple ?

----------


## Orhin

> Ok, mais bon la CI c'est la base, et si ta CI fait au moins tout ce que fait ton IDE, bah tu t'en fous pas mal que certains n'utilisent pas un IDE, leur code sera checké de la même manière.


Je vais troller un peu, mais en poussant ce raisonnement là on peut justifier qu'un dev pousse du code qui ne compile ou ne fonctionne pas.
Après tout, ce sera checké par la CI, alors à quoi bon.  ::trollface:: 




> Admettons, mais encore une fois ça devrait pas être une tâche très courante. Et pour un vrai refactoring, non trivial, aucun outil ne pourra le faire à ta place de toute manière.


Ben même quand c'est peu courant, ça reste pratique.
Si je modifie/déplace un dossier, je suis bien content que tous mes paths d'import qui lui sont associés soient automatiquement renommés.




> C'est bien les "Non." mais tu peux adresser mon objection sur les langages dynamiques plutôt par exemple ?


J'ai du mal à voir le rapport entre l'inférence de type / langage dynamique et le refactoring.

L'apport d'un IDE lors du refactoring c'est de propager correctement les modifications en trouvant tous les contextes d'utilisation du truc modifié.

----------


## rOut

> Je vais troller un peu, mais en poussant ce raisonnement là on peut justifier qu'un dev pousse du code qui ne compile ou ne fonctionne pas.
> Après tout, ce sera checké par la CI, alors à quoi bon.


Bah oui, ça arrive déjà et c'est pas très grave. S'il veut que son travail soit mergé par contre ben il faut qu'il corrige.

----------


## gros_bidule

Le vrai débat c'est plutôt : Pull Request ou Merge Request ?  ::trollface::

----------


## Dross

> T'as pas écrit la même chose avec les 200 révisions précédentes ? :D


Bah vu qu'il est mis à jour régulièrement, il ne vieilli effectivement pas tant que ça.

Vous parliez de débugger sur machine distante plus haut, et certains semblaient surpris : bah oui ça arrive, surtout quand tu est sur du PaaS et que l'infra te change des dépendances qui amènent des effets de bords non reproductible en local. 
Et ça, la première fois que j'en ai fait (via ssh ou non) c'était il y a 5-6 ans sur VS, et c'était dispo depuis bien avant.

On parlais justement de l'intérêt de l'intégration complète d'un IDE, et c'est justement un bon exemple : l'intégration PaaS Azure avec VS est assez impressionnante - et depuis longtemps - y'a 5-6 ans je développais, déployait automatiquement depuis VS sur Azure, lançais un remote debugger puis lançais un testing de charge (toujours depuis VS).

Venir défendre les IDE pour venir diminuer l'un des meilleurs derrière, c'est assez particulier.  ::rolleyes::

----------


## Tramb

Pour l'utiliser (mais pas que) depuis Visual Studio 6, toutes les révisions m'insupportent pour plein de raisons qui varient au cours du temps au fil des régressions ou des changements d'UX inutilo-débiles, mais je suis quand même amoureux de leur intégration du debugger natif.
Niveau édition de code C++, c'est quand même pas ouf, je trouve (pas d'avis sur les autres langages), même si Intellisense finit par vaguement savoir faire des trucs (15 ans après tout le monde).

----------


## gros_bidule

A propos du debug distant : si je comprends bien, ça implique que vos logs (si vous en avez, et si vous pouvez en avoir, je comprends que dans certains cas vous n'avez pas le choix) ne sont pas suffisamment utiles pour comprendre ce qui se passe ?
Nan parce qu'on moque parfois les jeunes qui mettent des logs et des print dégueulasses partout parce qu'ils n'ont jamais lancé un débogueur de leur vie, mais l'inverse est vrai aussi, les deux ont leur utilité.

----------


## vectra

Ca se fait très bien sous IntelliJ également, donc y'a certainement de très bonnes raisons pour  :;):

----------


## Tramb

> JJ'ai du mal à voir le rapport entre l'inférence de type / langage dynamique et le refactoring.
> 
> L'apport d'un IDE lors du refactoring c'est de propager correctement les modifications en trouvant tous les contextes d'utilisation du truc modifié.


Dès que y a du duck typing (par exemple) c'est mort pour le cas général.

----------


## rOut

> A propos du debug distant : si je comprends bien, ça implique que vos logs (si vous en avez, et si vous pouvez en avoir, je comprends que dans certains cas vous n'avez pas le choix) ne sont pas suffisamment utiles pour comprendre ce qui se passe ?
> Nan parce qu'on moque parfois les jeunes qui mettent des logs et des print dégueulasses partout parce qu'ils n'ont jamais lancé un débogueur de leur vie, mais l'inverse est vrai aussi, les deux ont leur utilité.


Oui, les deux ont leur utilité, et dans la plupart des cas les logs sont plus simples pour suivre et analyser les erreurs, dans d'autres cas seul un debuggueur peu te sauver.

----------


## Orhin

> Dès que y a du duck typing (par exemple) c'est mort pour le cas général.


Pourtant Webstorm s'en sort plutôt bien avec Typescript à ce niveau.
Du coup je serais intéressé par un exemple plus concret.

----------


## Tramb

> Pourtant Webstorm s'en sort plutôt bien avec Typescript à ce niveau.
> Du coup je serais intéressé par un exemple plus concret.


Pour un langage fortement typé, C++,
template<typename T> void f(T& t) { t.Run(); } tu ne retrouveras pas quelles instances de Run peuvent être appelées sans sémantique supplémentaire, ça peut être n'importe quel type qui a un Run. Et en pratique dans une base de code conséquente tu vas en avoir plein des potentiels des void Run(). Et t'as probablement envie de renommer que ceux d'une sous-famille de types.
J'imagine que les concepts corrigeront ça à terme mais j'en suis pas sûr (essentiellement parce que je m'en branle du C++ moderne).
Pour le Typescript, je connais pas, mais j'imagine que s'il a des fonctions polymorphiques à base de duck typing, il a le même souci.
(Rust évite ça parce que les Traits sont déclaratifs, tu paies en souplesse ce que tu gagnes en provability)

Dans un langage dynamique, disons Python, c'est 10000 fois pire, tout est late bindé.

En tout cas : beaucoup de refactors dans les IDE sont clampés par le langage, et c'est souvent inutile, parfois dangereux.

----------


## Awake

Bonjour à tous,

Je viens quemander un peu d'aide sur un soucis plus mathématique que de programmation, si quelqu'un à un peu de temps pour m'aider. Je serais bien allé demandé sur le topic des maths mais ils m'auraient donné des equations que j'aurais été incapable de transformer en code. Je pense que le problème est très simple, mais je n'ai pas le bagage scolaire pour pouvoir le résoudre  ::(: .



Il y a un système de collision entre deux segments (les lignes grises et noires). Le segment noire représente un mur, le segment gris est la trajectoire que fait le point (=son déplacement) qui ne doit pas traverser le mur. Le point rouge celui ou les deux segment se rencontrent (point de collision). Le point bleu est celui que le point avait avant le déplacement.

J'aimerais trouver les coordonnées du point vert, qui devrait être le long du segment gris ( = le déplacement du point), mais à une distance de 5 du mur, et perpendiculaire à celui-ci.

Il faut que si la collision se fait à partir de l'autre côté du mur (si le point bleu est au nord du mur), le point vert soit bien entendu au nord aussi.

Sachant que j'ai déjà le code fonctionnel pour trouver le point rouge, c'est vraiment juste le calcul du point vert qui pose problème.

Désolé de venir avec un soucis aussi simple et concret mais je galère là dessus bien comme il faut  :Emo:

----------


## deathdigger

> Bonjour à tous,
> 
> Je viens quemander un peu d'aide sur un soucis plus mathématique que de programmation, si quelqu'un à un peu de temps pour m'aider. Je serais bien allé demandé sur le topic des maths mais ils m'auraient donné des equations que j'aurais été incapable de transformer en code. Je pense que le problème est très simple, mais je n'ai pas le bagage scolaire pour pouvoir le résoudre .
> 
> https://cdn.discordapp.com/attachmen...vector-cpc.png
> 
> Il y a un système de collision entre deux segments (les lignes grises et noires). Le segment noire représente un mur, le segment gris est la trajectoire que fait le point (=son déplacement) qui ne doit pas traverser le mur. Le point rouge celui ou les deux segment se rencontrent (point de collision). Le point bleu est celui que le point avait avant le déplacement.
> 
> J'aimerais trouver les coordonnées du point vert, qui devrait être le long du segment gris ( = le déplacement du point), mais à une distance de 5 du mur, et perpendiculaire à celui-ci.
> ...


Théorème de Pythagore : A²+B²=C²
En l'occurence, tu cherches A² et C², c'est ta distance entre ton point rouge et ton point vert

----------


## Cwningen

Fait un produit scalaire avec le vecteur normal, ça te donnera la distance à la droite. C'est dur d'en dire plus sans écrire des équations.

----------


## Kesitem

Je pense plutôt que tu devrais partir sur les formules de trigo (sur un triangle rectangle comme dans ton cas, c'est vraiment simple).

En cherchant, un schéma à honteusement copier/coller, je suis tomber sur ce site qui m'a l'air très clair: https://www.piger-lesmaths.fr/trigon...s-reciproques/

Normalement, tu connais l'angle entre tes deux vecteurs (avec le produit scalaire des vecteurs), tu as donc le sinus. Tu as le coté opposé (5px). Tu n'as plus qu'à trouvé ton hypoténuse.

----------


## Kamikaze

Ralala la pédagogie des canards c'est pas joli  ::ninja:: 

On va commencer par noter que t'as déjà résolu le problème.

En utilisant ton code existant, si tu crées une nouvelle droite, parallèle à la première (noire) et espacée de 5 px.
Il te suffit de calculer la collision (point rouge) avec cette nouvelle droite, et ça correspondra au point vert que tu veux.

https://www.desmos.com/calculator/ad8yhdl7jv

Pour décaler une droite (a.x + b) il suffit de bouger 'b'

A vrai dire la grande question, qui est assez complexe je pense, en tout cas ça me vient pas immédiatement, c'est qu'elle est la meilleure manière de calculer le point vert.

Et là il nous manque un peu de contexte sur ton cas d'utilisation.

Mais bref, restons simple, si tu veux obtenir le point vert tu pourrais parcourir ton segment gris et vérifier la distance, et tu t'arrêtes quand tu trouves une distance de 5 px.

Donc disons que tu fasses une boucle (for/while), tu finirais par trouver un point à une distance de 5 px. Encore une fois pas vraiment de nouveau code ici. On réutilise ce que tu as déjà.

Et là on en arrive aux équation, la solution d'au dessus est pas vraiment pratique, parce qu'en vérité on a déjà suffisament d'information pour calculer les coordonées du point.

Tu connais l'ensembles de points de la droite noire, disons que la droite noire c'est a.x + b ("a" c'est le "coefficient directeur" et b c'est "l'ordonnée à l'origine")

Tu vois qu'une droite c'est une équation qui te donne un ensemble de point, une infinité de points

Maintenant la droite grise pareil, disons que c'est m.x + p

Donc là on a 2 ensembles de points, 2 droites/2 équations qui représentent une droite.

Mais y'a un seul point qui nous intéresse, celui qui répond à la contrainte "à 5px de distance de la droite noire".

En Maths on appelle ça très littéralement "distance d'un point à une droite", et ouais ça parait con mais comment tu définis la distance d'un point à une droite? https://fr.wikipedia.org/wiki/Distan...%A0_une_droite

On a choisit de définir ça en prenant la distance la plus courte, on fait pas de virage, on veut la distance la plus courte, et c'est effectivement sur une perpendiculaire comme tu le décris. Tant qu'on est en géométrie Euclidiennes (à plat), sur une sphère ça serait différent.

Et donc maintenant si tu assembles toute tes contraintes (un système d'équations) tu vas trouver ton point.

On notera vite fait que y'a plusieurs moyens de représenter une droite, tu peux faire ça en coordonées cartésiennes (un point c'est (x, y)) ou en coordonées polaires, tu peux aussi représenter ça via des nombres complexes, au final tout ces systèmes sont équivalents, mais tes équations auront une tronche différente.

Mais bref, si tu appliques toute ces contraintes tu vas trouver le point en question
Donc tu connais déjà l'équation pour trouver la distance d'un point à une droite, donc pour n'importe quel point (disons le point (3,2)) tu peux calculer sa distance à la droite noire.

1. Commence par faire ça, *calcul pour quelques exemples*, leur distance par rapport à la droite noire, selon le système de coordonnées que tu utilises (cartésien, etc.).

Tu prends un exemple de droite noire au pif et tu calcul la distance de points au pif par rapport à cette droite.

2. Maintenant on ne veut pas n'importe quel point, on veut un point qui appartient à la droite grise.
Donc là tu peux répondre à la question comment qu'on vérifie qu'un point appartient à une droite.

Et c'est un exercice très similaire, tu as les coordonées du point (x, y), l'équation de la droite (ax + b = y), tu peux vérifier si le point appartient ou non, s'il satisfait l'équation.

3. On veut pas n'importe quel point, on veut celui qui est à 5px de distance.
(Et là juste en raisonnant avec les mains, on voit que y'a un problème, y'aura 2 points qui satisfont ces contraintes, celui devant, et celui derrière (après que les droites se croisent). Mais on va rester simple, tu pourras utiliser des ségments ou autre pour régler ça.)

Donc on veut

Un point de la droite grise (x, y), forcément il sera de la forme: m.x + p = y 
On veut la distance de (x, y) vis à vis de la droite noire (a.x + b = y)
On veut que cette distance soit 5px

Et paf ça te donnera le point que tu veux.

---

Donc en bref, pour récap. Tout va dépendre de comment tu représente tes points (coordonées polaires etc.) 

Le plus important c'est que tu t'écrives quelques exemples avec des valeurs concrètes, tu prends une droite x = y, la droite identité la plus simple possible: https://www.desmos.com/calculator/wqvwvxdl6w

tu prends un point au pif et tu calcul sa distance par rapport à la droite: https://www.desmos.com/calculator/etj6hvcnhd

Ensuite tu fais pareil mais tu prends pas des points au pif mais tu prends des points qui appartiennent à une droite donnée
par exemple 2x = y: https://www.desmos.com/calculator/9xthhbbj6b

Et maintenant tu veux pas n'importe quel point, tu veux celui (ceux) à 5px de distance.

Tu verras que ça t'écriras une formule avec une réponse, y'a que 2 points qui répondent à ces contraintes:
https://www.desmos.com/calculator/ad8yhdl7jv

Ensuite il faudra que tu gères la question de l'orientation mais c'est pas bien dur.

Bref j'essaye plus de te montrer comment raisonner car c'est sur que tu as de quoi trouver la solution, mais donc on voit:

Y'a plusieurs méthode pour résoudre ton problème, avec ton code existant et de la force brute tu aurais déjà pu résoudre le problème.
Déterminer la méthode optimale n'est pas trivial.
La plupart des gens vont te répondre avec un système d'équation où des formules parce que c'est ce qu'ils apprenent à l'école, mais c'est pas forcément les meilleurs solutions.

Si tu travailles dans un espace discret (une grille), il se peut que la solution avec des équations te fassent faire des divisions et des racines carrées, opérations couteuses, alors qu'une simple boucle for/while aurait résolu le problème.

Les équations te donneront la solution exacte, s'pour ça aussi que tout le monde répond avec ça.

Mais si tu regardes bien ce graphe: https://www.desmos.com/calculator/ad8yhdl7jv tu verras que tu sais déjà le faire

----------


## Cwningen

> Ralala la pédagogie des canards c'est pas joli


C'est dur d'expliquer les maths sans faire de maths.

Et les équations de droite ce n'est pas y = ax + b, c'est ax + by + c = 0 (et voila j'ai perdu, j'ai écrit des équations).

----------


## Cwningen

Tant qu'à écrire des équations, allons-y franchement.

J'ai deux façons pratiques pour décrire une droite qui me viennent à l'esprit :Avec un vecteur directeur (v) et un point de la droite (A), on définit les points de la droite en fonction du paramètre t : P(t) = A + t vAvec un vecteur normal (n) et un point de la droite (A), et on retrouve l'équation de droite OP.n = OA.n. (pour reprendre les lettres de mon post précédent, OP c'est le vecteur (x, y), n c'est le vecteur (a, b), OA.n c'est -c)

Dans ton cas, il me semble plus simple d'utiliser la première pour la droite grise, et la seconde pour la droite noire (pour avoir le vecteur normal, mais on peut facilement le retrouver à partir du vecteur directeur).

Le produit scalaire avec le vecteur normal unitaire permet de calculer la distance à la droite, donc pour un point B de la droite noire, on cherche t, tel que BP(t).n = 5px (ou -5px si le vecteur normal pointe de l'autre coté), tu développes ça (BP(t).n = (BA + t v).n = BA.n + t v.n), tu obtient une équation linéaire facile à résoudre (t = (5 - BA.n)/v.n, v.n est nul quand les deux droites sont parallèles).

À noter que en 3D, la première équation décrit toujours une droite, mais la seconde décrira un plan. Mais en 3D tu chercherais sûrement l'intersection d'une droite avec un plan, donc le raisonnement tient toujours.

----------


## Kamikaze

Nan nan c'est 2 représentations de la même chose oh, monsieur non mais.

a.x + b.y + c = 0 <=> y = (-a/b).x + (-c/b) <=> y = m.x + p

D'ailleurs (et je dis pas ça pour toi), mais la forme a.x + b.y + c = 0 est très mauvaise d'un point de vue pédagogique car il n'y a pas de correspondance visuelle simple entre coefficient et rendu visuel.

m.x + p = y ça veut dire que si tu bouges m la droite tourne, si tu bouges p la droite se décale, c'est simple à comprendre, tu peux voir les translations et autres opérations géométriques.

a.x + b.y + c = 0 c'est compliqué (j'exagère hein)

Si je te dis on passe de 2x + 3y + 1 = 0 à 3x + 2y + 1 = 0, est ce que tu es capable de me dire immédiatement à quelle transition géométrique ça correspond

Alors que si je dis on passe de 2x + 1 = y à 3x + 1 = y, visuellement tu vois direct

----------


## Tramb

> a.x + b.y + c = 0 <=> y = (-a/b).x + (-c/b) <=> y = m.x + p
> 
> D'ailleurs (et je dis pas ça pour toi), mais la forme a.x + b.y + c = 0 est très mauvaise d'un point de vue pédagogique car il n'y a pas de correspondance visuelle simple entre coefficient et rendu visuel.


Mais elle évite des divisions par 0, y a pas équivalence si b == 0, donc la première forme est plus versatile.

----------


## Kamikaze

Je sais je sais, j'essaye de rester simple!

On pourra faire une thèse sur les avantages calculatoires et en terme de lisibilité de tous les moyens qu'on a de représenter une droite

----------


## Cwningen

> D'ailleurs (et je dis pas ça pour toi), mais la forme a.x + b.y + c = 0 est très mauvaise d'un point de vue pédagogique car il n'y a pas de correspondance visuelle simple entre coefficient et rendu visuel.


Si, comme je l'ai dit dans le post que j'ai posté en même temps, (a, b) est un vecteur normal, c est une sorte de "distance signée" à l'origine (comptée en longueurs de (a, b)).

----------


## Kamikaze

Ouais dit comme un vecteur ça passe mieux, j'aime pas trop cette forme générale en équation

Je suis traumatisé par les profs qui introduisent la forme générale sans expliquer

----------


## Awake

:Emo: 

Merci pour vos réponses. Je suis complètement KO mais je regarderais et ferais des tests demain.

J'aurais du préciser le format de mes données : tout est en points au format { x: float, y: float }. Un segment comme le mur est juste deux points dans ce format là, pareil pour le reste. Je galère un peu à suivre vos infos avec des droites à partir de ax+b puisque ce n'est pas du tout le paradigme que j'utilise.

----------


## Lazyjoe

Tu devrais générer quelques milliers de configuration différentes, mesurer chaque solution à la main avec une règle, et donner toutes ces données à un algo de deep learning.
Tu devrais facilement générer un réseau neuronal avec 90% de reconnaissance correcte.

----------


## Cwningen

> Merci pour vos réponses. Je suis complètement KO mais je regarderais et ferais des tests demain.
> 
> J'aurais du préciser le format de mes données : tout est en points au format { x: float, y: float }. Un segment comme le mur est juste deux points dans ce format là, pareil pour le reste. Je galère un peu à suivre vos infos avec des droites à partir de ax+b puisque ce n'est pas du tout le paradigme que j'utilise.


Si tu as deux points A (x, y) et B (x', y'), le vecteur AB (x'-x, y'-y) est un vecteur directeur de la droite. Pour avoir un vecteur normal, tu prends le vecteur directeur et tu le tournes de 90°. Tourner de 90° en 2D c'est très simple, tu échanges les deux coordonnées et tu en opposes une ((x, y) devient (y, -x) ou (-y, x)). Je parlais aussi de vecteur unitaire, c'est à dire de longueur 1, il suffit de diviser chaque coordonnées du vecteur par sa longueur √(x² + y²).

----------


## Kamikaze

> Merci pour vos réponses. Je suis complètement KO mais je regarderais et ferais des tests demain.
> 
> J'aurais du préciser le format de mes données : tout est en points au format { x: float, y: float }. Un segment comme le mur est juste deux points dans ce format là, pareil pour le reste. Je galère un peu à suivre vos infos avec des droites à partir de ax+b puisque ce n'est pas du tout le paradigme que j'utilise.


C'est important que tu fasses des exemples à la main tout seul, tu vas piger tout de suite et tu gagneras l'intuition visuelle, tu peux relire mon post du dessus.

Faut que tu piges qu'une droite c'est un ensemble de point, donc si tu veux dessiner une droite, disons pixel par pixel. Il va falloir dessiner chaque point. Disons que la droite est noire, comment tu sais si tu dois peindre le pixel en noir? S'il appartient à la droite.
Comment on définit une droite? C'est le chemin le plus court entre 2 points, donc comment on avance au pixel suivant? En croissant au même rythme que la droite.

Rumine ça et ça te viendra. Tu peux penser en terme de grille si tu veux (espace discret), si t'as pas le droit de faire de diagonale, comment tu relies 2 points, tu fais un coup à droite, un coup vers le haut, un coup à droite, un coup vers le haut. Mais si c'est très penché faudra faire 2 coups vers le haut, 1 coups à droite, 2 coups vers le haut, 1 coup à droite, etc.

*Version en réutilisant ton propre code*

Tu nous as dit que tu avais déjà une fonction de détection de collision (point rouge). En imaginant que la signature c'est:

collision(segment_1, segment_2) -> point_collision { x, y }

Il te suffit de créer le segment_3 qui est décalé de 5px du segment_1

et ensuite collision(segment_3, segment_2)

Comment on décale de 5px pour obtenir segment 3? J'explique ci dessous

Point A { x1, y1 } <- (2, 1) dans l'exemple
Point B { x2, y2 } <- (3, 2) dans l'exemple

https://www.desmos.com/calculator/ekalgpvyu8

Donc si on veut appartenir à la droite définie par ces deux points, comment on vérifie ça?

Point C { x, y } <- n'importe quel point 

Il faut que l'incrément de croissance qui t'amène de A vers B ou de A vers C ou de C vers A, etc. soit le même. Quand tu traces une droite chaque point respecte la même progression, y'a pas de virage.

Donc la progression de A vers B c'est

y2 - y1 "de combien de cases je monte"
x2 - x1 "de combien de cases je vais à droite"

Et ce qu'on veut c'est "de combien de cases je monte" à chaque fois qu'on va vers la droite, donc si je vais à droite, de combien je monte pour rester sur ma droite.

On appelle ça le coefficient directeur: (y2 - y1) / (x2 - x1)

Le coefficient directeur, une division, un ratio donc, est souvent noté "m"



Donc si C appartient à la droite il faudra que (y - y1) / (x - x1) = (y2 - y1) / (y2 - y1) soit vrai, même coefficient directeur, même "croissance"/taux de progression

On applique le même raisonnement si on veut définir une droite dans un espace avec une courbature (compliqué tout ça). Tout ça pour dire que bien que ça paraisse peut être un peu bateau et exagéré, c'est le raisonnement à suivre et qui s'applique partout.

L'équation ("ensemble des points appartenant à la droite respecte:") de ma droite c'est tous les points { x, y }, tel que "la progression soit la même":

(y - y1) / (x - x1) = (y2 - y1) / (x2 - x1)

Que tu peux ré-écrire

y = ((y2 - y1).(x - x1) / (x2 - x1) + y1
y = (y2.x - y2.x1 - y1.x + y1.x1) / (x2 - x1) + y1
y = x.(y2 - y1)/(x2 - x1) + x1(y1 - y2)/(x2 - x1) + y1
y = x.m + b

Dans notre exemple

y = x.(2 - 1)/(3 - 2) + 2(1 - 2)/(3 - 2) + 1
y = x - 1

https://www.desmos.com/calculator/i5k2lzttor

Et le truc c'est que tu peux noter y = x - 1 autrement

Si on fait tout passer d'un côté on obtient la "forme générale"

x - y - 1 = 0

https://www.desmos.com/calculator/nykt5nbm9b

Que tu peux aussi voir comme le vecteur unitaire (1, 1) qui est décalé d'un cran vers le bas.

Maintenant comment j'obtiens une droite décalée de 5 px? Très simple

y = x - 1

Si je décale d'un cran vers le haut

y = x - 1 + 1
y = x

si je décale d'un cran vers le bas

y = x - 1 - 1
y = x - 2

https://www.desmos.com/calculator/406gzqkwcc

Donc tu peux faire le va et vient entre les différentes représentations d'une droite, via 2 points et via la formule avec le coefficient directeur.

https://www.desmos.com/calculator/wch4ma26dd

*Version équation*

De manière générale pour calcule la distance d'un point à une droite on utilise ça: https://fr.wikipedia.org/wiki/Distan...%A0_une_droite



Je passe la preuve, mais en gros c'est pythagore, tu peux avoir une intuition en comprenant que pour aller de A vers B il faut faire une diagonale (un coup vers la droite, un coup vers le haut, un coup vers la droite, etc...)



Donc maintenant, tu sais que ton point appartient à une droite (ou un segment, un segment c'est comme une droite mais avec une limite pour x et y)
y = m.x + p

Et tu sais qu'il est à une distance de 5 px d'une autre droite

5 = ((x2 - x1)(y1 - y) - (x1 - x)(y2 - y1)) / sqrt((x2 - x1)² + (y2 - y1)²)

Tu as 2 équations et 2 inconnues, tu trouveras ton (tes) points en resolvant ce système, tu cherches x et y qui satisfont ces équations, le point vert { x, y }.

Pour résoudre le système tu peux remplacer y par sa valeur (m.x + p)

- - - Mise à jour - - -

Et sinon pour terminer. Dans mon post initial, mes délires de "tu peux le faire avec une boucle for/while", j'évoque des algos de ce genre, que tu pourrais programmer par toi même à coup sûr, sans avoir à réflechir en terme de notations mathématiques

----------


## Cwningen

Je crois que les profs de maths de Kamikaze vont également me traumatiser.

----------


## Shinosha

Moi qui passe sur le topic en espérant que ça parle d'autre chose que de trucs bas niveau pour une fois

----------


## war-p

Je crois surtout que kamikaze s'est trompé de topic  ::ninja::

----------


## Tramb

> Tu devrais générer quelques milliers de configuration différentes, mesurer chaque solution à la main avec une règle, et donner toutes ces données à un algo de deep learning.
> Tu devrais facilement générer un réseau neuronal avec 90% de reconnaissance correcte.


C'est moche ce que tu fais. Moche et cruel.
Et drôle et vrai.

----------


## rOut

> Bonjour à tous,
> 
> Je viens quemander un peu d'aide sur un soucis plus mathématique que de programmation, si quelqu'un à un peu de temps pour m'aider. Je serais bien allé demandé sur le topic des maths mais ils m'auraient donné des equations que j'aurais été incapable de transformer en code. Je pense que le problème est très simple, mais je n'ai pas le bagage scolaire pour pouvoir le résoudre .
> 
> https://cdn.discordapp.com/attachmen...vector-cpc.png
> 
> Il y a un système de collision entre deux segments (les lignes grises et noires). Le segment noire représente un mur, le segment gris est la trajectoire que fait le point (=son déplacement) qui ne doit pas traverser le mur. Le point rouge celui ou les deux segment se rencontrent (point de collision). Le point bleu est celui que le point avait avant le déplacement.
> 
> J'aimerais trouver les coordonnées du point vert, qui devrait être le long du segment gris ( = le déplacement du point), mais à une distance de 5 du mur, et perpendiculaire à celui-ci.
> ...


Bah sinon tu décales ton mur de 5px du coté qui t'intéresse et puis tu fais ton truc pour trouver le point rouge sur ce nouveau mur. Voilà.

----------


## Nilsou

> Moi qui passe sur le topic en espérant que ça parle d'autre chose que de trucs bas niveau pour une fois
> 
> https://c.tenor.com/QpE0PLZiQEUAAAAC...-by-50cent.gif


Je ne sais pas si on peut parler de bas niveau pour la distance d'un point à une droite  ::P:

----------


## Kamikaze

> Bah sinon tu décales ton mur de 5px du coté qui t'intéresse et puis tu fais ton truc pour trouver le point rouge sur ce nouveau mur. Voilà.


Ouais, c'est la première réponse que j'ai donné, mais les vilains canards se moquent de mes posts plein d'amour  :Emo: 

- - - Mise à jour - - -

J'ai développé en détail parce que si tu choppes pas le cheminement type, le raisonnement pour ce genre de problème, tu seras au même point une fois confronté au problème suivant

Genre passage en 3D, collisions de polygones, prise en compte de la vélocité et j'en passe

----------


## Teocali

> Je ne sais pas si on peut parler de bas niveau pour la distance d'un point à une droite


Ben non, c'est des maths. C'est telllement haut niveau que y'a plus de code  ::P:

----------


## rOut

> Ouais, c'est la première réponse que j'ai donné, mais les vilains canards se moquent de mes posts plein d'amour 
> 
> - - - Mise à jour - - -
> 
> J'ai développé en détail parce que si tu choppes pas le cheminement type, le raisonnement pour ce genre de problème, tu seras au même point une fois confronté au problème suivant
> 
> Genre passage en 3D, collisions de polygones, prise en compte de la vélocité et j'en passe


Bah certes mais le gars vient ici parce que les équations lui font peur et il se tape une tartine de maths en réponse.

----------


## Awake

Bon j'ai trop forcé ces derniers temps et je suis beaucoup trop éclaté pour pouvoir donner suite à ce problème. Heureusement je pars en vacances deux semaines et à mon retour je compte bien résoudre tout ça.

La solution de faire un segment parallèle à 5px et de recalculer la collision semble la plus simple pour l'instant.

En tout cas merci beaucoup pour toutes vos reponses (je m'attendais vraiment pas à ça), et plus spécialement à Kamikaze qui s'est vraiment cassé la tête pour donner des infos complètes.

----------


## Kamikaze

Nan nan y'a 0 math dans le premier post.
Dans le deuxième post y'a la réponse "classique" que la plupart des canards évoquent en utilisant uniquement les points sous forme { x, y }, tu peux copier coller l'équation à la fin directement dans le code sans la simplifier et ton code te donnera le fameux point vert.
Y'aura 2 points parce que y'a de la racine carré (on rappelle que racine(4) c'est 2 ou -2 grosso merdo), il faudra choisir le point du bon côté du mur. Obligé il va y arriver.

HEIN Awake, j'te mets pas la pression  ::ninja:: 

Le truc que je suggère dans le premier post c'est qu'il fasse une implémentation brute, recherche dichotomique ou autre, sans équation. Voire même une boucle qui parcourt toute la droite. N'importe quoi, mais une solution qui fonctionne. Ca aide à se débloquer, bonne habitude à prendre.

Puis z'avez pas cliqué sur les liens, y'a que des dessins avec les équations correspondantes, c'est simple à comprendre

----------


## GrandFather

Et si on demandait à ce bon vieux Thalès ce qu'il en pense ?  ::): 



Si BD et CE sont parallèles, alors (théorème de Thalès) BD/CE = AB/AC.

On connait BD, CE se calcule facilement (formule de la distance d'un point à une droite donnée par Kamikaze), on peut donc calculer le rapport K = BD/CE.

Pour obtenir les coordonnées du point B : Xb = (Xa + Xc) * K ; Yb = (Ya + Yc) * K

----------


## Shinosha

Salut les canards, j'ai besoin d'aide pour calculer la tangente de la fessée que Kamikaze va prendre sur SFVI  ::trollface::

----------


## Kamikaze

Va d'abord falloir engager une brigade anti nuisible pour débarasser ton stick de la poussière et de la faune qui s'y sont développées

- - - Mise à jour - - -




> Et si on demandait à ce bon vieux Thalès ce qu'il en pense ? 
> Si BD et CE sont parallèles, alors (théorème de Thalès) BD/CE = AB/AC.
> 
> On connait BD, CE se calcule facilement (formule de la distance d'un point à une droite donnée par Kamikaze), on peut donc calculer le rapport K = BD/CE.
> 
> Pour obtenir les coordonnées du point B : Xb = (Xa + Xc) * K ; Yb = (Ya + Yc) * K


Je comprends totalement la réponse mais blague à part, Thales c'est une solution ponctuelle s'pour ça que j'aime pas, si tu suis le raisonnement correct tu peux remplacer la droite par une courbe et ça fonctionnera encore. Tu peux te mettre en géométrie sphérique et le raisonnement tiendra encore, passer en 3D, introduire le temps/mouvement et le raisonnement tiendra encore, etc.

En 2D, dans ce cas simple, la contrainte c'est d'appartenir au segment et d'appartenir à l'ensemble des points à 5px de l'autre segment, ce qui est la définition d'une droite parallèle.

Si on passe à une courbe plutot qu'à un segment (déjà Thales ça marche plus) bah il faudra appartenir à la courbe et à l'aure ensemble, etc. Si on passe à une droite en géométrie non euclidienne il suffit de remplacer par l'équation correspondante et ça change rien.

Aussi contextuellement on voit bien qu'il est genre sur un moteur de jeu 2D ou autre, donc plus approprié d'avoir une brique réutilisable plutôt que "Thales".
D'ailleurs s'même pas Thales qu'a écrit ce théorème, c'est vraiment le pire théorème quelque part  ::ninja::  on apprend ça aux enfants sans réflechir à pourquoi.
Thales c'est plus de l'histoire des sciences qu'un théorème intéressant. Dans le contexte historique l'outil est intéressant et a du sens. Pour apprendre les maths c'est totalement obsolète.

En plus en programmation tu peux injecter des fonctions ou des ensembles etc., donc il pourrait même (avec du temps) arriver à un truc hyper généraliste du genre

collision<trajectoire, trajectoire>(t1, t2), où les trajectoires peuvent être des équations, des ensembles de points, etc., de dimension n, dans n'importe quelle géométrie, etc.

Je sais que je pars un peu loin mais le sujet de l'éducation me passione et je suis pas fan du cursus typique actuel où on enseigne des recettes de cuisine.

----------


## Nilsou

Après si c'est un truc qui doit tourner en boucle, le bon réflexe n'est-il pas de choisir la solution la plus efficace calculatoirement ? Et dans ce cas, amha, c'est certainement l’équation.

----------


## Kamikaze

Nope, ça va bien sûr dépendre du processeur et de tout un tas de variables. Par exemple est ce qu'on veut une valeur exacte ou approximative. Mais on rappelle que John Carmack s'est fait un nom avec sa fameuse optimisation de l'inverse de la racine carrée




> float Q_rsqrt( float number )
> {
> 	long i;
> 	float x2, y;
> 	const float threehalfs = 1.5F;
> 	x2 = number * 0.5F;
> 	y  = number;
> 	i  = * ( long * ) &y;                      
> 	i  = 0x5f3759df - ( i >> 1 );                
> ...


Et c'est ce que je disais dans mon tout premier post en réponse à la question: le plus compliqué dans cette question c'est le contexte.

Si tu fais un simulateur de particules avec 10 millions d'entités, à coup sûr la solution avec l'équation sera pourrave en terme de performance et de toute façon tu ne voudras pas une solution exacte.
Genre si tu simules un nuage de poussière. Et il faudra prendre en compte les intéractions des particules entre elles, donc tu voudras souvent agglomérés les intéractions et simplifier car sinon c'est trop dur et sous optimal de considérer chaque particule isolée vis à vis de toutes les autres.

Si tu fais un jeu genre Mario qui saute et on veut pas qu'il traverse ou clip avec les murs, du coup distance de 5px, ça peut aller de résoudre l'équation.
Mais le calcul flottant sur les PC c'est toute une histoire.

Donc tout ça pour dire que c'est vraiment pas une question si simple et ça dépend vachement du cas d'utilisation.
Faut pas oublier qu'un écran de PC même haute résolution ça sert rarement de faire du calcul exact, t'as un pixel entier d'erreur (je simplifie) disponible, c'est discret

Si tu fais du calcul pour envoyer une fusée sur la Lune, il se peut que les équations soient exactes, mais instables, et tu préféreras peut être un truc plus lent d'un point de vue calculatoire, mais stable.

C'est quelque chose de très connu et ça a causé des catastrophe genre des missiles qui ratent leur cible etc.

On rappelle que la simple addition de 2 nombres à virgule n'est pas associatif en programmation par exemple, on est sur le topic de la prog, pas sur le topic des maths!

Donc tu ne peux pas avoir des considérations purement mathématiques ouais, il faut avoir ces considérations calculatoires, et je pense pas que la réponse soit simple.

J'peux pas le prouver en 2 minutes, mais je parierais bien qu'une simple recherche dichotomique serait potentiellement plus rapide qu'une implémentation naive de l'équation, particulièrement dans un espace discret

----------


## Awake

C'est une fonction qui va tourner jusqu'à 60 fois par seconde dans un browser (ordi ou mobile).

----------


## GrandFather

> Pour apprendre les maths c'est totalement obsolète.


 :tired:  Thalès, _c'est_ des maths, avec une démonstration formelle du théorème par Euclide. Je sais que la géométrie c'est has been, et que du coup on en arrive à la blague de Lazyjoe.

Maintenant, replaçons le contexte, je ne pense pas qu'il soit dans l'intention d'Awake de développer un moteur 2D/3D universel prenant en compte les espaces non-euclidiens, l'hygrométrie et l'âge du capitaine. Il a un problème simple pour lequel il demande une réponse simple, reposant sur les données dont il dispose (les coordonnées des points A et C, et celles des deux points extrémités d'un segment du mur). S'il y a plus direct que la solution à base de 3 calculs simples que j'ai donnée, je serai content de la connaître.  ::):

----------


## Kamikaze

Nan nan tu me méprends GrandFather, ta réponse y'a aucun problème, j'explique simplement pourquoi je développe et généralise, le prend pas mal haha
J'ai mis les pincettes en début de post en plus

Avec Thales t'arrives à la bonne réponse dans ce cas particulier y'a pas de problème, j'dis juste que si on modifie le problème légèrement tu te retrouves avec une solution obsolète dure à ré adapter.

Et si t'as pas la culture nécessaire, et que t'es confronté à un problème que tu connais pas (comme Thales), j'ai pas envie de dire "bah faut connaitre Thales"

Et ce que j'ai fait c'est de la géométrie hein, analytique mais géométrie quand même.

----------


## GrandFather

Ok, je range mes équerre et compas de combat.  :^_^: 




> Et si t'as pas la culture nécessaire, et que t'es confronté à un problème que tu connais pas (comme Thales), j'ai pas envie de dire "bah faut connaitre Thales"


Et pourtant, dans la catégorie de problèmes tels que celui exposé par Awake, conjointement avec Pythagore, de la trigonométrie, et deux ou trois autres théorèmes, tu te sors de la majorité des difficultés rencontrées, avec un code relativement simple et des connaissances de niveau Lycée grand maximum. Après, si ça se complique davantage, ou si les performances entrent en ligne de compte, il peut alors être effectivement intéressant de recourir à des algos spécialisés et optimisés. Mais la sur-ingénierie est une tentation contre laquelle il faut lutter.  ::):

----------


## Kamikaze

Pouah d'ailleurs pour reprendre sur LazyJoe.

Aujourd'hui au taff y'a un petit jeune qui vient me voir. Il me dit voilà on a un set de données, en gros c'est des inputs d'un controlleur. J'peux pas en dire trop car cybersécurité tout ça.

Mais bref c'est des inputs d'un controlleur, et en gros on veut détecter si quelqu'un de non autorisé fait de la merde avec. Et t'as genre 1000 inputs par seconde maximum, rien de très élevé, voire même jusqu'à seulement une dizaine d'input par seconde.

Et le mec me fait "ouais ça vous dérange si on implémente ça avec un réseau de neurone", "on voudrait utiliser tensor flow"

Là je lui ai mis la main sur l'épaule et je lui ai dit, "écoute tu penses pas qu'on pourrait commencer avec de l'analyse statistique, analyse de patterns et autres trucs basique, je suis sûr qu'on aura de meilleurs résultats, et on a queudalle de donnée, t'as vu la dimensionalité du problème, tu vas faire un modèle sur quoi, et on fait de l'embarqué aussi, y'a pas la place pour ta lib mon copain"

En plus y'a que certains points dans le temps qui sont intéressant à analyser, analyser tout l'input en continu est inutile, la majorité du temps c'est idle. Bref je lui ai expliqué gentiment et il m'a dit "ouais on va peut être commencer avec de l'analyse statistique"

Tout n'est pas perdu, mais ils me rendent fous avec leurs machine learning de merde là où ça n'est pas approprié

Le mec est Data Scientist en plus, ça me saigne

----------


## Nilsou

Hum, je ne sais pas pourquoi ce ne serait pas approprié en soi. 

Je ne connais pas quel est ton cas pratique, mais pragmatiquement si tu veux distinguer deux usages via des entrées, il n'y a rien de mieux que des réseaux de neurones. C'est même presque l'application de référence. 

Certes, en embarqué il ne faut, à mon avis, pas utiliser les implémentations existants sous Python et faisant le café des grains à la tasse. C'est pas adapté, c'est crade, c'est salle, et en général les gens bidouille avec sans comprendre. Mais un simple réseau multicouche, ou un Kmean conjugué à un perceptron (mono ou multicouche), ça fait parfaitement le taf. Ça se code en C en quelques minutes, c'est propre, efficace. (je fais du réseau de neurone sur robot, j'ai l'habitude de ce genre de contrainte)

Tu peux sous échantillonner le signal d'entrée de la même manière que pour les analyses statistiques. Inutile de tout donner à manger au réseau tant que ça reste pertinent.

Après si tu cerne toi même pertinemment la règle qui te permet de déterminer l'usage non autorisé ou autorisé, inutile de pondre quoique ce soit : tu écris la règle en dur avec des seuils et basta. Mais si tu ne la cerne pas et que t'a juste des exemples sous la main : inutile de te prendre le chou avec des analyses statistiques qui seront parfois plus lourde qu'un simple truc genre Kmean + perceptron mono couche pour des résultats souvent moins malins. 

En fait le trèèèèèèèès gros soucis de 99% des gens qui sortent de formation avec un peu d'IA dedans, c'est qu'au lieu de voir les bases de l'IA et les bibliothèques comme un cas d'application mais qu'a coté ils savent coder le truc à la main tranquille,  dans la très large majorité des cas les mecs ne comprennent pas le fonctionnement d'un unique neurone de type perceptron mono-couche, et je ne te parles même pas de truc plus exotique qui ont pourtant tout leur intérêt (Kohonen, hopfield et cie) : ils n'ont appris que des « recettes » par cœur, constituées de la bibliothèque de google et cie et leurs formalismes, bien pratique certes, mais qui viennent contraindre leur raisonnement la plupart du temps, sans parler de leur capacité à saisir ce qui se passe en interne de la bibliothèque. 

Vrai histoire : J'ai fait passer une soutenance à des M2 en IA où les mecs ne savaient pas ce qu'était le taux d'apprentissage (alors qu'ils faisaient des applications complexe avec les biblio de Google Facebook et cie). Une blague.

Donc oui le réflexe : je vais faire un truc avec tensor flow, c'est souvent un symptôme très moderne de l'ingé nimp qui apprend plein de bouts de trucs sans les comprendre. Je luttes contre ça dans l'école où j'enseigne, mais un peu en vain pour le moment.




> J'peux pas le prouver en 2 minutes, mais je parierais bien qu'une simple recherche dichotomique serait potentiellement plus rapide qu'une implémentation naive de l'équation, particulièrement dans un espace discret


T'as raison sur le cas général, mais là sur le cas particulier je demande à voir. L'équation est trop simple pour qu'un processeur moderne exécute plus rapidement une boucle de recherche. Amha.

----------


## Wobak

> Bah certes mais le gars vient ici parce que les équations lui font peur et il se tape une tartine de maths en réponse.


Tellement  ::XD::

----------


## Wobak

_Awake venant trigger les matheux sur le topic de la programmation, illustration_

----------


## gros_bidule

Après, est-ce que les gens (devs et recruteurs) savent vraiment ce qu'est l'IA ?
Combien de fois j'ai répondu à des offres pour du dev de backend Java, d'API, enfin des trucs qui demandent à peine de savoir faire une multiplication, et combien de fois le type en face me dit "_cool, super impressionnant ton CV. Au fait, tu ne ferais pas aussi de l'IA ? On cherche un profil qui pourrait faire les deux_".
Les mecs donnent l'impression que l'IA c'est comme apprendre Kubernetes ou Angular, il suffirait de lire un bouquin quelques soirs pour maîtriser la chose...  ::O:  Après le dev fullstack ou le devops, tu as le dev fullstack-devops-IA... j'ai oublié blockchain ? ^^

----------


## Helix

> Je ne connais pas quel est ton cas pratique, mais pragmatiquement si tu veux distinguer deux usages via des entrées, il n'y a rien de mieux que des réseaux de neurones. C'est même presque l'application de référence.


C’est une affirmation très arbitraire, pas vraiment fondée et qui reste à prouver. Je connais pas mal de cas où les performances des réseaux de neurones sont inférieures à d’autres approches. C’est certainement la méthode à la mode pour diverses raisons dont la possibilité de bonnes performances sans nécessiter une analyse trop poussée.

Le gros écueil reste encore l’intelligibilité de la décision (il est très fréquent que les réseaux se focalisent sur des biais, et pas sur les données pertinentes) et surtout l’absence de garantie de perf. C’est là où l’analyse stat est bien supérieure car elle va permettre de prouver (mathématiquement) un taux de bonne détection. Avec le réseau de neurone, on ne peut quasiment que constater empiriquement des perfs vs un jeu de données particulier.

Les approches type réseaux sont très sympas, ça marche souvent bien, mais c'est un gros raccourci de dire qu'il n'y a rien de mieux.

----------


## Tramb

> Tout n'est pas perdu, mais ils me rendent fous avec leurs machine learning de merde là où ça n'est pas approprié
> 
> Le mec est Data Scientist en plus, ça me saigne


Je vis cette scène assez régulièrement, compassion.

----------


## Orhin

> Les mecs donnent l'impression que l'IA c'est comme apprendre Kubernetes ou Angular, il suffirait de lire un bouquin quelques soirs pour maîtriser la chose...


Le mec qui maitrise Angular en quelques soir je l'attend.  :tired: 
Mais sinon assez d'accord avec le reste de ton post.

Vu qu'on parle d'IA/réseau de neurones, j'en profite pour poster les 2 dernières vidéos de Passe-Science qui traite du sujet :







Comme d'hab avec cette chaine c'est rudement bien foutu (et y'a quelques exemples bluffant de réalisations récentes).

----------


## Nilsou

> Après, est-ce que les gens (devs et recruteurs) savent vraiment ce qu'est l'IA ?
> Combien de fois j'ai répondu à des offres pour du dev de backend Java, d'API, enfin des trucs qui demandent à peine de savoir faire une multiplication, et combien de fois le type en face me dit "_cool, super impressionnant ton CV. Au fait, tu ne ferais pas aussi de l'IA ? On cherche un profil qui pourrait faire les deux_".
> Les mecs donnent l'impression que l'IA c'est comme apprendre Kubernetes ou Angular, il suffirait de lire un bouquin quelques soirs pour maîtriser la chose...  Après le dev fullstack ou le devops, tu as le dev fullstack-devops-IA... j'ai oublié blockchain ? ^^


Ça dépends, mais normalement les écoles d'ingé orientée devs pourraient proposer une formation pertinente en IA. Mais ce n'est pas ce qu'elles font vraiment.




> C’est une affirmation très arbitraire, pas vraiment fondée et qui reste à prouver. Je connais pas mal de cas où les performances des réseaux de neurones sont inférieures à d’autres approches. C’est certainement la méthode à la mode pour diverses raisons dont la possibilité de bonnes performances sans nécessiter une analyse trop poussée.


C'est une affirmation basée sur 10 ans à faire de la recherche et à intégrer des réseaux de neurones sur de l'analyse comportementale et sur de la commande robotique. C'est pas vraiment « arbitraire ». 
Les réseaux de neurones ne sont pas bons dans tout, mais quand il s'agit, comme dans le cas de Kamikaze, de différentier un comportement A d'un comportement B, c'est presque le cas d'usage type de là où l'outil est imbattable. En général dès qu'on parle de « reconnaissance », il n'y a pas photo. Sauf si tu as une idée précise des critères à viser, le réseau de neurone sera le grand gagnant. 




> Le gros écueil reste encore l’intelligibilité de la décision


Absolument pas un écueil si tout ce qui t’intéresse c'est le résultat. 95% des cas en pratique quoi. Surtout en ingénierie. Et en général une personne proprement formée en réseau de neurones sait ce qu'il se passe dans l'architecture qu'il a pondu. La boite noir imbitable c'est sur du deep learning avec tout pleins de couches. En dessous on comprends très souvent la nature des opérations effectuées. 




> (il est très fréquent que les réseaux se focalisent sur des biais, et pas sur les données pertinentes)


C'est pas « très fréquent », c'est fréquent quand on ne sait pas manipuler proprement l'outil. Le reste du temps c'est purement accessoire, et j'ai même jamais vu ça quand il s'agissait de discriminer deux actions/comportements, pas dans mes travaux en tout cas etc. 




> et surtout l’absence de garantie de perf.


Je ne connais aucun algorithmique qui te garantisse une perf en discriminant deux comportements...

----------


## Helix

> C'est une affirmation basée sur 10 ans à faire de la recherche et à intégrer des réseaux de neurones sur de l'analyse comportementale et sur de la commande robotique. C'est pas vraiment « arbitraire ».


Sacré argument. Je te retourne que ça fait 25 ans que je fais de la recherche (analyse et traitement des signaux et images numériques) et j'ai un avis différent. Alors ?




> Les réseaux de neurones ne sont pas bons dans tout, mais quand il s'agit, comme dans le cas de Kamikaze, de différentier un comportement A d'un comportement B, c'est presque le cas d'usage type de là où l'outil est imbattable. En général dès qu'on parle de « reconnaissance », il n'y a pas photo. Sauf si tu as une idée précise des critères à viser, le réseau de neurone sera le grand gagnant.


Souvent =/= toujours.




> Absolument pas un écueil si tout ce qui t’intéresse c'est le résultat.


Je te dis que le problème de la compréhension de la décision et tu me réponds que si seul le résultat t'intéresse ce n'est pas un soucis. Ben oui forcément.
Encore que si ta décision vient à défaillir, tu seras bien content de pouvoir comprendre comment elle est prise.





> C'est pas « très fréquent », c'est fréquent quand on ne sait pas manipuler proprement l'outil. Le reste du temps c'est purement accessoire, et j'ai même jamais vu ça quand il s'agissait de discriminer deux actions/comportements, pas dans mes travaux en tout cas etc.


Pas dans les tiens, tant mieux. Mais dans les miens c'est fréquent. Exemple : détection d'images falsifiées. Si tu ne fais pas gaffe, ton algo va construire une décision sur des données non pertinente (un biais dans la construction de la base d'apprentissage, genre la taille de l'image pour caricaturer) et donc ne te sert à rien. 




> Je ne connais aucun algorithmique qui te garantisse une perf en discriminant deux comportements...


Je te conseille alors de lire la littérature sur les tests d'hypothèses statistiques.

----------


## Nilsou

> Sacré argument. Je te retourne que ça fait 25 ans que je fais de la recherche (analyse et traitement des signaux et images numériques) et j'ai un avis différent. Alors ?


Ben alors on est pas d'accord  ::siffle::  
Et sinon bon, en reconnaissance, faut faire un peu ton deuil, les réseaux de neurone explose tout dans le domaine depuis quelques années déjà amha ... 




> Souvent =/= toujours.


Très souvent. Bien suffisant pour conseiller la méthode par rapport à une autre. D'autant plus quand elle est très simple à implémenter.




> Je te dis que le problème de la compréhension de la décision et tu me réponds que si seul le résultat t'intéresse ce n'est pas un soucis. Ben oui forcément.
> Encore que si ta décision vient à défaillir, tu seras bien content de pouvoir comprendre comment elle est prise.


Ça dépends vraiment de ton application. Et en réseau de neurone, sur des réseaux bien conçu, c'est aisé de comprendre, dans pas mal de cas, ce qu'ont en commun les cas foireux. Si on progresse très régulièrement sur les reconnaissance jusqu’à atteindre des niveaux qui explose ce que les êtres humains sont capable de faire sur des cas complexe, c'est pas en changeant les trucs au petit bonheur (enfin, pas toujours  ::ninja::  ) .
De manière générale, dans plein de cas pratique, on s'en fiche un peu. On faisait même dès les années 90 de la reconnaissance de faux billets dans les banques suisses avec des réseaux de neurones minimalistes, ça marchait très bien avec des résultats indécents. Et quand y'a une erreur, ben ma fois il y a une erreur, mais comme pragmatiquement les autres algo ne font pas mieux... 

C'est sur que pour un matheux, le concept fait mal  ::ninja::  




> Je te conseille alors de lire la littérature sur les tests d'hypothèses statistiques.


Ça te permet de chiffrer à quelle point tu penses que c'est juste ou faux par rapports aux populations précédentes. Ça ne te permets pas vraiment de garantir quoique ce soit à 100% à ma connaissance et encore moins de garantir ton chiffrage si la population change drastiquement (ce qui est déjà le problème avec les réseaux de neurones)... Ça te permets de te rassurer quoi  ::ninja::  
Avec un réseau de neurone sur un suffisamment grand nombre d'échantillon tu peux également établir une forme de chiffrage, empirique certes, mais bien souvent ça fait parfaitement le taf.

M'enfin, je ne suis pas expert en test statistique, je veux bien te croire si tu me dis que ça a bien avancé dans le domaine. 

Néanmoins je persiste à dire que pour les cas de reconnaissance de comportement, et de reconnaissance en général, les réseaux de neurones ça explose tout, c'est l'outil qui est véritablement conçu pour.

----------


## Teocali

> Hum, je ne sais pas pourquoi ce ne serait pas approprié en soi.


Le rapport cout/benefice par rapport a la solution statistique, tout simplement ? Ou autrement dit "le mieux est l'ennemi du bien" ?

Dans l'industrie, y'a pas que le resultat qui compte, y'a aussi les coûts pour le mettre en place

----------


## Nilsou

> Le rapport cout/benefice par rapport a la solution statistique, tout simplement ? Ou autrement dit "le mieux est l'ennemi du bien" ?


Tu parles de quoi pour ton cout ou ton bénéfice ? Si c'est calculatoire, un petit réseau de neurone tourne parfaitement en embarqué à moindre cout pour la détection d'anomalie. C'est même une application de référence aujourd'hui, et c'est déjà appliqué ainsi depuis une 20ene d'année. 
Sinon je ne sais pas trop de quoi tu parles  ::unsure:: 

Si c'est en temps : à partir du moment ou tu disposes déja de ta base, le cout de la mise en place est presque nulle. C'est l'une des solutions les moins couteuses. C'est pour ça que c'est utilisée comme une boite noir par de plus en plus d'ingénieur qui bidouille avec : c'est parce que c'est tout à fait possible de bidouiller un machin qui marche en 30 minutes pour un stagiaire de M2.

----------


## Teocali

> Tu parles de quoi pour ton cout ou ton bénéfice ? Si c'est calculatoire, un petit réseau de neurone tourne parfaitement en embarqué à moindre cout pour la détection d'anomalie. C'est même une application de référence aujourd'hui, et c'est déjà appliqué ainsi depuis une 20ene d'année. 
> Sinon je ne sais pas trop de quoi tu parles 
> 
> Si c'est en temps : à partir du moment ou tu disposes déja de ta base, le cout de la mise en place est presque nulle. C'est l'une des solutions les moins couteuses. C'est pour ça que c'est utilisée comme une boite noir par de plus en plus d'ingénieur qui bidouille avec : c'est parce que c'est tout à fait possible de bidouiller un machin qui marche en 30 minutes pour un stagiaire de M2.


En terme de coût je parle de l'effort de mise en place, en temps, en effort d'apprentissage, tout ça. 
Si tu n'as pas la base, comme tu dis, que tu n'as jamais fait ça en milieu pro,  et que personne dans ta boite n'a les compétences pour te former et/ou t'encadrer sur le sujet, ben, ouais, dans ce cas, une solution moins que parfaite mais bien suffisante peut valoir le coût, oui.

Mieux vaux une bonne solution rapidement qu'une solution parfaite qui arrive trop tard, pour faire simple. Et merci Patton.

----------


## Nilsou

> En terme de coût je parle de l'effort de mise en place, en temps, en effort d'apprentissage, tout ça. 
> Si tu n'as pas la base, comme tu dis, que tu n'as jamais fait ça en milieu pro,  et que personne dans ta boite n'a les compétences pour te former et/ou t'encadrer sur le sujet, ben, ouais, dans ce cas, une solution moins que parfaite mais bien suffisante peut valoir le coût, oui.


Effectivement, je parlais évidemment dans le contexte ou quelqu'un a eu une solide formation dans ce domaine. Sinon c'est ridicule de tenter de bidouiller un truc sans le comprendre. Surtout que les réseaux de neurones, amha, faut avoir pas mal manipulé pour dégager une certaine connaissance et intuition du fonctionnement de l'outil. 
Après, normalement, tu as de plus en plus de jeunes qui vont débarquer qui maitriserons un brin le machin, amha c'est possible d'en tirer quelque chose dans certains cas d'application typique.

Pour la base d'apprentissage c'est un vrai problème, le top c'est de mettre en place des solutions qui se nourrissent d'elles même en fonctionnement. Comme ça s'améliore tranquillement au fil du temps.

----------


## Orhin

> La boite noir imbitable c'est sur du deep learning avec tout pleins de couches.


Sachant qu'en vrai, t'as rarement juste ça.
Les architectures internes sont choisies justement pour répondre à des problèmes plus ou moins spécifiques (cf les 2 vidéos de *Passe Science* juste au dessus).

----------


## Nilsou

Oui bien entendu. 
Je simplifiais. 

Après faut relativiser, certaines architecture comme celles des deux vidéos au dessus sont effectivement conçues de manière plus complexe (et je ne bosse personnellement que sur des archis complexes) mais y'a plein de cas où c'est quelques couches, de tailles différentes, avec un vague pré-traitement et basta. 

Y'a même quelques cas ou c'est une couche combinée avec un categoriseurs et voila, ça marche dans pas mal de cas de cas d'application : rapide à mettre en place, cout calculatoire ridicule.

----------


## TwinBis

Tu me recopieras 100 fois l'adage "quand on a un marteau, tous les problèmes ressemblent à des clous".  :;):

----------


## Teocali

> Tu me recopieras 100 fois l'adage "quand on a un marteau, tous les problèmes ressemblent à des clous".


Là, c'est plutot que quand t'as une perceuse-visseuse multi-fonction a debrayage electronique, tu tiens absolument a l'utilisé pour enfoncer un bete clou :D

----------


## rOut

> Je vis cette scène assez régulièrement, compassion.


Non, c'est bien fait pour vous.

----------


## Helix

> Et sinon bon, en reconnaissance, faut faire un peu ton deuil, les réseaux de neurone explose tout dans le domaine depuis quelques années déjà amha ...


Les résultats bruts sont bons enn général c'est certain mais il y a encore pas mal de points à améliorer. Ce n'est pas la panacée.
Et puis il n'y a pas que la reconnaissance dans les sujets que l'on évoque et ceux réclament des solutions.




> Ça te permet de chiffrer à quelle point tu penses que c'est juste ou faux par rapports aux populations précédentes. Ça ne te permets pas vraiment de garantir quoique ce soit à 100% à ma connaissance et encore moins de garantir ton chiffrage si la population change drastiquement (ce qui est déjà le problème avec les réseaux de neurones)... Ça te permets de te rassurer quoi


Non, ce n'est pas du tout ça. En gros, par une étude de ton système tu prouves que tes données suivent une loi de probabilité connue et que ton hypothèse H0 (bonnes données) est représentée par des valeurs fixes de paramètres de ta distribution. En cas d'anomalie, tu t'écarte soit de ces valeurs, soit de la forme de ta distribution. Ce qui te permet de construire un test d'hypothèse, ce qui te permet de garantir des taux de perfs. La limite est ta capacité à 1/ modéliser ton système et 2/ avoir peu de paramètres sur ta loi car sinon ton test d'hypothèse est impossible à construire.

----------


## Lazyjoe

> Là, c'est plutot que quand t'as une perceuse-visseuse multi-fonction a debrayage electronique, tu tiens absolument a l'utilisé pour enfoncer un bete clou :D


Si ta perceuse est à percussion, ça fonctionne pas si mal !  ::ninja::

----------


## Nilsou

> Tu me recopieras 100 fois l'adage "quand on a un marteau, tous les problèmes ressemblent à des clous".


Je suis désolé, mais les problèmes de type « je souhaite discriminer une catégorie de comportement/visage/sons/videos/tuti-quanti A d'une catégo de comportement/visage/sons/videos/tuti-quanti B », c'est quand même très spécifiquement le clou parfait pour l'outil en question  ::P:  
C'est encore plus vrai quand il s'agit d'une catégorie floue comme un « mauvais » comportement, sur quelque chose de déjà complexe (comme un « comportement ») etc, pour lesquelles tu n'a qu'une connaissance humaine en amont. 

Je suis le premier à critiquer le mauvais usage des réseaux de neurones, mais faut pas déconner : sur ce type de problème précis, c'est totalement adapté. C'est LE cas réseau de neurone. Tu ne peux pas faire plus adapté à vrai dire. C'est sur ce cas précis que les réseaux de neurones défoncent tout (humain inclut au passage). 




> Les résultats bruts sont bons enn général c'est certain mais il y a encore pas mal de points à améliorer. Ce n'est pas la panacée.
> Et puis il n'y a pas que la reconnaissance dans les sujets que l'on évoque et ceux réclament des solutions.


C'était le cas présenté par Kamikaze en l’occurrence, et le seul que je traitais. 
Pour le reste bien entendu qu'il ne faut pas utiliser les réseaux de neurone dans tout plein d'autres cas.




> Non, ce n'est pas du tout ça. En gros, par une étude de ton système tu prouves que tes données suivent une loi de probabilité connue et que ton hypothèse H0 (bonnes données) est représentée par des valeurs fixes de paramètres de ta distribution. En cas d'anomalie, tu t'écarte soit de ces valeurs, soit de la forme de ta distribution. Ce qui te permet de construire un test d'hypothèse, ce qui te permet de garantir des taux de perfs. La limite est ta capacité à 1/ modéliser ton système et 2/ avoir peu de paramètres sur ta loi car sinon ton test d'hypothèse est impossible à construire.


Ok, merci du rappel. Ça me revient, ça fait un bout de temps que je n'en ai pas fait. On est bien d'accord que dans le cas d'un comportement « licite » ou « illicite » du cas de Kamikaze, ce qui est notion assez floue très comparable à la reconnaissance d'action « dangereuse » par des caméras de vidéosurveillance, (cas classique d'application récentes des réseaux de neurones), ce n'est pas du tout adapté car tu ne sais pas du tout modéliser le-dit système ...
En fait c'était complétement implicite dans ce que je disais, si tu as des infos sur ton système et que tu es capable de le modéliser proprement, utiliser des réseaux de neurone c'est effectivement, un peu ridicule.

----------


## war-p

> Nope, ça va bien sûr dépendre du processeur et de tout un tas de variables. Par exemple est ce qu'on veut une valeur exacte ou approximative. Mais on rappelle que John Carmack s'est fait un nom avec sa fameuse optimisation de l'inverse de la racine carrée
> 
> 
> 
> Et c'est ce que je disais dans mon tout premier post en réponse à la question: le plus compliqué dans cette question c'est le contexte.
> 
> Si tu fais un simulateur de particules avec 10 millions d'entités, à coup sûr la solution avec l'équation sera pourrave en terme de performance et de toute façon tu ne voudras pas une solution exacte.
> Genre si tu simules un nuage de poussière. Et il faudra prendre en compte les intéractions des particules entre elles, donc tu voudras souvent agglomérés les intéractions et simplifier car sinon c'est trop dur et sous optimal de considérer chaque particule isolée vis à vis de toutes les autres.
> 
> ...


L'algo n'est pas de Carmack  :;):  Je crois que plus personne ne sait qui l'a trouvé en premier  ::P: 
Et ça tien plus du hack qu'autre chose.

----------


## Kamikaze

J'ai dit qu'il s'était fait un nom avec pas qu'il l'avait inventé! Ouais j'ai vu l'interview où il dit qu'il a trouvé ça dans un livre ou je ne sais quel papier et sur google on peut trouver les auteurs. Quoique c'tait p'têt une interview de Romero
C'tait plus pour dire qu'une abstraction telle que la racine carré, qu'on balance un peu à tout va dans les calculs, faut plus voir ça comme un algo avec un impact calculatoire, plutot que comme un opérateur comparable à une addition quoi.

Un truc sur lequel j'aimerais bien bosser, en recherche, si j'avais pas mon taff', c'est une notation mathématique qui prend en compte la complexité calculatoire des expressions, je pense que y'a du potentiel pour faire un truc intéressant. Genre c'est une notation qui rendrait explicite que déterminer si un nombre est premier est une opération couteuse etc.
Où l'égalité serait une égalité non seulement en terme d'expression mathématique mais aussi équivalence en terme de coup calculatoire, un truc du genre

Enfin pas juste une notation, des opérateurs. Du coup du pourrait faire des opérations basées sur la complexité, tu pourrais appliquer des réductions de complexité quitte à diminuer la précision d'une opération, précision qui serait exprimée de manière classique avec les opérateurs de comparaison et un epsilon genre. Et tu pourrais comparer 2 équations qui donne le même résultat, mais avec une complexité différente.

M'enfin c'est qu'une idée vague, mais en gros tu pourrais partir d'une équation très connue donnée, et en réduire la complexité calculatoire autant que possible (en réduisant ou non la précision (pas de blague sur les physiciens merci)), un peu comme une réduction en facteurs premiers. Et du coup il serait manifeste quand une opération qui apparait simple est en réalité complexe.

Par exemple dans ce système (idéalement) la conjecture de Collatz serait explicitement "compliquée"

----------


## Nilsou

Déja ce serait pas mal un code couleur sur les fonctions et opérateurs quand on code, un petit bouton dans l'IDE et paf tout est recoloré en fonction de la complexité  :Bave:

----------


## gros_bidule

On a bien des outils qui donnent la complexité cyclomatique (ok, rien à voir avec les perfs machine, mais plus avec les perfs de notre pauvre cerveau à comprendre le code mal structuré).
Mais si vous êtes capables d'analyser le code pour mettre en évidence ce dont vous parlez, sincèrement, coloriser ça dans un IDE c'est très facile.

Y'aurait même moyen de s'associer et faire des plugins payants  :Fourbe:

----------


## Nilsou

Je me demande si ça n'existe pas déjà sur des temps d'exec... ça me parait effectivement « simple ». Il doit bien y avoir un bidule Jetbrains qui fait déjà ce genre de chose ^^

----------


## Lazyjoe

> une abstraction telle que la racine carré, qu'on balance un peu à tout va dans les calculs, faut plus voir ça comme un algo avec un impact calculatoire, plutot que comme un opérateur comparable à une addition quoi.


Tu es au courant que la racine carrée est directement calculée en hardware depuis un petit moment (sur les archi x86 en tout cas) ?  ::siffle::

----------


## Kamikaze

Lol c'est ouf comme les messages se perdent à travers les forums, faut que je me mette à Discord. Ouais je suis au courant que y'a des implémentations hardware, d'ailleurs la première chose qui est mentionnée dans les docs X86/X64 c'est la précision avec laquelle l'opération est faite, ce qui est exactement ce dont je parle, le trade off précision vs. performance.
Mon propos c'est simplement de formaliser ça via une structure algébrique. Genre j'étais pas en train de dire qu'il faut se prendre la tête avec ça au jour le jour quand tu codes, bon après j'ai p'têt pas bien formulé ça.

----------


## Lazyjoe

Ahah ok. Après s'intéresser à la complexité globale des algos (comme dans ton exemple du n-body) c'est assez fondamental, par contre dans le code en pratique vouloir réfléchir au coût individuel de chaque opération c'est un peu couper les cheveux en 4. Déjà à moins de faire de l'assembleur hardcore les compilos se débrouillent pas mal pour réordonnancer les opérations et cacher sous le tapis les grosses latences, et sur les archis de maintenant la latence mémoire domine très largement la latence des opérations donc il faut avant tout se poser la question de si la valeur que tu calcules est dans les registres ou le cache.

----------


## GrandFather

> On devrait oublier les petites optimisations locales, disons, 97 % du temps : l'optimisation prématurée est la source de tous les maux.


 :X1:

----------


## Nilsou

> Ahah ok. Après s'intéresser à la complexité globale des algos (comme dans ton exemple du n-body) c'est assez fondamental, par contre dans le code en pratique vouloir réfléchir au coût individuel de chaque opération c'est un peu couper les cheveux en 4. Déjà à moins de faire de l'assembleur hardcore les compilos se débrouillent pas mal pour réordonnancer les opérations et cacher sous le tapis les grosses latences, et sur les archis de maintenant la latence mémoire domine très largement la latence des opérations donc il faut avant tout se poser la question de si la valeur que tu calcules est dans les registres ou le cache.


Ouais enfin, faut un minimum de comportement sain quand on code, sinon tu fais du python cracra, ça tourne 800 fois moins vite qu'un code codé proprement dans un autre langage, on s'en fout et puis voila. 

Sauf qu'il y a plein de domaine ou on s'en fout pas du tout ^^.

C'est plus de bons comportement et une habitude lorsqu'on code qu'une traque du petit détail.

----------


## William Vaurien

Avec le prix de l'énergie qui augmente les besoins en dev "eco" (nomique|logique) vont peut être se faire sentir de plus en plus... j'ai déjà vu des présentations sur ce sujet. 
Avoir un truc dans l'IDE qui te donne directement l'efficacité en terme d'énergie de ton algo est peut être un peu plus concret qu'un indice de complexité...

----------


## Kesitem

> Ouais enfin, faut un minimum de comportement sain quand on code, sinon tu fais du python cracra, ça tourne 800 fois moins vite qu'un code codé proprement dans un autre langage, on s'en fout et puis voila. 
> 
> Sauf qu'il y a plein de domaine ou on s'en fout pas du tout ^^.
> 
> C'est plus de bons comportement et une habitude lorsqu'on code qu'une traque du petit détail.


Je me permets de reformuler ta phrase, je dirais plutôt qu'il vaut mieux un code bien écrit en python que du code cracra en C++ avec des micro optimisations illisibles et des algo métiers pourris (je viens de passer 3 ans sur un projet java de ce style poussé à l'extrême, une horreur). 

Quand à avoir des info dans l'IDE, je pense que ce n'est pas évident. Notamment, paracerque ton jeu de données en dev n'est pas forcement le même qu'en prod. Et donc l'efficacité de tes algo ne sera pas forcement représentatif.
Y a un moment, on est quand même obligé de faire un peu de théorie avec la complexité et les plages d'efficacité des algo.

----------


## Nilsou

> Quand à avoir des info dans l'IDE, je pense que ce n'est pas évident. Notamment, paracerque ton jeu de données en dev n'est pas forcement le même qu'en prod. Et donc l'efficacité de tes algo ne sera pas forcement représentatif.
> Y a un moment, on est quand même obligé de faire un peu de théorie avec la complexité et les plages d'efficacité des algo.


Oui enfin bon, c'est mieux que rien ^^

----------


## Kesitem

Oui, c'est vrai que c'est déjà un bon début  ::):

----------


## Lazyjoe

> Ouais enfin, faut un minimum de comportement sain quand on code, sinon tu fais du python cracra, ça tourne 800 fois moins vite qu'un code codé proprement dans un autre langage, on s'en fout et puis voila.


800 fois moins vite c'est pas déjà un code python très efficace ?  ::ninja:: 

Mais j'ai du mal à saisir le fond là.... Tu voudrais que l'IDE te donne une estimation du coût d'une opération ou une fonction ? 
Ca me semble assez impossible, comme le dit Kesitem déjà dynamiquement tu ne peux pas prédire grand-chose sur les conditions d'exécution, et même statiquement ça impliquerait de prévoir comment le code va être transformé par le compilateur.

Bref, le boulot d'un profileur, qui peut déjà être une bonne usine à gaz sur en cours d'exécution, alors si en plus il doit faire de la voyance...  ::siffle::

----------


## gros_bidule

Nan mais tu pourrais imaginer faire tourner un microbenchmark (ou juste surveiller ton appli qui tourne) puis surligner tes blocs de code avec un code couleur. A défaut d'être parfait, ça te donnerait toute de même une petite idée du code considéré comme consommateur de temps et, selon sa nature, si ça vaut le coup de se pencher dessus.
On a ça pour la couverture de code, ça pourrait peut être se faire selon les langages de programmation.

Parmi les alternatives on a évidemment les profileurs, mais cela n'interdit pas de chercher des outils plus faciles à utiliser, sinon complémentaires.

----------


## Helix

> Nan mais tu pourrais imaginer faire tourner un microbenchmark (ou juste surveiller ton appli qui tourne) puis surligner tes blocs de code avec un code couleur. A défaut d'être parfait, ça te donnerait toute de même une petite idée du code considéré comme consommateur de temps et, selon sa nature, si ça vaut le coup de se pencher dessus.


Ce n'est pas en gros ce que font les profileurs ?
Je suis un vilain codeur pour mes recherches, mais par exemple le profileur Matlab donne exactement cette indication : le listing avec une précision dans la marge du temps passé pour chaque ligne. Je pensais que c'était qq chose de commun.

----------


## Awake

Ça l'est, on l'a en javascript  ::):

----------


## gros_bidule

Oui c'est le boulot des profileurs. Je pare juste d'un outil complémentaire, qui donnerait une vue d'ensemble des perfs de ton programme. Une vue simplifié quoi. Parce que devoir se plonger dans le profiler, ce n'est pas toujours la joie (pour du Java en tous cas).
Ca serait un peu comme la couverture de code actuellement : on peut très bien aller lire le rapport, mais avoir la coloration directement dans l'IDE c'est tellement mieux.

Nota : j'ai toujours utilisé les profilers fournis gratos avec les IDE. Mais j'entends du bien de YourKit. J'ai même des contributeurs qui m'ont sorti des rapports bien sympa grâce celui-ci. Faudrait que je me penche davantage sur le sujet, tant sur les gratos que sur YourKit (payant).

----------


## Nilsou

> 800 fois moins vite c'est pas déjà un code python très efficace ? 
> 
> Mais j'ai du mal à saisir le fond là.... Tu voudrais que l'IDE te donne une estimation du coût d'une opération ou une fonction ? 
> Ca me semble assez impossible, comme le dit Kesitem déjà dynamiquement tu ne peux pas prédire grand-chose sur les conditions d'exécution, et même statiquement ça impliquerait de prévoir comment le code va être transformé par le compilateur.
> 
> Bref, le boulot d'un profileur, qui peut déjà être une bonne usine à gaz sur en cours d'exécution, alors si en plus il doit faire de la voyance...


Nan mais j'ai jamais dit qu'on ne devrais pas faire tourner le code, je le voyait plus comme un profileur avec un jolie affichage dans le code une fois qu'on a exécuté X fois le programme en amont.

----------


## Nilsou

Dites, est-ce que vous connaîtriez des ressources qui aide à comparer le coût de création / destruction d'un thread et le coût de sa mise en sommeil/reactivation via des mutex ? 
J'imagine qu'il y a un seuil ou il vaut mieux utiliser une solution plutôt que l'autre, mais je n'ai rien trouvé de probant...  ::unsure::

----------


## rOut

Dans tous les cas ça sera plus rapide de réveiller un thread existant vu que la création implique plus de choses. Ensuite un context switch c'est de l'ordre de la microseconde (au mieux).

----------


## Dross

> Dites, est-ce que vous connaîtriez des ressources qui aide à comparer le coût de création / destruction d'un thread et le coût de sa mise en sommeil/reactivation via des mutex ? 
> J'imagine qu'il y a un seuil ou il vaut mieux utiliser une solution plutôt que l'autre, mais je n'ai rien trouvé de probant...


En .NET on utilise une encapsulation (Task, TPL, etc) qui recycle (entre autre) les threads d'un thread pool pour des questions de performances, donc plutôt réveiller que créer en effet.
D'ailleurs c'est la raison pour laquelle si vous êtes en .NET, n'utilisez jamais les Threads directement : utilisez l'encapsulation.

----------


## Lazyjoe

> Nan mais j'ai jamais dit qu'on ne devrais pas faire tourner le code, je le voyait plus comme un profileur avec un jolie affichage dans le code une fois qu'on a exécuté X fois le programme en amont.


Moui vu comme ça pourquoi pas... Après c'est une question de philosophie, pour moi l'IDE doit plutôt fournir des infos à priori et plus ou moins instantanément, si il faut faire tourner un profileur des heures pour enrichir l'affichage du code qui peut être aussitôt modifié ça me semble un peu bancal.

Sinon à ce niveau l'Intel Advisor est pas mal, avec une visualisation hiérarchique des temps de calcul dans la pile des appels, et il arrive généralement à faire un plutôt bon mapping entre le code assembleur exécuté et leur source correspondant.

----------


## gros_bidule

L'IDE peut fournir les deux : des infos instantanées, mais aussi différées. Un des meilleurs exemple est la couverture de code  ::):  Et tu lui demandes de la calculer seulement si tu veux, ça ne contraint personne. Je préfère un IDE qui laisse le choix, quitte à ce que certains utilisateurs le sous-utilisent, plutôt qu'un IDE qui manque de fonctionnalités.

----------


## Nilsou

> Dans tous les cas ça sera plus rapide de réveiller un thread existant vu que la création implique plus de choses. Ensuite un context switch c'est de l'ordre de la microseconde (au mieux).


Ok, mais c'est vrai que j'aurais bien aimé avoir quelques ordres de grandeur des deux...

Maintenant, suite de la question : aujourd'hui pour paralléliser, auriez vous tendance à passer préférentiellement par OPENMP ou par faire du thread à la main ?
Moi j'ai l'habitude du thread à la main mais je me dit que c'est peut être un brin inutile maintenant pour pas mal de cas vu qu'OPENMP gère pas mal de chose tout seul ...




> En .NET on utilise une encapsulation (Task, TPL, etc) qui recycle (entre autre) les threads d'un thread pool pour des questions de performances, donc plutôt réveiller que créer en effet.
> D'ailleurs c'est la raison pour laquelle si vous êtes en .NET, n'utilisez jamais les Threads directement : utilisez l'encapsulation.


Ok, de toute façon c'est bel et bien ce que je faisais au départ. Donc c'est OK.
Je vois qu'OPENMP fonctionne aussi par thread pool.

----------


## Kamikaze

OpenMP c'est juste une abstraction, normalement devrait pas y avoir de grosse diff vs. un thread pool que t'implémentes toi même.

Pour les threads ce qui est couteux c'est leur création/destruction, donc il faut les réutiliser ouais (et créer tout ce dont t'as besoin dès le début, pas à la volée).

Si tu utilises une condition variable (https://en.cppreference.com/w/cpp/th...ition_variable) pour attendre dans un thread ça coute (quasiment) rien (ça dépend un peu des OS et des CPUs). Donc tu peux attendre d'avoir du travail, et dépiler quand tu reçois le signal, tu donnes ça à un thread existant (donc un thread du pool de thread).

Donc bref pour répondre directement à la question d'origine, il est toujours plus couteux de créer/détruire que d'attendre (proprement).

Je dis proprement car même dans des boites supposées prestigieuses, je vois des mecs implémenter ça avec des "sleep" dans le code, et là on oublie les perfs avec ce genre de truc dégueu

Et c'est ce que fait OpenMP, ça crée une thread pool, et ça dispatch à des threads existants

---- 

EDIT: 'Fin y'a absolument pas besoin de condition variable pour un thread pool de base, là je partais un peu plus loin, juste pour dire qu'attendre du travail avec une condition variable c'est très peu coûteux, par opposition à un busy loop avec du sleep ou autre implém pas propre

----------


## rOut

> Ok, mais c'est vrai que j'aurais bien aimé avoir quelques ordres de grandeur des deux...
> 
> Maintenant, suite de la question : aujourd'hui pour paralléliser, auriez vous tendance à passer préférentiellement par OPENMP ou par faire du thread à la main ?
> Moi j'ai l'habitude du thread à la main mais je me dit que c'est peut être un brin inutile maintenant pour pas mal de cas vu qu'OPENMP gère pas mal de chose tout seul ...
> 
> 
> 
> Ok, de toute façon c'est bel et bien ce que je faisais au départ. Donc c'est OK.
> Je vois qu'OPENMP fonctionne aussi par thread pool.


https://eli.thegreenplace.net/2018/m...linux-threads/

----------


## Lazyjoe

> Je dis proprement car même dans des boites supposées prestigieuses, je vois des mecs implémenter ça avec des "sleep" dans le code, et là on oublie les perfs avec ce genre de truc dégueu


 :Pouah: 

Sinon je plussoie, dans la grande majorité des cas à moins d'avoir un besoin de synchronisation très très particulier faire des threads à la main au lieu d'utiliser OpenMP c'est se faire du mal pour rien.

Par contre l'OpenMP pour offload GPU évitez d'y toucher c'est encore pas franchement au point.  ::siffle::

----------


## Nilsou

> https://eli.thegreenplace.net/2018/m...linux-threads/


Merci,
Je vais lire ça en détail.

- - - Mise à jour - - -




> Sinon je plussoie, dans la grande majorité des cas à moins d'avoir un besoin de synchronisation très très particulier faire des threads à la main au lieu d'utiliser OpenMP c'est se faire du mal pour rien.


Bah perso ça ne change pas grand chose : mon truc est déjà hautement parallèle (groupe totalement indépendant) donc le code que ça change (balancer le pool de thread et gerer les mutex) est vraiment court.

----------


## Lazyjoe

https://marketplace.visualstudio.com...-cpp-formatter

Je me sens partagé entre le révulsion et la goleri.  ::ninja::

----------


## GrandFather

:^_^:  Le meilleur des deux mondes !

----------


## Kesitem

Je regardais vite les screenshots, c'est pas parfait, on voit des accolades fermantes sur les "else".

Purée, s'il y a un truc qui me manque pour facilité la lecture du code en python, c'est bien les accolades.
Et avec le formatage C++ (les accolades d'un bloc à la même indentation) pas le formatage Java caca.

----------


## Orhin

J'ai eu une mini attaque rien qu'en lisant le code.  :Vibre:

----------


## Foksadure

> Purée, s'il y a un truc qui me manque pour facilité la lecture du code en python, c'est bien les accolades.


C'est surtout la syntaxe Python le problème.

Du VBScript bien indenté reste parfaitement lisible sans ces fichues accolades, particulièrement pénibles à saisir sur les claviers AZERTY, comme les [].
Et pas besoin de : ou de ; non plus. Dommage que ce soit ECMAScript qui ait gagné la bataille.  ::ninja::

----------


## Orhin

> Et pas besoin de : ou de ; non plus. Dommage que ce soit ECMAScript qui ait gagné la bataille.


Les ";" ne sont pas obligatoires en JS hein.

----------


## Cwningen

> Et avec le formatage C++ (les accolades d'un bloc à la même indentation) pas le formatage Java caca.


C'est quoi le "formatage C++" et le "formatage Java" ? Parce qu'il y a plein de styles d'indentation des accolades et ce n'est pas lié au langage. Le style GNU est connu pour ne pas mettre les accolades à la même indentation et il a été conçu pour du C.

----------


## gros_bidule

Elle est très bien la syntaxe Python  :B):  Vous n'avez aucun goût, c'tout. Au pire, votre IDE préféré peux vous assister.

----------


## Kamikaze

Comme disait mon grand oncle* les langages sans typage statique sont des langages de sans race

*source contestée

----------


## Orhin

> Au pire, votre IDE préféré peux vous assister.


Prettier > all (si votre langage est supporté).

----------


## Kesitem

> C'est quoi le "formatage C++" et le "formatage Java" ? Parce qu'il y a plein de styles d'indentation des accolades et ce n'est pas lié au langage. Le style GNU est connu pour ne pas mettre les accolades à la même indentation et il a été conçu pour du C.


Celui, que j'ai le plus pratiqué (bon, ma pratique pro du C++ n'est pas récente, les deux premiers tiers des années 2000), j'ai surtout utilisé et vu utilisé Allman Style (je ne connaissais pas le nom).
C'est vraiment celui que je trouve le plus lisible.
L'accolade ouvrante au même niveau que la commande me parait plus difficile à repérer (et je dis Java, parcequ'il me semble que c'est dans toutes les variantes de styles sont comme ça dans ce langage).

Le style GNU, je trouve ça moins esthétique  ::P:

----------


## William Vaurien

> C'est quoi le "formatage C++" et le "formatage Java" ? Parce qu'il y a plein de styles d'indentation des accolades et ce n'est pas lié au langage. Le style GNU est connu pour ne pas mettre les accolades à la même indentation et il a été conçu pour du C.


le style Java 'officiel' tel que poussé par les conventions de Sun au début du langage c'est une variante du style K&R, en reprenant la definition de la page wikipedia que tu as posté.




> Variant: Java
> While Java is sometimes written in other styles, a significant body of Java code uses a minor variant of the K&R style in which the opening brace is on the same line not only for the blocks inside a function, but also for class or method declarations. This style is widespread largely because Sun Microsystems's original style guides[14][15][16] used this K&R variant, and as a result most of the standard source code for the Java API is written in this style. It is also a popular indentation style for ActionScript and JavaScript, along with the Allman style.




```
while (x == y) {
    something();
    somethingelse();
}
```


Tout projet Java normallement constitué suit globalement une légère variante des conventions d'origines de Sun.  
Mais dans certaines équipes j'ai pu trouvé du Java avec du style 'C' (plutôt genre Allman en reprenant la nomenclature de la page wikipedia), et c'était soit des 'anciens' biberonnés au C/C++ ou des transfuges de C# qui n'arrivaient pas à changer leurs habitudes...
Comme ça donc:


```
while (x == y)
{
    something();
    somethingelse();
}
```

J'ai été dans un projet Java issu d'un portage d'une appli en C des années 90 avec tout le projet formatté en style 'Allman'. J'en ai bavé pour essayé de prendre l'habitude de lire/écrire le code sous ce format. 
C'est con mais le formattage structure le code et les doigts réfléchissent plus vite que le cerveau quand quand je tape ces parties (accolades et ponctuations). 
Je mets par exemple systématiquement des ';' à la fin de mes lignes en Python par exemple car j'en fais peu et je suis trop habitué à ponctuer mes instructions avec. 

Je trouve que le choix radical de Python et à la fois très con et à la fois génial. Je déteste qu'on m'impose des trucs, mais en même temps ça évite les conflits stérils pour ce genre de 'détails' qui peuvent devenir rapidement irritant.

----------


## gros_bidule

Vala, puis Go fait pareil et là on crie au génie  ::):

----------


## Orhin

> Je déteste qu'on m'impose des trucs, mais en même temps ça évite les conflits stérils pour ce genre de 'détails' qui peuvent devenir rapidement irritant.


Ben c'est là que les formateurs de code (comme *Prettier* que j'ai cité plus haut) sont très pratiques.
Tu te mets d'accord sur la configuration en début de projet et roule ma poule.

Pas besoin d'apprendre de nouvelles habitudes, le formateur met les { aux bons endroits, enlève/ajoute les ";", met les bons type de quotes, etc.

Résultat : la codebase est uniforme et y'a plus aucun conflits liés au style.

----------


## William Vaurien

Dans mon équipe actuel un des dev Java n'arrive pas à se débarasser de son style 'Allman' (alors qu'il n'a jamais codé en C/C++/C# de sa vie) et il colle aussi des préfixe de type devant ses noms de variable (strMaString et lstMaListe)...
Il avait également l'habitude de ne pas mettre d'accolades pour les cas 'simple' qui tienne sur une ligne. 
Lui faire accepter le guide de formattage à failli tourner au pugilat entre lui et un autre collègue et il n'a pas totallement accepté les règles même après plusieurs années... 

Nous devrions mettre une étape de formattage auto dans le pipeline de build pour éviter ce genre de petits problèmes... 
Mais après je trouve que les formatters auto font souvent de la merde quand il y a des lambdas et dans d'autres cas (genre annotation avec requête dans du JPA) un peu tordus. 

De mon côté je me suis habitué à voir un code formatté avec plusieurs styles. Ca ne me dérange plus trop ce style 'patchwork'. Et ça a un avantage: on reconnait d'un seul coup d'oeil qui est l'auteur du code. 
Et chacun à ses petites habitutes: le collègue qui voulait ses accolades au bon endroit a du mal avec le nombres de paramètres ou la complexité cyclomatique de son code et va planquer ça sous le tapis avec des //NOSONAR... 
Je dois aussi avoir mes habitudes chiantes...
ça donne parfois des revues de code un peu mouvementé pour pas grand chose. Mais c'est drôle de voir que chacun est finalement sensible a des trucs différents.

Bref c'est pas forcément de bonnes habitudes et on aurait sans doute du mettre des règles plus strictes dès le début du projet...

----------


## Orhin

> il colle aussi des préfixe de type  devant ses noms de variable (strMaString et lstMaListe)...


 :Cryb: 




> Mais après je trouve que les formatters auto font souvent de la merde  quand il y a des lambdas et dans d'autres cas (genre annotation avec  requête dans du JPA) un peu tordus.


J'ai pas testé ceux en Java mais dans le monde web JS ça fait le café et c'est entrain de devenir un peu standard.




> Et chacun à ses petites habitutes: le  collègue qui voulait ses accolades au bon endroit a du mal avec le  nombres de paramètres ou la complexité cyclomatique de son code et va  planquer ça sous le tapis avec des //NOSONAR...


Et ça passe en merge-request ça ?  :^_^: 




> Bref c'est pas forcément de bonnes habitudes et on aurait sans doute du mettre des règles plus strictes dès le début du projet...


C'est surtout ça en fait.
Tu mets en place l'outil dès le début du projet avec un git hook pour formater au commit (même si perso je configure mon IDE pour le faire à la sauvegarde).

----------


## William Vaurien

Le nombre de paramètres ça ne passe pas. Par contre la complexité cyclomatique par défaut dans Sonar c'est quand pas super élevé... La config du Sonar est global pour notre boîte, on ne peut pas modifier les règles, alors on fait au cas par cas...

Pour l'historique j'ai commencé à bosser sur une refonte de code existant (flash / action script vers Java) avec un chef qui codait en style 'Allman'... donc compliqué de venir lui dire de changer. Ensuite j'ai commencé en parallèle un projet de zéro (mon premier "green field"  :Emo:  ), je n'avais de problèmes qu'avec moi même... 
Ensuite le projet est devenu pérenne et il y a eu des recrutements (dont les 2 collègues dont j'ai parlé), et mon chef est venu participer au dev. A ce moment le formattage du projet a pris du plomb dans l'aile et c'était assez compliqué de venir forcer la main du chef... Il y a eu quelques discutions houleuses, un accord a été trouvé (que les tenants du style Allman se sont empressés de ne pas respecter  ::unsure:: )

Donc on a parlé de mettre un formatter auto en plus de Sonar mais nous n'avons pas sauté le pas... C'était il y a 3 ans, nous avons obtenus gain de cause pour les accolades obligatoires même pour des 'one-liner', le reste est devenu un statu-quo... (nous sommes tous des internes, ça joue aussi: plus difficile d'imposer des trucs)

Le premier projet doit subir une migration technique, c'est une équipe externe qui doit s'en charger, ils ont le feu vert pour faire sauter le style patchwork et nous comptons sur cet événement pour mettre en place un formatter auto...

Mais c'est quasi tragi-comique de voir le temps et l'énergie dépensé pour un truc qui de l'extérieur semble si futile... 


J'aime bien le petit paragraphe de la doc de go à ce sujet:



> Formatting issues are the most contentious but the least consequential. People can adapt to different formatting styles but it's better if they don't have to, and less time is devoted to the topic if everyone adheres to the same style. The problem is how to approach this Utopia without a long prescriptive style guide.

----------


## acdctabs

Moi je m'adapte mais j'aime bien le ''Whitesmiths style''.
Plus c'est espacé mieux c'est.

Je dois être un des rares au taf à programmer sur fond blanc...

----------


## Cwningen

C'est étrange d'associer plus Allman au C/C++, et K&R au Java. K&R, c'est les auteurs de quel livre déjà ?

----------


## William Vaurien

Java est très proche du C au niveau de la syntaxe. Et le style 'officiel' de Java c'est une variante du K&R...
Après j'associe Allman au C/C++ car à chaque fois que j'ai vu du code dans ce langage (ou du Java déviant) c'était avec du format 'Allman'.
J'ai jamais vu 'en action' les autres variantes de formattage listé sur la page wikipedia. Je classifie d'après mon expérience, mais ça semble partagé:montre du code avec les accolades comme ça à un dev:


```
while (x == y) {
    something();
    somethingelse();
}
```

et il y a de grandes chance qu'il te dise "Java" (voir Java Caca s'il a été contraint de faire des EJB vers 2004 et n'a plus touché au langage depuis, ou qu'il n'a jamais touché au langage tout court).

----------


## Dross

Je dirai même plus... Java_script_.  ::trollface::

----------


## Robix66

Moi je mets des .editorconfig en réglant tous les paramètres de formatage pour qu'ils s'affichent en tant qu'erreurs.  ::ninja::

----------


## war-p

Au boulot j'en ai qui me font des nommage de variable en snake case dans les projets java, j'en peux plus  :Vibre:

----------


## Kamikaze

Ils ont bien raison c'est illisible camel case

----------


## Lazyjoe

> Au boulot j'en ai qui me font des nommage de variable en snake case dans les projets java, j'en peux plus


C'est un problème par rapport au snake case ou par rapport au java ?  ::huh::

----------


## Teocali

> Ils ont bien raison c'est illisible camel case


le snake case c’est pour les vieux qui ont les yeux flingués et voient tellement flou qu’ils sont incapable de différencier une majuscule d’une minuscule  ::trollface::

----------


## Foudge

Ha tient, je ne connaissais pas le kebab case  ::o:

----------


## FB74

C'est une caisse de transport pour un Kebab ?  ::ninja::

----------


## Kesitem

> C'est un problème par rapport au snake case ou par rapport au java ?


La convention communément utilisée en java est le camelCase.
Je préfère aussi le snake case (vieux inside  ::XD:: ), mais en Java, c'est hérésie  :Cell: .

----------


## Kamikaze

> le snake case c’est pour les vieux qui ont les yeux flingués et voient tellement flou qu’ils sont incapable de différencier une majuscule d’une minuscule


oui et alors monsieur!!!

----------


## Nattefrost

Je fais principalement du script shell (oui ça existe encore) et c'est assez chiant à lire comme ça, donc snake_case et on minimise les '*;*'  ::P: 


```
my_file=/my/file.txt
if test -f ${my_file}
then
    [...]
fi
# au lieu de
if test -f ${my_file}; then
    [...]
fi
```

----------


## FB74



----------


## Teocali

WTF JS : https://thedailywtf.com/articles/bidding-on-security

----------


## William Vaurien

::o: 

c'est vraiment n'importe quoi...

----------


## Teocali

> c'est vraiment n'importe quoi...


Mais ça marche...

----------


## William Vaurien

oui, c'est le plus terrible dans l'histoire. Quelle merde ce js !

----------


## Awake

Ça fait 10 ans qu'il y a ce genre d'articles sur js qui sortent quotidiennement.

Moi je m'en fous je code en TypeScript  ::ninja::

----------


## gros_bidule

Petits joueurs. En WinDev 10 et 11 (pas touché depuis), le OU est exclusif. Vrai OU Vrai renvoi Faux (ou bien c'est Vrai OU Faux qui vaut Faux, ché plus, juste que ça m'a traumatisé). Si tu veux un OU inclusif, c'est à dire le OU qu'on connaît dans tous les autres langages dans l'univers, il faut utiliser _OU_ (ou _OR_, car on peut programmer en français et en anglais).
Et oui, la notion de OU inclusif/exclusif est un peu fuckée quand on y pense...

_Langage de 5ème génération._  :B):  Connu pour être utilisé par Porsche et AirFrance.

- - - Updated - - -

Haaa vala la source : 

https://doc.pcsoft.fr/fr-FR/?1512003...teurs_logiques

y'a ET, _ET_, OU, _OU_




> OU
> 
> 	Addition logique. Les conditions composées de OU sont toujours évaluées dans leur totalité (même si la première condition est vraie).


Donc Vrai OU Faux, ça vaut Faux. Sous WD11 en tous cas.

----------


## Teocali

> Petits joueurs. En WinDev 10 et 11 (pas touché depuis), le OU est exclusif. Vrai OU Vrai renvoi Faux (ou bien c'est Vrai OU Faux qui vaut Faux, ché plus, juste que ça m'a traumatisé). Si tu veux un OU inclusif, c'est à dire le OU qu'on connaît dans tous les autres langages dans l'univers, il faut utiliser _OU_ (ou _OR_, car on peut programmer en français et en anglais).
> Et oui, la notion de OU inclusif/exclusif est un peu fuckée quand on y pense...
> 
> _Langage de 5ème génération._  Connu pour être utilisé par Porsche et AirFrance.
> 
> - - - Updated - - -
> 
> Haaa vala la source : 
> 
> ...


c’est pas ce que je lis. Les versions sans _ évaluent toutes leurs opérandes, la ou les versions avec _ cessent de les évaluer des que suffisamment d’information sont disponible pour obtenir le résultat de l’opération.

----------


## gros_bidule

Pourtant je l'ai essayé et constaté  :^_^:

----------


## Nattefrost

> Petits joueurs. En WinDev 10 et 11 (pas touché depuis), le OU est exclusif. Vrai OU Vrai renvoi Faux (ou bien c'est Vrai OU Faux qui vaut Faux, ché plus, juste que ça m'a traumatisé). Si tu veux un OU inclusif, c'est à dire le OU qu'on connaît dans tous les autres langages dans l'univers, il faut utiliser _OU_ (ou _OR_, car on peut programmer en français et en anglais).
> Et oui, la notion de OU inclusif/exclusif est un peu fuckée quand on y pense...
> 
> _Langage de 5ème génération._  Connu pour être utilisé par Porsche et AirFrance.
> 
> - - - Updated - - -
> 
> Haaa vala la source : 
> 
> ...


 :Gerbe: 
Pourquoi tu nous fait ça ?!

----------


## William Vaurien

non mais là un utilisateur malicieux peut utiliser du jsfuck pour effectuer du code incognito, c'est pas juste une bizarerie du langage...

l'aricle remonté par Teocali pointe vers cet autre article qui montre comment cette merde a permi de faire des attaques sur ebay...

Avec comme example d'illustration


qui va faire un alert(1)...

Bref j'avais déjà vu les sempiternel slides sur les trucs marrant de JS, mais ça j'avais encore jamais vu !

----------


## FB74

Titre un peu racoleur, parce que c'est "1 jour = 1 année".

----------


## FB74

Ca vous inspire ou ça vous fait peur ?

----------


## Nilsou

> Titre un peu racoleur, parce que c'est "1 jour = 1 année".


Il faut prendre garde à l'effet Waouh, parce que c'est assez classique en réalité dans le domaine. Je montre de vieilles vidéos du même genre à mes étudiants et elles datent ... des années 80/90. 
Par exemple la très classique : 




Plus récemment (il y a bien 10 ans quand même) on faisait la même chose sur la marche avec des organismes complexes etc. 




Et on faisait ça sur des comportements plus complexes comme l'apprentissage du contrôle jusqu'au jeu, sur robot réel (quadrupède et manipulateur), il y a déjà 15 ans. 

C'est surtout l'échelle qui change (grosse puissance de calcul chez Nvidia donc ils peuvent se permettre de laisser tourner la chose longtemps) et ...  comme d'hab ... la puissance de com d'une grande compagnie.

Idem à 7:38 sur la main. C'est un sujet classique l'apprentissage de la manipulation sur une main par essai erreur. J'ai vu de belles démos il y a déjà 10 ans environs qui faisaient exactement la même chose. 

Tout ça pour dire : il n'y a pas forcément grand chose de très différents de ce qui se fait depuis 20 ans en IA qui est présenté dans la vidéo. Mais ça fait une belle vidéo récap de ce qui se fait dans le domaine.
De même, pas de quoi avoir peur :  l'effet wahou camoufle ici de nombreux problème de fond qui sont bloquants et qui restent bloquants notamment : 

- Vu qu'on ne peux pas accélérer le temps on ne peux pas l'appliquer sur robot réel à la même échelle sauf à avoir une simulation quasi parfaite du-dit robot. Malheureusement avoir une simu quasi parfaite du-dit robot rends plus pauvre l'exploitation du matériel réel par l'algo, ne permets pas de s'adapter au vieillissement du matériel, et surtout, ne permets pas vraiment de l’appliquer sur une série, sauf à ne permettre que des comportements généraux (là ou on aurait pas vraiment eu besoin de ce type d'algo en définitive). 
-> une solution est de faire l'apprentissage sur des dizaines ou centaines de robot à la fois, mais la contrainte est la même : il faut que la série de robot soit suffisamment proche pour que ce soit pertinent. Et on garde le même problème de non-adaptation à un matériel spécifique. 

On tente de résoudre ces problèmes en robotique et IA dites « développementales » où on étudie la formation des structures du cerveau chez l'enfant pour voir comment on fout ça sur robot. Mais c'est encore très expérimental (et ce n'est pas sur ce versant que bossent les sociétés en questions).

----------


## FB74

Ce qui m'inquiète surtout, ce sont les technologies de traçage des gens.

----------


## Nilsou

Tu n'a pas besoin d'IA en réalité pour faire ça. 

Pour tracer les gens tu as besoin surtout :

- D'un système physique le permettant. 
- D'un système de compilation des données à partir des relevés physiques.

Le second point PEUT être une IA, mais tu peux aussi le faire à la mano avec plein de petit employés façon 1984. C'est toute une organisation mais c'est loin d'être impossible. L'IA rends juste l'industrialisation de la chose facile, et son  camouflage plus simple en progressant par petit pas mais elle n'est qu'une évolution. Mais en terme d'industrialisation électronique on faisait du tracking et de la compilation de donnée électroniques (spécialité de google pour ses pubs) bien avant ce qu'on appelle aujourd'hui _« l'IA »_. Si on doit avoir peur de quelque chose sur ce point ce n'est donc pas de l'IA, mais de la possibilité de l'industrialisation de la surveillance et de la traque qu'offre tout les algorithmes numériques, en général. 

Ceci dit, de mon point de vue c'est surtout le premier point qui est inquiétant. Car le déploiement d'une architecture physique de traque c'est admettre ouvertement qu'on va laisser la possibilité de traquer ensuite : l'outil fait l'usage. Caméras, suivi des téléphones portables combinés à une vie qui devient de plus en plus impossible (même au niveau étatique) sans smartphone, validation suivies de manière centralisées à tout les étages de la vie (paiement, identités, téléphonies, GPS etc.). Le tout forgent une société qui est le parfait terrain de jeu pour toute dictature en puissance. Et quand on offre des outils à des gouvernants, généralement peu réputés pour leurs morales, ils ne tardent pas à en faire usage ...

Tient par exemple : récemment on a beaucoup parlé de la surveillance généralisé des e-mails, en phase d'autorisation par l'UE, dans des cas en rapport avec la pédophilie etc. Porte ouvertes à une surveillance sur d'autres type de « crime » de proche en proche. Avec des crimes qui pourront être « grave » mais laissé à une grande part de subjectivité par chaque état (comme atteinte à la sureté de l'état, terrorisme etc.). D'ailleurs de mémoire des articles récents, l'état français avait déposé une proposition pour étendre la chose aux « idées extrêmes »  ...
Sans parler de la délégation, fort pratiques, de ces activités aux entreprises privés, qui s'y plient tranquilou. 

Amha c'est plus cette volonté, clairement affirmées, des gouvernants de se saisir de ces outils qui fait peur en occidents, que les outils eux mêmes...

----------


## FB74

Sur Fanatical, 3 ebooks gratuits + un coupon de 20% à valoir sur les packs Packt de livres de programmation.
https://www.fanatical.com/fr/bundle/...ummer-giveaway

----------


## Lazyjoe

Les joies des floats...

Petit sondage d'opinion : si on fait (0.0 - 0.0) en double précision, le résultat devrait avoir un signe positif ou négatif ?  ::trollface::

----------


## Kamikaze

Ca dépend la précision avec laquelle 0.0 est représentée, et ça peut être représenté avec un nombre négatif ou positif j'imagine selon la plateforme (à moins que y'ait une convention).

Du coup la seule garantie c'est que 

0.0 - epsilon <= 0.0 - 0.0 <= 0.0 + epsilon

----------


## Kamikaze

Bon apparemment dans la plupart des standards 0 est bien représenté par 0 (0000 0000...) et peut être signé ou non, du coup j'imagine que ça dépend du langage etc. pour 0.0 - 0.0.

J'ai testé vite fait en c++ et ça donne 0 positif

https://godbolt.org/z/WrzY3jK4d



```
#include <iostream>

int main() {
    double res = 0.0 - 0.0;
    std::cout << res << std::endl; // positif
    std::cout << res * -1.0 << std::endl; // neg
}
```

----------


## Lazyjoe

> (à moins que y'ait une convention).


C'est un peu ce que je me demandais, mais je n'ai pas trouvé de réponse...
Dans mon cas c'est sur du Fortran, dans une boucle le signe de (0.0 - X) va faire passer une variable à 0 quand il est négatif.

Et là j'ai deux compilateurs qui ne sont pas d'accord quand X vaut 0.0
Dans les deux cas, (0.0 - 0.0) > 0.0 est faux et  (0.0 - 0.0) < 0.0 aussi  (  :Sweat:  )
Mais chez Intel ça fait 0.0 (donc signe positif) alors que chez Nvidia ça fait - 0.0 (donc négatif).  :Vibre: 

Bon après ça reste de la question rhétorique, la vrai question est de savoir qui a imaginé que ça pouvait être une bonne idée d'écrire ça et aller lui faire de la pédagogie à coups de pelle.  :Boom:

----------


## Cwningen

Les histoires de comparaisons avec des flottants, ça finit jamais bien.

----------


## Teocali

je dirais même plus, ça termine souvent en naufrage industriel.

----------


## rOut

Et realloc(ptr, 0) ?  :nawak:

----------


## Shosuro Phil

> Ca dépend la précision avec laquelle 0.0 est représentée, et ça peut être représenté avec un nombre négatif ou positif j'imagine selon la plateforme (à moins que y'ait une convention).


De mémoire, IEEE 754 pour l'arithmétique en virgule flottante? Mon *Handbook of floating point arithmetic* est planqué dans mon bureau.

Il y a très clairement une, voire plusieurs conventions. Et de bonnes chances que l'immense majorité des implémentations courantes soient percluses de bugs par rapport à la norme.

----------


## FB74



----------


## Kamikaze



----------


## Patate

Repost ?  ::P:

----------


## FB74

Je crois qu'il a un message à me faire passer.  ::ninja:: 

 :Emo:

----------


## Kamikaze

Une main tendue  ::ninja::

----------


## FB74



----------


## FB74



----------


## Kamikaze

> Pouah d'ailleurs pour reprendre sur LazyJoe.
> 
> Aujourd'hui au taff y'a un petit jeune qui vient me voir. Il me dit voilà on a un set de données, en gros c'est des inputs d'un controlleur. J'peux pas en dire trop car cybersécurité tout ça.
> 
> Mais bref c'est des inputs d'un controlleur, et en gros on veut détecter si quelqu'un de non autorisé fait de la merde avec. Et t'as genre 1000 inputs par seconde maximum, rien de très élevé, voire même jusqu'à seulement une dizaine d'input par seconde.
> 
> Et le mec me fait "ouais ça vous dérange si on implémente ça avec un réseau de neurone", "on voudrait utiliser tensor flow"
> 
> Là je lui ai mis la main sur l'épaule et je lui ai dit, "écoute tu penses pas qu'on pourrait commencer avec de l'analyse statistique, analyse de patterns et autres trucs basique, je suis sûr qu'on aura de meilleurs résultats, et on a queudalle de donnée, t'as vu la dimensionalité du problème, tu vas faire un modèle sur quoi, et on fait de l'embarqué aussi, y'a pas la place pour ta lib mon copain"
> ...


Wében, conclusion magistrale à cette petite histoire aujourd'hui. En gros t'as une série temporelle, et si y'a des valeurs anormales faut créer une alerte (je simplifie).

J'ai livré une solution complète (capture les données, analyse, envoi les alertes) pour faire une démo fin Juillet, le truc marche comme sur des roulettes et j'ai du implémenter une détection moi même, du fait des délais on pouvait pas attendre la solution des "Data Engineer". C'est un implém' basique avec quelques statistiques classiques.

Ils ont présenté leurs résultats hier. Bon déjà ils ont pompé toutes les métriques de détections sur mon taff' initial, je leur en veut pas mais on voit bien où se situe la vraie valeur dans les algos de détections (que ce soit du machine learning ou autre), faut en premier lieux tenter d'identifier ce qu'il faut observer. Ensuite ils se sont cassés les dents sur l'implém' avec un réseau de neurone, du coup ils sont partis sur un classifier (https://en.wikipedia.org/wiki/Statis...classification), ah bah tiens de bonnes vieilles stats.

Ils montrent leurs résultats de manière un peu alambiqué en utilisant tout un tas de jargon, y'en a pas beaucoup qu'arrive à suivre. Au final on arrive au tableau de résultat avec le taux de détection, ils annoncent fièrement un "accuracy rate" de 98% avec 2% de faux positifs.

Je leur demande les données qui ont déclenché le faux positif. Ils me filent ça et je crée une visualisation, on voit en gros que c'est une courbe assez lisse, donc qui ne devrait jamais générer de faux positif (à vue de nez). Je teste avec mon algo basique et je crée pas d'alerte, bien.

Je leur dit qu'ils ont sûrement un problème dans leur implém, et bingo ils avaient un bug.

2 mecs pendant 2 mois, tout ça pour arriver à un truc pas bien mieux que ce que j'avais livré en une demi journée. En plus z'ont fait ça en python donc on peut pas le réutiliser car on a des contraintes de perf et de déploiement.

Bref, ça me donne vraiment envie de me mettre à mon compte, tu vois souvent des inefficacités béantes dans les boites, entre la paperasse, les communications lentes et ce genre d'histoire.

Le commentaire de Nilsou était assez dans le mille, j'pense que y'avait matière à faire un bon truc mais:

"ils n'ont appris que des « recettes » par cœur, constituées de la bibliothèque de google et cie et leurs formalismes, bien pratique certes, mais qui viennent contraindre leur raisonnement la plupart du temps, sans parler de leur capacité à saisir ce qui se passe en interne de la bibliothèque."

----------


## Lazyjoe

Tiens vu que c'est la journée retex, le fait que 0.0 - 0.0 retourne -0.0 est finalement considéré comme un bug par les devs du compilateur nvidia.  :^_^: 

En fouinant un peu, apparemment c'est un résultat attendu uniquement si on est en mode d'arrondi "vers moins l'infini" (ce qui n'est pas très courant comme utilisation quand même).

----------


## Shosuro Phil

L'arrondi vers moins l'infini, c'est juste l'arrondi inférieur, non? ça ne semble pas si exotique, mais je ne sais pas ce qui est "standard". Mais bon, qu'une implémentation soit buggée, c'est pas une surprise...

----------


## war-p

> Wében, conclusion magistrale à cette petite histoire aujourd'hui. En gros t'as une série temporelle, et si y'a des valeurs anormales faut créer une alerte (je simplifie).
> 
> J'ai livré une solution complète (capture les données, analyse, envoi les alertes) pour faire une démo fin Juillet, le truc marche comme sur des roulettes et j'ai du implémenter une détection moi même, du fait des délais on pouvait pas attendre la solution des "Data Engineer". C'est un implém' basique avec quelques statistiques classiques.
> 
> Ils ont présenté leurs résultats hier. Bon déjà ils ont pompé toutes les métriques de détections sur mon taff' initial, je leur en veut pas mais on voit bien où se situe la vraie valeur dans les algos de détections (que ce soit du machine learning ou autre), faut en premier lieux tenter d'identifier ce qu'il faut observer. Ensuite ils se sont cassés les dents sur l'implém' avec un réseau de neurone, du coup ils sont partis sur un classifier (https://en.wikipedia.org/wiki/Statis...classification), ah bah tiens de bonnes vieilles stats.
> 
> Ils montrent leurs résultats de manière un peu alambiqué en utilisant tout un tas de jargon, y'en a pas beaucoup qu'arrive à suivre. Au final on arrive au tableau de résultat avec le taux de détection, ils annoncent fièrement un "accuracy rate" de 98% avec 2% de faux positifs.
> 
> Je leur demande les données qui ont déclenché le faux positif. Ils me filent ça et je crée une visualisation, on voit en gros que c'est une courbe assez lisse, donc qui ne devrait jamais générer de faux positif (à vue de nez). Je teste avec mon algo basique et je crée pas d'alerte, bien.
> ...


Je vous ai parlé des dataframes en python ?  ::trollface:: 
Je suis en train de reprendre un algo fait par des datascientists (qui ne sont plus là) et je vais devenir fou je crois...  :Facepalm: 
(D'ailleurs si des canards s'y connaissent en numpy, panda, scikit learn et en analyse mathématiques, je veux bien de l'aide en mp  ::(:  )

----------


## Lazyjoe

> L'arrondi vers moins l'infini, c'est juste l'arrondi inférieur, non? ça ne semble pas si exotique, mais je ne sais pas ce qui est "standard". Mais bon, qu'une implémentation soit buggée, c'est pas une surprise...


J'imagine que les matheux et autres numériciens doivent s'amuser avec des considérations sur la stabilité des algos avec les différents modes.
Mais en pratique j'ai toujours vu utilisé le mode "arrondi au plus proche".

----------


## GrandFather

> L'arrondi vers moins l'infini, c'est juste l'arrondi inférieur, non? ça ne semble pas si exotique, mais je ne sais pas ce qui est "standard". Mais bon, qu'une implémentation soit buggée, c'est pas une surprise...


IEEE 754 accepte cinq modes d'arrondi possibles. J'avais codé dans le temps un interpréteur XPath, dont la partie arithmétique reposait sur l'IEEE 754, j'avais bien rigolé... J'avais fait comme les gars de NVidia : j'avais arbitrairement choisi un mode, et déclaré les autres comme buggués.  ::ninja::

----------


## Cwningen

J'ai un problème de C++ peut-être un peu trop récent et je n'arrive pas à savoir qui est en tort. Voici un cas simplifié : j'essaye de parser une chaine au moment de la compilation et d'initialiser des variants en fonction du contenu de celle-ci. Ça fonctionne avec gcc mais pas avec clang ou msvc. La cause du problème semble être le changement d'alternative du variant avec std::variant::emplace.

clang + libstdc++ : member call on member '_M_rest' of union with active member '_M_first' is not allowed in a constant expression
msvc : failure was caused by a read of an uninitialized symbol see usage of 'std::_Variant_storage_<true,a,b>::_Tail'

libc++ ne supporte pas encore les variants constexpr. Mais les autres devraient être bons. "P1330R0 Changing the active member of a union inside constexpr" est supporté par tous les derniers compilateurs et "P2231R1 Missing constexpr in std::optional and std::variant" ne manque que dans libc++.

Est-ce que c'est moi qui ai mal compris ce qui est autorisé avec constexpr ? Ou est-ce que c'est un bug des compilateurs ? ou des implémentations des bibliothèques standard ? Le fait que 2 cas sur 3 le refuse me suggère que c'est moi, mais je ne comprends pas pourquoi.

Edit: en fait msvc fonctionne si change les types à l'intérieur du variant (lien compiler explorer), ça semble être deux problèmes différents.

----------


## rOut

:Pouah: 

Il a l'air de galérer sur les unions constexpr.

A mon avis c'est un problème de language, faut utiliser autre chose parce que là tu te fais du mal.

----------


## Teocali

> là tu te fais du mal.


En même temps, c’est du C++, hein : se faire mal, ça fait parti du package  ::trollface::

----------


## Shosuro Phil

> J'imagine que les matheux et autres numériciens doivent s'amuser avec des considérations sur la stabilité des algos avec les différents modes.
> Mais en pratique j'ai toujours vu utilisé le mode "arrondi au plus proche".


Yep, en particulier il y a des gags où tu pars de x, tu ajoutes y (x+y), tu retranches y ((x+y)-y), tu ajoutes y (((x+y)-y)+y), et tu continues comme ça en alternant additions et soustractions, et ta suite dérive si tu utilises un mode d'arrondi particulier. Ça a l'air exotique comme ça, mais ajouter et retrancher de manière répétée une même valeur c'est un truc qu'on peut faire assez naturellement.

Travailler en virgule flottante, ça amène réellement des problèmes difficiles à résoudre (il y a de beaux exemples dans l'introduction du bouquin que je mentionnais). Et les informaticiens même compétents, ont tendance à ne pas les connaître. Ça me rappelle un étudiant de M2 qui, lors de sa soutenance de stage, expliquait que les normes dans le domaine où il avait travaillé (aéronautique) interdisaient certains trucs, notamment l'usage de flottants; quand j'avais demandé pourquoi (oui je suis fourbe), il avait été incapable de me répondre autrement que "parce que c'est comme ça", en gros.

----------


## GrandFather

> Ça me rappelle un étudiant de M2 qui, lors de sa soutenance de stage, expliquait que les normes dans le domaine où il avait travaillé (aéronautique) interdisaient certains trucs, notamment l'usage de flottants; quand j'avais demandé pourquoi (oui je suis fourbe), il avait été incapable de me répondre autrement que "parce que c'est comme ça", en gros.


En informatique de gestion aussi les flottants sont absolument exclus pour les variables financières, on utilise généralement des entiers avec une unité fixée au centime/millième/dix-millième d'euro selon le domaine.  Et pour ceux qui passent outre la punition peut être assez sévère, quand il faut comprendre pourquoi - et l'expliquer à sa direction - la balance comptable censée être à 0 se retrouve en fait à 0,0001€.  ::ninja::

----------


## vectra

Yop les gens,

Je vais devoir, bien contre mon gré, devenir opérationnel en Python 3 dans pas très longtemps (développement généraliste plutôt que scripting shell).
Je suis à la recherche de bouquin physique / ebook de qualité pour me mettre en selle sur les pratiques modernes de Python. Pas forcément nécessaire de couvrir les bases de la programmation, plutôt les idiomes qui vont bien en usage usuel.
Je n'ai rien contre les moocs non plus; la qualitay avant tout.

Avez-vous des ressources à me recommander ?
De préférence, dans la langue de "j'expire"...

----------


## Kesitem

Perso, dans la même situation que toi, je suis partie sur un livre en français: Python 3 - Les fondamentaux du langage de Sébastien Chazallet.
J'ai apprécié le livre car il parle pas mal de la philosophie du langage.
J'ai complété avec des ressources internet.

----------


## FB74

> Yop les gens,
> 
> Je vais devoir, bien contre mon gré, devenir opérationnel en Python 3 dans pas très longtemps (développement généraliste plutôt que scripting shell).
> Je suis à la recherche de bouquin physique / ebook de qualité pour me mettre en selle sur les pratiques modernes de Python. Pas forcément nécessaire de couvrir les bases de la programmation, plutôt les idiomes qui vont bien en usage usuel.
> Je n'ai rien contre les moocs non plus; la qualitay avant tout.
> 
> Avez-vous des ressources à me recommander ?
> De préférence, dans la langue de "j'expire"...


Au besoin tu as des bundles sur Fanatical:

https://www.fanatical.com/fr/bundle/python-bundle
https://www.fanatical.com/fr/bundle/...e-2-nd-edition
https://www.fanatical.com/fr/bundle/...-coding-bundle
https://www.fanatical.com/fr/bundle/...e-2-nd-edition

----------


## Tramb

> Yop les gens,
> 
> Je vais devoir, bien contre mon gré, devenir opérationnel en Python 3 dans pas très longtemps (développement généraliste plutôt que scripting shell).


Toutes mes condoléances.

----------


## vectra

Que veux-tu, il faut bien bouffer...

----------


## deathdigger

> En informatique de gestion aussi les flottants sont absolument exclus pour les variables financières, on utilise généralement des entiers avec une unité fixée au centime/millième/dix-millième d'euro selon le domaine.  Et pour ceux qui passent outre la punition peut être assez sévère, quand il faut comprendre pourquoi - et l'expliquer à sa direction - la balance comptable censée être à 0 se retrouve en fait à 0,0001€.


En java, c’est une horreur. Ça fait :
0.12+0.12=0.24
0.12+0.12+0.12=0.35999999999999999999999
 :tired: 
Vu qu’on a besoin que de 2 voire 3 chiffres après la virgule, y’a des workarounds degueu. Genre multiplier par 100 et diviser à la fin ou arrondir via un String.format…

----------


## Teocali

> En java, c’est une horreur. Ça fait :
> 0.12+0.12=0.24
> 0.12+0.12+0.12=0.35999999999999999999999
> 
> Vu qu’on a besoin que de 2 voire 3 chiffres après la virgule, y’a des workarounds degueu. Genre multiplier par 100 et diviser à la fin ou arrondir via un String.format…


Ou utiliser les BigDecimal, qui sont fait pour ça, non ?

----------


## deathdigger

> Ou utiliser les BigDecimal, qui sont fait pour ça, non ?


Je ne connaissais pas et je viens de tester : de ce que je vois, tu ne peux pas faire d'opérations mathématiques sur des BigDecimal. Du coup, dans le doute, j'ai fait :


```
        float f = Float.valueOf("0.12");
        System.out.println(f);
        f += 0.12; 
        System.out.println(f);
        f += 0.12;
        System.out.println(f);
        java.math.BigDecimal bd =BigDecimal.valueOf(f);
        System.out.println(bd);
```

J'aime beaucoup le résultat : 


```
0.12
0.24
0.35999998
0.35999998450279236
```

 ::ninja::

----------


## Cwningen

> En java, c’est une horreur. Ça fait :
> 0.12+0.12=0.24
> 0.12+0.12+0.12=0.35999999999999999999999
> 
> Vu qu’on a besoin que de 2 voire 3 chiffres après la virgule, y’a des workarounds degueu. Genre multiplier par 100 et diviser à la fin ou arrondir via un String.format…


C'est quoi le problème que tu veux résoudre exactement ? La précision semble largement suffisante dans ce cas. 0,12 n'est pas un nombre exact en binaire, si tu veux des valeurs exactes il te faut des flottants en base 10.

----------


## Teocali

> Je ne connaissais pas et je viens de tester : de ce que je vois, tu ne peux pas faire d'opérations mathématiques sur des BigDecimal. Du coup, dans le doute, j'ai fait :
> 
> 
> ```
>         float f = Float.valueOf("0.12");
>         System.out.println(f);
>         f += 0.12; 
>         System.out.println(f);
>         f += 0.12;
> ...


Ben si, mais faut utiliser les méthodes, vu que ce ne sont pas des primitives.

Ou sinon, tu utilises des doubles.

EDIT : Tiens, example = https://www.online-java.com/BNlctVwOdj

Et après, on va entendre les mecs raler "ouais, java c'est de la merde, ouin, ouin". Apprenez a vous en servir, avant de raler  ::P:

----------


## Lazyjoe

> En java, c’est une horreur. Ça fait :
> 0.12+0.12=0.24
> 0.12+0.12+0.12=0.35999999999999999999999
> 
> Vu qu’on a besoin que de 2 voire 3 chiffres après la virgule, y’a des workarounds degueu. Genre multiplier par 100 et diviser à la fin ou arrondir via un String.format…


C'est pas un problème de java, c'est un problème de la façon dont fonctionnent les floats dans les processeurs.  ::P:

----------


## acdctabs

Ben oui pour l'argent tu prends des BigDecimal.
Pour le reste les Double c'est pas mal.

----------


## Teocali

> Ben oui pour l'argent tu prends des BigDecimal.
> Pour le reste les Double c'est pas mal.


Le mieux, a mon sens, pour la thunes, ça reste les entiers, et tu prends la plus petite unité de travail possible pour la monnaie avec laquelle tu bosses. C'est sans doute  le meilleur choix

----------


## William Vaurien

BigDecimal ça marche bien aussi, mais le code est un peu moche. 
Et il ne faut surtout pas faire new BigDecimal(unDouble) sinon ça fait de la merde aussi.
https://stackoverflow.com/questions/...le-constructor

----------


## deathdigger

Effectivement, ça marche, mais c'est aussi très moche :


```
        java.math.BigDecimal bd = BigDecimal.valueOf(Double.valueOf("0.12"));
        bd = bd.add(BigDecimal.valueOf(Double.valueOf("0.12")));
        bd = bd.add(BigDecimal.valueOf(Double.valueOf("0.12")));
        System.out.println(bd);
//0.36
```

(Ouais, généralement, mes entrées sont en string  ::lol:: )
Par contre avec des float.valueOf, c'est niet.

----------


## Cwningen

Il y a des constructeurs qui utilisent des chaines directement, utilisés d'ailleurs dans l'exemple de Teocali.

----------


## Teocali

> Effectivement, ça marche, mais c'est aussi très moche :
> 
> 
> ```
>         java.math.BigDecimal bd = BigDecimal.valueOf(Double.valueOf("0.12"));
>         bd = bd.add(BigDecimal.valueOf(Double.valueOf("0.12")));
>         bd = bd.add(BigDecimal.valueOf(Double.valueOf("0.12")));
>         System.out.println(bd);
> //0.36
> ...


le mec, il lit pas ce qu’on lui refile. Et après il se plaint. Toi t’es du genre à tester, te plaindre et lire la doc. Dans cet ordre  ::P:

----------


## deathdigger

Bizarre, il me semblait que je ne pouvais l’instancier avec une string. C’est peut-être mon ide qui a fait des siennes.

----------


## Shosuro Phil

Non mais pourquoi vous lisez pas ce qu'a écrit GrandFather? Les flottants (avec une précision ou une autre) c'est bien pour certains trucs, c'est pourri pour d'autres. Et dans certaines circonstances, c'est suffisamment critique pour qu'on s'impose des contraintes sur le développement des logiciels (et la thune, pour un financier, c'est critique).

----------


## Lazyjoe

> Et il ne faut surtout pas faire new BigDecimal(unDouble) sinon ça fait de la merde aussi.





> Effectivement, ça marche, mais c'est aussi très moche :
> 
> 
> ```
>         java.math.BigDecimal bd = BigDecimal.valueOf(Double.valueOf("0.12"));
>         bd = bd.add(BigDecimal.valueOf(Double.valueOf("0.12")));
>         bd = bd.add(BigDecimal.valueOf(Double.valueOf("0.12")));
>         System.out.println(bd);
> //0.36
> ...


Bon par contre je ne voulais pas faire de remarque sarcastique sur java au départ mais là il y a tendage de perche olympique....  ::ninja::

----------


## Teocali

> Bon par contre je ne voulais pas faire de remarque sarcastique sur java au départ mais là il y a tendage de perche olympique....


très souvent, le problème avec Java, c'est pas tant le code que l'interface chaise-clavier...

Parce que sinon, on peut reparler de C++ et des développeurs C++, avec leur tendance a foutre des templates dans des templates. parce que là, en terme de lisibilité... J'ai deja vu passer des postes ici qui m'ont fracturé la rétine...

----------


## Orhin

> très souvent, le problème avec le code, c'est pas tant le code que l'interface chaise-clavier...


Fix'd.

----------


## deathdigger

Quelqu'un bosse sur Azure Devops ?

J'essaie de faire un truc con, c'est mettre à dispo des releases. Je n'ai pas besoin que ça compile quoi que ce soit, je veux juste mettre des fichiers à dispo (notamment pour ceux qui sont stakeholders, un truc comme ça).
J'ai fait un artifact universl, j'ai fait un pipeline générique et... voilà  ::ninja::  Comment c'est censé marche cette merde ?
Alors j'ai bien compris qu'on pouvait télécharger le package via la CLI Azure, mais y'a pas moyen de le télécharger directement de l'interface web ?

----------


## Shurin

Hum, de ma maigre expérience,  tu récupérer des fichiers (souvent les artifacts issus d'un pipeline) pour en faire ce que tu veux.
Tu veux les rendre dispos où et comment? Un store, un serveur, un site? La mise à dispo c'est classique, genre un script d'envoi ftp ou une procédure Azure pour mettre le fichier dans un containers Azure.

----------


## Dross

Oui les CICD en général ça n'a pas de système clé en main pour publier des trucs, après c'est à toi de prévoir des ressources en ligne / partage réseau / etc où placer le résultat.

----------


## deathdigger

Ok, donc ce n’est pas comme github qui propose de stocker des releases, alors. C’est très con, je trouve, surtout qu’on peut le faire via la cli azure.

----------


## Dross

Bah en fait, c'est deux outils dans Github :
- t'a Github Actions qui est le CICD et qui ne propose pas d'hébergement et autre. 
- t'a Github Releases qui est le coté siteweb qui héberge et propose les téléchargements. 

Tu peux tout à fait publier de Azure CICD vers Github Release par exemple.

----------


## deathdigger

Ben là, mes repos sont sur Azure, du coup, je pensais naïvement qu'on pouvait faire les mêmes choses que dans Github, facilement.
Mais rien que lancer une ligne de commande pour publier/télécharger un artifact, c'est un autre délire...

----------


## Shurin

> Ben là, mes repos sont sur Azure, du coup, je pensais naïvement qu'on pouvait faire les mêmes choses que dans Github, facilement.
> Mais rien que lancer une ligne de commande pour publier/télécharger un artifact, c'est un autre délire...


C'est quoi ton cas d'usage précis?

----------


## deathdigger

Ça sert à stocker mon code source et les packages à déployer chez le client. Les packages ne sont pas des trucs compilables et déployables facilement, c’est assez spécifique. Github aurait été parfait (on était parti sur ça à la base), mais la DSI du client demande de passer par Azure (même s’ils ont 0 connaissance en interne).

----------


## Dross

J'ai regardé rapidement, ça a l'air assez âpre en effet. 

Si tu dois rester Azure, t'a les Azure Blob qui sont facile d'utilisation, c'est rapide à mettre en place, pas cher, et si ça se trouve t'a des pattern prédéfini pour ce genre de publication dans Azure Pipeline (jamais utilisé, mais comme c'est MS...) au pire c'est réglé avec une ligne de commande avec Azure CLI.
Après t'a plus qu'à partager les liens vers les blobs, ou donner accès au dossier complet, ou tout autre type d'accès qui sera adapté à ton usage.

----------


## deathdigger

Ce n'est pas non plus un truc de ouf, on va peut-être avoir quelques dizaines de sources+packages. Je vais voir avec les pipelines ce qu'il est possible de faire sans trop insister non plus, j'ai l'impression que tu peux y passer des semaines sur ça...

----------


## Shurin

C'est long et chiant à faire, surtout que tu fais la même chose en 10x moins de temps sur ta machine mais une fois que c'est posé, t'es tranquille pendant un moment et serein.

----------


## Shurin

Je me suis mis à vouloir aider des gens sur Stackoverflow, en me restreignant à mon domaine du moment.
J'étais déjà assez étonné quand je me contentais de  chercher des réponses du nombre de questions doublons (genre faire une recherche avec le titre t'amène déjà pleins de réponses pertinentes) mais je me rends compte que c'est encore pire.
Il y a tellement de questions très vagues, sans précisions, sans même donner d'erreur ou de code clair, parfois avec juste du code et un "help me".
Mais pourquoi ? Qu'est-ce qu'on peut espérer recevoir en faisant aussi peu d'efforts pour être à minima compris ?
Ça m'a vachement démotivé, j'ai l'impression de passer mon temps à demander des précisions à des personnes qui ne comprennent pas ce qu'elles veulent faire ou rediriger vers du déjà vu mille fois.
Je vais essayer d'autres sujets pour voir si c'est identique (ou si mon sujet est daubé) mais j'aurais bien aimé avoir des retours de canards sur leur utilisation de ce site.

----------


## Tramb

> Je vais essayer d'autres sujets pour voir si c'est identique (ou si mon sujet est daubé) mais j'aurais bien aimé avoir des retours de canards sur leur utilisation de ce site.


Perso j'ai posé deux questions vraiment très très très niche, et j'ai eu des réponses parfaites.
J'ai répondu à une ou deux autres, en donnant bien évidemment La Vérité. Mais effectivement quand je cherche des questions au pif à quoi répondre, je suis pas inspiré, ou c'est trop commun.

----------


## Kamasa

Les questions à la con ne viennent elles pas du système mis en place sur Stackoverflow qui nécessite d'avoir des points de réputations si on veut distribuer des +1/-1 sur les questions et réponses du site ?
J'ai cru comprendre que certains "farmaient" ces points en posant des questions un peu con/facile auxquels les gens peuvent répondre. (mais j'ai pas bien pigé comme tout ça fonctionnait)

----------


## GrandFather

Les questions vraiment trop vagues/incomplètes/triviales se font généralement saquer, ce n'est pas une technique fiable pour augmenter sa street cred sur StackOverflow.

----------


## Teocali

Je viens de tester https://chat.openai.com/chat avec des questions liés au code. Je pense que je ne donne pas 5 ans, 10 ans max, à la partie "developpeur" du metier d'analyste-developpeur pour disparaitres. C'est juste ultra bluffant.

----------


## rOut

Mis à part que le truc ne sait pas compter. En tout cas il est balaise pour affirmer n'importe quelle connerie et s'obstiner dans l'erreur.

- - - Mise à jour - - -



Belle analyse :3

----------


## Tramb

> Mis à part que le truc ne sait pas compter. En tout cas il est balaise pour affirmer n'importe quelle connerie et s'obstiner dans l'erreur.


C'est parce que je suis dans le corpus.




> Belle analyse :3


Héhé, finalement il programme comme le programmeur C moyen en effet.

----------


## Foksadure

Nulle doute que les analystes métiers feront également long feu, les bonnes pratiques managériales dispensées par les cabinets de conseil n'étant rien de plus que de faire rentrer l'activité réelle dans un outil conceptuel générique paramétré pour. Ergo l'uniformisation de pratiques hétérogènes par un dispositif technique, au nom de l'efficacité, de la rationalité ou de l'efficience, dont le résultat au bas de l'échelle fait souvent pitié.

https://portail-ie.fr/analysis/4183/...e-dinformation





> *L’intelligence artificielle va-t-elle révolutionner la recherche d’information ?*
> 
> L'intelligence artificielle permet aujourd’hui de générer des textes qui ressemblent à s’y méprendre à ceux écrits par les humains, de générer des conversations crédibles avec des robots conversationnels (chatbot). Le succès du dernier robot développé par OpenAI, ChatGPT, qui dépasse le million d'utilisateurs alors qu’il est toujours en phase de test, illustre bien le phénomène.





> Si l’internaute persiste, car s’est malheureusement la tendance, à ne vouloir trouver qu’une réponse simple, voire binaire, à une problématique parfois complexe, il risque de céder à l’usage facile de ces robots. Il y a en effet fort à parier que leur usage ne cesse de croitre. Rappelons que le succès des premiers moteurs de recherche reposait déjà sur une recherche de simplicité des internautes, quasiment un refus de réfléchir, laissant le soin de cette "intelligence" à l’outil.





> Or les algorithmes, programmes et robots ne font aujourd’hui que répéter, compiler, concaténer, certes sur une grande quantité de données collectées et d’expériences acquises, mais ils ne savent pas créer. Ils ne sont pas doués d’imagination.


En attendant la Singularité.  ::trollface::

----------


## Tramb

Ahah putain c'est bon j'ai demandé "Write a C function that allocates and zero n structs of size p bytes and doesn't exhibit any undefined behaviour, without using calloc" et il a fait direct l'erreur de pas checker la mul.
J'imagine même pas comment le niveau moyen de dev va baisser grâce à ce truc. Stack Overflow, ça reste 10x plus sérieux pour chercher de l'aide.

"Explain why you consider the multiplication cannot overflow"

> Enorme pipo bimbo complètement faux

----------


## rOut

D'ailleurs, toute réponse issue de GPT sur SO fera l'objet d'un ban de 30j sans avertissement.  https://stackoverflow.com/help/gpt-policy

----------


## vectra

J'avoue ne pas comprendre l'engouement autour de ces IA qui pissent du code.

Je m'essaie à l'exercice difficile de gagner ma vie dans le privé en tant que codeur, et généralement on me demande de maintenir et faire évoluer une grosse base de code. Soit bien évidemment lire beaucoup de code et comprendre comment fixer un petit bout, rajouter ou modifier une fonctionnalité en respectant l'architecture, etc.

Coder un programme de A à Z from scratch, c'est pas vraiment la difficulté à mon humble niveau. A la rigueur, c'est le genre de tâche qu'on attribue à des débutants sur des POCs (c'est dommage parce que perso c'est ce qui me plait le plus) pour leur permettre d'onboarder dans le service. Et même dans ce cas, on va valoriser de sortir du code top-moumoutte C++23 au faîte des dernières bonnes pratiques, et pas forcément ce qui constitue le gros de l'ensemble d'apprentissage.

----------


## rOut

C'est surtout très drôle de lire les conneries qu'il débite. Mais assez flippant d'imaginer qu'on puisse le prendre au sérieux, oui.

----------


## William Vaurien

Ce bot est plutôt bon pour générer de la documentation à partir du code. Par contre il peut effectivement glisser une aberration au milieu. Ce qui est drôle c'est de faire code -> Doc -> code.
Là c'est du grand n'importe quoi.
La revue de code et très consensuel. Et s'il rate encore des trucs il pourrait tout à fait s'intégrer dans un pipeline, sauf que pour le moment il ne travaille que sur une petite méthode. Si je lui file une classe java standard, c'est terminé pour le bot. Alors pour un projet entier il n'est pas encore prêt.
Et le bot qui code toute une application à partir des specs me semble du coup encore loin. 
Pour le moment ça restera un compagnon sympa pour développeur, capable d'expliquer du code ou de générer un truc particulier. Avoir la possibilité de passer d'une phrase en français vers une requête SQL ou une fonction ce sera appréciable.
Mais là j'ai l'impression qu'on a encore un peu de marge.

----------


## vectra

En gros, ne pas savoir faire ce qui est le plus chiant et le plus utile (refactos multiples, maintenance évolutive, etc) et priver le codeur de ce qui est le plus sympa. Et le saboter.

TL;DR c'est un truc qui fait fantasmer ceux qui ne savent pas coder et qui n'aiment pas coder, c'est ça?
Si ça livre du code qui ne marche pas, je ne vois pas comment un non-codeur va pouvoir y remédier.

----------


## Teocali

pour ça que je parle de de 10 ans, hein. Je lui ai demandé de me sortir une application écrite en kotlin , en lui donnant un cahier des charges succinct, l’architecture que je souhaitais et les bibliothèques que je voulais qu’il utilise, et le truc à commencé à me sortir tout le code de l’application, avant que le chat ne se chie dessus. C’était pas parfait, loin de la, mais clairement au dessus du niveau du dev qui sort d’école. Et ça répondait au besoin à 95% grosso modo. J’essaye de vous sortir ça dès que je suis de retour devant le PC.

Alors, oui, pour les domaines très pointus, comme vous le pratiquez majoritairement ici, ça mouline encore pas mal. Mais pour la grosse majorité du domaine, je pense qu’il y a une très très grosse utilité. Genre l’écriture des test unitaires ou ce genre de truc.

----------


## vectra

Ca vous arrive souvent qu'on vous commande une application complète? Y'a des domaines d'activité où on demande plus souvent ce genre de choses?
Je rebondis sur ce que je disais plus haut: la majeure partie du temps, le travail qu'on attend de moi, c'est de la maintenance évolutive plus ou moins pointue. Ce dans quoi je suis moins bon, et pour lequel une aide de l'IA serait bienvenue.

----------


## Tramb

Je pense pas que ça s'effondre sur le "très pointu", vu ce que j'en ai vu. Ça marche juste pas sur des trucs triviaux.
Donc j'ai du mal à croire que ça passe à l'échelle sur plus large.

Et oui, je passe aussi beaucoup plus de temps à maintenir et modifier les applis qu'à en commencer de nouvelles.

----------


## rOut

Le problème c'est pas tellement la qualité de ce qu'il peut produire mais avant tout un problème de confiance. C'est absolument impossible d'avoir confiance dans l'outil puisque lui même n'a aucune idée de ce qui fait.

Un humain, tu pourras estimer un degré de confiance à lui accorder en fonction de son expérience et de tes interactions successives. Tu peux aussi estimer qu'un humain va apprendre de ses erreurs, et considérer qu'à force de reviews et correction il en fera moins.

Si l'humain est incapable d'apprendre ou s'il montre une incapacité à intégrer des concepts basiques tu pourras même considérer qu'il n'est pas fait pour faire ce boulot. Ici l'outil est absolument imprévisible, et même si peut être capable de moduler ses paramètres en fonction de ses erreurs (et encore, il préfère le déni), il est incapable de toute conceptualisation.

Du coup on peut considérer qu'il est inadapté pour ce boulot, et qu'il va même handicaper les développeurs en les empêchant d'apprendre.

----------


## Kamikaze

Lol ce qu'il faut pas lire des fois (je réponds pas aux posts précédents mais la hype actuelle que je vois un peu partout). C'est très précisément de la génération bruitée ce que font ces """AI""", c'est du gadget, ça produira rien de concret. C'est plus orienté générer un truc qui parait correct (grammaticalement, et d'un point de vue natural language) que quoi que ce soit de véritablement correct. Dans 6 mois on n'en parlera plus.

M'enfin s'comme d'hab, truc à la mode qui fait du bruit, quelques mecs qui vont tenter de pousser ça à fond niveau marketing pour prendre l'argent, et y'aura aucune application véritable.

Ca me rappelle la récente analyse de l'échec complet d'Alexa d'Amazon. Les mecs expliquaient que la plupart des utilisateurs s'en servaient à peine. Tu compares ça à la hype du début où tout le monde t'expliquait les possibilités sans limite d'avoir une AI qui comprend ce que tu raconte à la maison.

Y'a beaucoup de commentaires sur le sujet de personnes qui n'ont pas une bonne compréhension de ce que sont la plupart des réseaux de neurones actuellement, c'est des structures plutôt monolithiques au final qui ont un degré de flexibilité très limité quand tu veux combler des erreurs précises. C'est vraiment pas fait pour être exact, c'est très adapté à des problèmes peu sensibles au bruit comme la génération d'image ou de texte plus ou moins correct grammaticalement, mais ça s'arrêtera là, t'auras jamais une construction cohérente. À la limite en combinant plusieurs modèles chacun dédié à une tâche particulière, mais bref, c'est simplement pas intéressant et pas adapté à ce genre de problème.

À vrai dire une des clefs c'est aussi que le "problème" est un espèce de souhait abstrait mal défini, donc indépendamment des considérations ci dessus, si tu sais pas où tu vas s'pas le software qui devinera à ta place. Y'a cet espèce de délire abstrait "ah oui une IA pourrait générer du code, générer de la doc, faire ceci, faire cela" mais c'est bien trop vague et dépourvu de direction. T'iras bien plus vite avec un algo dédié/parseur qui fourni une visualisation du code par exemple. Mais bon s'trop vendeur de coller "IA" et de dire que ça réglera tout tes problèmes.

L'AI c'est bien comme première étape de décantation dans des problèmes avec un très grand nombre de variable, comme le repliement de molécule, mais on voit très bien que c'est limité et que ce n'est qu'une première étape, ce n'est jamais ce délire de produit complet qui te fait tout de bout en bout à partir d'un souhait abstrait "s'il te plait génie de l'AI, résout ce problème de bout en bout"

----------


## Orhin

> Ca vous arrive souvent qu'on vous commande une application complète? Y'a des domaines d'activité où on demande plus souvent ce genre de choses?


Dans mon ancienne boite, c'était plus de 75% de mon travail.

----------


## vectra

C'te chance  :Mellow2: 
Pourquoi t'es parti, du coup?


Sinon, si on peut commencer à faire des utils de TU couvrants grâce à l'IA, pourquoi pas?
Mais sans analyse de l'API maison à couvrir, je ne vois pas ce qu'il pourra faire.

----------


## Nilsou

> Mis à part que le truc ne sait pas compter. En tout cas il est balaise pour affirmer n'importe quelle connerie et s'obstiner dans l'erreur.
> 
> - - - Mise à jour - - -
> 
> https://i.ibb.co/51Vt74X/image.png
> 
> Belle analyse :3


Pas compris où est le undefined behaviour ici, tu peux expliquer ?  ::unsure:: 
edit : le non test du dépassement du int sur l'addition ? 




> pour ça que je parle de de 10 ans, hein. Je lui ai demandé de me sortir une application écrite en kotlin , en lui donnant un cahier des charges succinct, l’architecture que je souhaitais et les bibliothèques que je voulais qu’il utilise, et le truc à commencé à me sortir tout le code de l’application, avant que le chat ne se chie dessus. C’était pas parfait, loin de la, mais clairement au dessus du niveau du dev qui sort d’école. Et ça répondait au besoin à 95% grosso modo. J’essaye de vous sortir ça dès que je suis de retour devant le PC.
> 
> Alors, oui, pour les domaines très pointus, comme vous le pratiquez majoritairement ici, ça mouline encore pas mal. Mais pour la grosse majorité du domaine, je pense qu’il y a une très très grosse utilité. Genre l’écriture des test unitaires ou ce genre de truc.


Je pense aussi que ça va être employé de plus en plus comme outil annexe pour pondre des schéma de fonction avant retouche par un programmeur.




> Lol ce qu'il faut pas lire des fois (je réponds pas aux posts précédents mais la hype actuelle que je vois un peu partout). C'est très précisément de la génération bruitée ce que font ces """AI""", c'est du gadget, ça produira rien de concret. C'est plus orienté générer un truc qui parait correct (grammaticalement, et d'un point de vue natural language) que quoi que ce soit de véritablement correct. Dans 6 mois on n'en parlera plus.


Attention à ce genre d'affirmation, si tu mix compréhension du langage naturel bien aboutit et capacité à pondre un code fonctionnel, on risque vite d'obtenir suffisament pour remplacer 95% des programmeurs actuels qui sont des petites mains sur des applis simplistes.

Car il ne faut pas oublier un truc : tout comme dans l'art de créer des dessins etc, la plupart des gens qui vivent du code sont des petites mains faisant des taches relativement simple, genre des applis de base mal codé pour smartphone. Ce ne sont ni plus ni moins que des taches de traducteur finalement. Une IA un peu dégourdie pourra vite remplacer tout ça à peu de frais.
Et si l'impact sur le programmeur de qualité sera faible, voir positif (avec divers outils aidant à coder), l'impact sur les 90% de petites mains du domaine risque d'être une complète annihilation.
Ce qui est en train doucement d'arriver aux milliers de petites mains qui étaient embauché pour faire tel ou tel illustration rapide pour les entreprises. 

On a vécu la même chose chez les traducteurs d'ailleurs : grosse diminution du nombre de traducteur qui faisaient des petits taf, google trad fait le taf maintenant. Et emploi de logiciel de trad automatique comme premier jet comme outil de base par les traducteurs professionnels restant. 




> À vrai dire une des clefs c'est aussi que le "problème" est un espèce de souhait abstrait mal défini, donc indépendamment des considérations ci dessus, si tu sais pas où tu vas s'pas le software qui devinera à ta place. Y'a cet espèce de délire abstrait "ah oui une IA pourrait générer du code, générer de la doc, faire ceci, faire cela" mais c'est bien trop vague et dépourvu de direction. T'iras bien plus vite avec un algo dédié/parseur qui fourni une visualisation du code par exemple. Mais bon s'trop vendeur de coller "IA" et de dire que ça réglera tout tes problèmes.


Perso je le vois plus comme outil d'aide à la programmation. Ça pourrait être intégré aux compilo pour détecter des erreurs un peu fourbe, d'une part, et aider à générer à la volée des prototypes de fonctions, d'autres part. Ça pourra également pas mal aider à faire un début de documentation.
De la même manière que les outils d'IA en imagerie deviennent un standard.

----------


## Cwningen

> Pas compris où est le undefined behaviour ici, tu peux expliquer ? .


L'overflow pour les entiers signés est UB.

----------


## Kamikaze

Avant toute discussion sur l'IA j'pense qu'il faudrait forcer genre 2 lignes d'explication sur en quoi "l'approche IA" serait supérieure à une implémentation "classique" concernant le problème donné.

Genre si je demande à une IA de me faire l'ensemble de Mandelbrot, ça va être très ressemblant et ça pourra passer de visu pour le grand public, mais ça sera de la merde inexacte. C'est simplement pas l'outil adapté à la tâche. C'est très insidieux et sournois d'utiliser un terme en vogue sans justifier son inclusion. Un espèce de mensonge par omission.




> genre des applis de base mal codé pour smartphone. Ce ne sont ni plus ni moins que des taches de traducteur finalement.


Là l'approche c'est simplement des outils genre Wix ou Squarespace, voire des milliers d'autres exemples d'applis haut niveau qui permettent de manipuler des composants qui ultimement généreront le code sous jacent. Donc là c'est comme dire "IA" alors que la réponse adaptée c'est "Wix" ou "Unreal Engine", pourquoi le terme IA apparaît dans la discussion.

Concernant les traducteurs automatiques c'est bien l'exemple parfait dans la lignée de ce que je raconte, tous les traducteurs qui fonctionnent correctement se reposent principalement sur du NLP tout à fait classique. La valeur ajoutée de l'IA est mineure.

Et on voit bien un échec total dans la traduction de languages contextuels comme le japonais ou autre, alors que franchement ça serait sûrement pas difficile à implémenter si on y mettait les moyens.

C'est simplement frustrant de voir ce lance roquette fantasmatique "IA" appliqué à tout un tas de problèmes hors sujet. C'est devenu cet espèce de terme vide qui fusionne "IA" des années 70/80 qui t'offre un adversaire sur une partie de pong, "algorithme" en général et réseaux de neurones, le terme n'a aucun sens.

----------


## Teocali

> Lol ce qu'il faut pas lire des fois (je réponds pas aux posts précédents mais la hype actuelle que je vois un peu partout). C'est très précisément de la génération bruitée ce que font ces """AI""", c'est du gadget, ça produira rien de concret. C'est plus orienté générer un truc qui parait correct (grammaticalement, et d'un point de vue natural language) que quoi que ce soit de véritablement correct. Dans 6 mois on n'en parlera plus.


C'est marrant, mais ça grosso modo 6 mois que le copilot de Github est sorti




> L'AI c'est bien comme première étape de décantation dans des problèmes avec un très grand nombre de variable, comme le repliement de molécule, mais on voit très bien que c'est limité et que ce n'est qu'une première étape, ce n'est jamais ce délire de produit complet qui te fait tout de bout en bout à partir d'un souhait abstrait "s'il te plait génie de l'AI, résout ce problème de bout en bout"


Ou comme étape finale, par exemple celle de pisser le code, une fois que tu as bien défini les contours de ton problèmes, les solutions que tu veux appliquer et que tu dois l'expliquer au dev. Ben là, tu l'expliques à l'AI, qui fait le travail préliminaire. Et tu as le dev qui reprend le code et qui s'assure (en le modifiant si necessaire) qu'il répond bien au besoin. Honnetement, en l'état, je sais que je vais me servir de cet outil à très court terme pour établir le squelettes de mes devs, même au sein de mon application actuel. ça veut pas dire que je vais lui faire une confiance aveugle, mais si je prends le temps dans un ticket d'expliquer clairement ce que je dois faire et comment, et que je poste cette explication à l'AI, et qu'elle me génère du code correct à 95% (et vu ce que j'ai vu du peu que j'ai testé, on en est là), c'est deja un gros gain de temps et de qualité de la documentation, le ticket étant plus explicite avec l'AI que sans.




> Je pense aussi que ça va être employé de plus en plus comme outil annexe pour pondre des schéma de fonction avant retouche par un programmeur.


This



> Avant toute discussion sur l'IA j'pense qu'il faudrait forcer genre 2 lignes d'explication sur en quoi "l'approche IA" serait supérieure à une implémentation "classique" concernant le problème donné.


Jamais dit qu'elle était supérieur. J'ai juste dit qu'elle était équivalente *pour le moment* à ce que sort un inge en sorti d'école, et bcp plus rapide. Mais je serais pas surpris qu'a terme, elle devienne plus performante. On le voit avec l'ingenierie mécanique. Sur certain domaine, L'IA a sorti des pièces aussi solide (voir plus) avec moins de matière très vite, là ou des inge humains n'auraient jamais pensé a sortir une pièce comme ça, ou après bien des années de R&D.




> Genre si je demande à une IA de me faire l'ensemble de Mandelbrot, ça va être très ressemblant et ça pourra passer de visu pour le grand public, mais ça sera de la merde inexact. C'est simplement pas l'outil adapté à la tâche. C'est très insidieux et sournois d'utiliser un terme en vogue sans justifier son inclusion. Un espèce de mensonge par omission.


Parce que être capable de sortir le set de Mandelbrot, c'est representatif de l'industrie du software, pour toi ? Oo





> Là l'approche c'est simplement des outils genre Wix ou Squarespace, voire des milliers d'autres exemples d'applis haut niveau qui permettent de manipuler des composants qui ultimement généreront le code sous jacent. Donc là c'est comme dire "IA" alors que la réponse adaptée c'est "Wix" ou "Unreal Engine", pourquoi le terme IA apparaît dans la discussion.


Parce que tu définies ton problème, tes contraintes (métier et/ou techniques), tes besoins et l'IA est capable de le comprendre est de sortir le code
Je lui ai posé la question suivante : 



> Create a kotlin application using Spring boot, Spring MVC and ktorm.
> This application should allow you to manage Mandate and Clients.
> A mandate is composed of a mandate token and a currency.
> A client can have a name, an address, a phone number and zero or more mandates. It cannot have more than one mandate with the same currency.
> Mandate and client information should be stored in Postgresql database.


et elle m'a sorti le code suivant


```
import org.springframework.boot.SpringApplication
import org.springframework.boot.autoconfigure.SpringBootApplication
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration
import org.springframework.context.annotation.Bean
import org.springframework.context.annotation.Configuration
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer
import java.sql.Connection
import java.sql.DriverManager

@SpringBootApplication(exclude = [DataSourceAutoConfiguration::class])
class Application {

    companion object {
        @JvmStatic
        fun main(args: Array<String>) {
            SpringApplication.run(Application::class.java, *args)
        }
    }
}

@Configuration
class WebMvcConfig : WebMvcConfigurer {

    // Add MVC configuration here, such as view controllers and view resolvers
}

// Singleton object representing the mandate table in the database
object Mandates : Table<Nothing>("mandates") {
    val mandateToken = varchar("mandate_token")
    val currency = varchar("currency")
}

// Singleton object representing the client table in the database
object Clients : Table<Nothing>("clients") {
    val name = varchar("name")
    val address = varchar("address")
    val phoneNumber = varchar("phone_number")
}

// A data access object (DAO) for managing clients in the database
class ClientDao {

    fun createClient(name: String, address: String, phoneNumber: String) {
        Database.connect({ DriverManager.getConnection(it) })
            .use {
                it.insertInto(Clients)
                    .set(Clients.name, name)
                    .set(Clients.address, address)
                    .set(Clients.phoneNumber, phoneNumber)
                    .execute()
            }
    }

    fun deleteClient(id: Long) {
        Database.connect({ DriverManager.getConnection(it) })
            .use {
                it.deleteFrom(Clients)
                    .where { Clients.id eq id }
                    .execute()
            }
    }

    fun modifyClient(id: Long, name: String, address: String, phoneNumber: String) {
        Database.connect({ DriverManager.getConnection(it) })
            .use {
                it.update(Clients)
                    .set(Clients.name, name)
                    .set(Clients.address, address)
                    .set(Clients.phoneNumber, phoneNumber)
                    .where { Clients.id eq id }
                    .execute()
            }
    }
}

// A data access object (DAO) for managing mandates in the database
class MandateDao {

    fun createMandate(mandateToken: String, currency: String, clientId: Long) {
        // Check if the client already has a mandate with the given currency
        val existingMandate = Database.connect({ DriverManager.getConnection(it) })
            .use {
                it.selectFrom(Mand
```

Puis le chat a planté, il devait pas être dimensionné pour une réponse de cette taille.
Pour info, le code n'est pas parfait et doit de toute façon être validé mais il compile et répond aux besoins. C'est quand même très impressionnant je trouve.




> C'est simplement frustrant de voir ce lance roquette fantasmatique "IA" appliqué à tout un tas de problèmes hors sujet. C'est devenu cet espèce de terme vide qui fusionne "IA" des années 70/80 qui t'offre un adversaire sur une partie de pong, "algorithme" en général et réseaux de neurones, le terme n'a aucun sens.


On n'applique pas de fantasme, là, on parle deja d'un outil deja disponible, et utilisable gratuitement. Je te dirais bien d'aller y jeter un oeil, mais sachant que tu es deja convaincu de son inutilité, ça ne servira pas à grand chose je pense.

----------


## Nilsou

> Avant toute discussion sur l'IA j'pense qu'il faudrait forcer genre 2 lignes d'explication sur en quoi "l'approche IA" serait supérieure à une implémentation "classique" concernant le problème donné.


Dans les cas sus-cités dans mon post c'est la rapidité, d'une part, et le cout d'autre part. Si je veux juste implémenter une modif dans une appli pour smartphone et qu'une IA peut me le faire pour 0.5€ sur un serveur en 30 seconde chronos, pourquoi je me ferais chier à engager une petite main pour X semaines ? 




> Concernant les traducteurs automatiques c'est bien l'exemple parfait dans la lignée de ce que je raconte, tous les traducteurs qui fonctionnent correctement se reposent principalement sur du NLP tout à fait classique. La valeur ajoutée de l'IA est mineure.


Les techniques de NLP moderne impliquent presque toutes de l'IA et les compagnies qui pondent des logiciels du genre l'ont intégrés depuis des années dans leurs algos. 




> Et on voit bien un échec total dans la traduction de languages contextuels comme le japonais ou autre, alors que franchement ça serait sûrement pas difficile à implémenter si on y mettait les moyens.


Simple question de temps de recherche sur ces langages. La recherche est pas mal occidentalo-centré, sur l'IA en général. Les bases de données sont des bases sur le latin etc. 
C'est comme la reco de visage et les personnes noires ...




> C'est simplement frustrant de voir ce lance roquette fantasmatique "IA" appliqué à tout un tas de problèmes hors sujet. C'est devenu cet espèce de terme vide qui fusionne "IA" des années 70/80 qui t'offre un adversaire sur une partie de pong, "algorithme" en général et réseaux de neurones, le terme n'a aucun sens.


Certes mais il y a des endroits où c'est une gamme d'algorithme qui dépote tout, malheureusement pour les petites mains qui faisaient le taf avant ...

----------


## Orhin

> C'te chance 
> Pourquoi t'es parti, du coup?


Car j'en avais marre de commencer un nouveau projet tous les 6 mois justement.  ::P: 
(les 25% qui restent c'était de la maintenance ou évolution sur nos anciens projets)

J'ai fait ça pendant 6 ans, c'était très intéressant et ultra formateur (beaucoup de projet de petite taille donc interactions directes avec les clients très souvent).
Mais du coup je voulais changer pour une boite qui fait son propre produit avec quelques conditions :
- petite taille pour pouvoir avoir une influence sur les décisions
- récente pour pouvoir participer à la création du bousin, pas à sa maintenance
- avec une majorité de séniors pour avoir le minimum d'encadrement à faire
- full-remote de préférence

Du coup j'ai trouvé ce que je cherchais en Aout avec une startup sur Paris (ce qui m'a permis de faire un beau 50% d'augmentation au passage  ::P: ) et ça se passe super bien depuis.




> la plupart des gens qui vivent du code sont des  petites mains faisant des taches relativement simple, genre des applis  de base mal codé pour smartphone.


Alors ça doit dépendre  des contextes mais c'était pas du tout le cas dans l'ESN où je  bossais (et pas non plus pour mes connaissances bossant dans le  domaine).
Le gros apport d'un ingé, c'est pas le code en lui même  (quoique la différence de qualité entre un bon senior et un junior est  sidérale), mais surtout la compréhension et l'expression du besoin  client.

Les cahiers des charges précis où tout est bien décrit,  c'est plus l'exception que la règle (et j'en ai vu un paquet où fallait  de toute façon changer la moitié).

----------


## Mr Slurp

> la plupart des gens qui vivent du code sont des petites mains faisant des taches relativement simple


Alors je dois vivre dans un monde parallèle, parce que en 17 années de service, j'ai jamais eu l'impression d'avoir croisé un seul dev qui était une petite main qui ne faisait que coder un besoin parfaitement exprimé.




> Le gros apport d'un ingé, c'est pas le code en lui même (quoique la différence de qualité entre un bon senior et un junior est sidérale), mais surtout la compréhension et l'expression du besoin  client.
> 
> Les cahiers des charges précis où tout est bien décrit,  c'est plus l'exception que la règle (et j'en ai vu un paquet où fallait  de toute façon changer la moitié).


Voilà, le cahier des charges dont l'intégralité du besoin est clairement exprimé, bah c'est le code du produit fini en fait.

----------


## Dross

> Alors je dois vivre dans un monde parallèle, parce que en 17 années de service, j'ai jamais eu l'impression d'avoir croisé un seul dev qui était une petite main qui ne faisait que coder un besoin parfaitement exprimé.

----------


## Nilsou

> Alors je dois vivre dans un monde parallèle, parce que en 17 années de service, j'ai jamais eu l'impression d'avoir croisé un seul dev qui était une petite main qui ne faisait que coder un besoin parfaitement exprimé.


T'a jamais du bosser en SSII ou dans des grosses boites de services. Nous on envoi plein d'étudiants dans des trucs genre Sopra Sterria, c'est des usines à pisseurs de code. Et dans d'autres SSII, notamment dans les multiples boites qui pondent des petites applis pour smartphone, c'est que des petites mains tout pareil.
Et en général c'est des bouts de code sur des besoins très simple, mais qu'il faut faire, ce pourquoi on mets des armées de CDD, stagiaire, alternants, embauché débutant sur le sujet.

----------


## vectra

> Voilà, le cahier des charges dont l'intégralité du besoin est clairement exprimé, bah c'est le code du produit fini en fait.


Tout à fait.
D'ailleurs, c'est pas (si) rare que l'expression basique de besoins vitaux pour le projet arrive ... après la moitié du délai imputé au projet, et ce suite à forcing de nos managers qui exigent que le client arrête de se foutre de notre gueule.

- - - Mise à jour - - -




> T'a jamais du bosser en SSII ou dans des grosses boites de services. Nous on envoi plein d'étudiants dans des trucs genre Sopra Sterria, c'est des usines à pisseurs de code. Et dans d'autres SSII, notamment dans les multiples boites qui pondent des petites applis pour smartphone, c'est que des petites mains tout pareil.
> Et en général c'est des bouts de code sur des besoins très simple, mais qu'il faut faire, ce pourquoi on mets des armées de CDD, stagiaire, alternants, embauché débutant sur le sujet.


Ca revient un peu à ce que je disais tout à l'heure.
C'est du taf très peu valorisé et valorisable. Son principal intérêt est de former au métier des jeunes codeurs qui sont très peu payés pour le faire, et qui en parallèle vont apprendre le métier d'employé et capter des connaissance métier.
Si l'IA peut dorénavant le faire à leur place, ça va devenir chaud de les faire monter en compétence

----------


## Mr Slurp

> T'a jamais du bosser en SSII ou dans des grosses boites de services.


11 ans d'ESN en France pourtant.

----------


## Nilsou

> Ca revient un peu à ce que je disais tout à l'heure.
> C'est du taf très peu valorisé et valorisable. Son principal intérêt est de former au métier des jeunes codeurs qui sont très peu payés pour le faire, et qui en parallèle vont apprendre le métier d'employé et capter des connaissance métier.
> Si l'IA peut dorénavant le faire à leur place, ça va devenir chaud de les faire monter en compétence


Certes, c'est un problème, mais c'est le genre de problème où en général on se rends compte du soucis à posteriori façon « ha mince alors » ^^ .
Mais voila, en général c'est ce genre de taf très peu valorisé qui est remplacé. Parce que c'est peu valorisé mais c'est de la masse. 




> 11 ans d'ESN en France pourtant.


T'a du avoir de la chance pour jamais croiser de pisseurs de code  :Cafe2:

----------


## gros_bidule

On a déjà des outils qui permettent de réduire la quantité de code à pisser. Exemple tiré du monde Java + Spring : JHipster. En 5min tu as les bases d'une API REST avec la couche sécu, l'accès à la base de données, et même une admin web en Angular ou autre autre chose par ex. Le code métier, tu vas le greffer à ce beau projet tout neuf, et tu vas le faire à la sauce JHipster, afin de suivre les montées en version de cet outil (notamment pour rester secure).
Si tu t'en écartes ou si tu souhaites t'en défaire, c'est très compliqué. Mais si tu travailles sérieusement, ça fait le taff. Le seul gros reproche que je ferai, c'est que c'est encore plus une boite noire que Spring ou Spring Boot. Autant avec Spring tu t'en sorts si tu as de l'expérience avec lui, autant JHipster... pfiou. Puis tu n'apprends pas vraiment à faire du Spring du coup.

Mais voilà, si je devais choisir comment commencer un projet, et si on me demande d'aller très vite, je choisirais un générateur/moteur type JHipster plutôt qu'un projet généré par IA.
Parcontre, une IA qui initie un projet basé sur JHispter, là pourquoi pas. Ou bien pour monter une petite démo, ou tester rapidos une techno. 
Mais le truc pondu par une IA, pour de la prod, ça me semble encore plus bancal que JHipster. Ce dernier lui, il est testé et documenté. Le code pondu par l'IA, déjà tu n'es pas sûr qu'il fonctionne vraiment, et tu n'auras aucun suivi. C'est, de mon point de vue, un stack-overflow (aves ses avantages et inconvénients) sous stéroïdes, mais pas plus.

Dans des domaines autres que le dev, ça doit être différent...

----------


## deathdigger

Mouais...
C'est comme le RAD ou les super techno qui te permettent promis-juré-craché de faire des applications sans pondre une ligne de code. Du délire marketing pour Jean-Michel de la compta qui veut une application mais qui s'énerve parce que les devs ne comprennent rien à ce qu'il dit...
J'aime beaucoup ce qui est fait sur VS, c'est vraiment bien foutu pour augmenter la vitesse du codeur (en mode auto-complétion++), mais ça ne pondra jamais une appli complexe. Et quid de la maintenabilité ? Si tu dois coder une maj de ta super-appli, l'IA repart de zéro ? Et qu'est-ce qui t'assures que dans le process, ça n'a pas tout pété ?
On risque de passer plus de temps à faire de la revue de code que si on avait codé directement.

----------


## Teocali

> Mouais...
> C'est comme le RAD ou les super techno qui te permettent promis-juré-craché de faire des applications sans pondre une ligne de code. Du délire marketing pour Jean-Michel de la compta qui veut une application mais qui s'énerve parce que les devs ne comprennent rien à ce qu'il dit...
> J'aime beaucoup ce qui est fait sur VS, c'est vraiment bien foutu pour augmenter la vitesse du codeur (en mode auto-complétion++), mais ça ne pondra jamais une appli complexe.


Et ben tu vois, sachant que j'ai réussi a lui faire pondre un squelette d'application Spring boot (avant que le chat ne se chie dessus, voir plus haut), je serais pas aussi sur que toi sur le "jamais"




> Et quid de la maintenabilité ? Si tu dois coder une maj de ta super-appli, l'IA repart de zéro ? Et qu'est-ce qui t'assures que dans le process, ça n'a pas tout pété ?


On peut tout a fait imaginer intégrer cet assitant dans le projet dans son ensemble, qu'il garde connaissance des précédentes interactions et de l'état du projet a l'instant de la demande.
Si tu vas jouer avec chat.openai, tu peux lui demander de revenir sur des réponses précédentes, par exemple pour modifier du code, ou autre.




> On risque de passer plus de temps à faire de la revue de code que si on avait codé directement.


De toute façon, même maintenant, il faut dans l'idéal, faire de la revue du code, de la validation poussée et des specifications techniques complètes et claires. On ne le fait jamais, parce qu'on a pas le temps. Si tu as un aide au developpement++ (plus que de la simple autocompletion) qui te permet de gagner ce temps, ben, perso, je trouve que c'est un gain, hein.

Après, je le repete, je ne pense pas que qu'une AI soit utilisable pour générer du code qui n'a pas besoin d'être revu, loin de là. Mais d'ici 5 à 10 ans, qui peut le dire.

A noter que  l'API te permet d'avoir accès a plusieurs modèles de génération de code, plus ou moins avancé, et je ne suis pas sur que celui qui soit dispo dans le chat soit le plus avancé, justement. je pense que je vais me prendre un compte et jouer un peu avec.

----------


## Orhin

> T'a du avoir de la chance pour jamais croiser de pisseurs de code


Ou alors peut être que les gens qui sont dans les entreprises ont une meilleure vision que toi qui bosse dans la recherche ?  ::siffle:: 

Sans troller, je pense que t'as une vision assez biaisée du truc car tu ne vois que les étudiants/juniors (que vous "envoyez" en ESN).
Effectivement eux vont "pisser" du code (encore qu'un stage bien foutu, tu fais pas que ça normalement), mais ça ne dure qu'un temps.
Du coup, si la majorité des arrivants sont bien des "pisseurs de code", une bonne partie des gens plus expérimentés ne le sont plus vraiment (qu'ils soient restés en ESN ou partis chez un éditeur logiciel).




> Si l'IA peut dorénavant le faire à leur place, ça  va devenir chaud de les faire monter en compétence


Yep, c'est un point d'inquiétude.




> Dans des domaines autres que le dev, ça doit être différent...


Ça dépend aussi pas mal de la typologie de projet.
Si tu fais de l'appli de gestion avec principalement du CRUD et quelques règles métiers, oui y'a pas mal de solutions maintenant.
Après dès que tu fais des trucs un peu spécifiques, c'est déjà plus chaud (mon projet actuel c'est une appli web de montage vidéo avec une grosse composante IA pour générer/manipuler le contenu, du coup on avait pas vraiment d'outil clé en main^^).




> Après, je le repete, je ne pense pas que qu'une AI soit utilisable pour générer du code qui n'a pas besoin d'être revu, loin de là. Mais d'ici 5 à 10 ans, qui peut le dire.


Perso je pense pas que générer du code propre soit le problème, c'est pas la partie la plus complexe, loin de là.
Y'a 2 questions plus importantes :
1) est-ce que le code généré permet de répondre facilement et correctement au besoin client ? Car si il faut être expert dans le système pour générer précisément ce qu'on veut (genre connaitre les bons mots clés, les tournures de phrases, etc), au final on va juste créer un nouveau métier d'expert IA

2) est-ce que le code généré peut être innovant ? Dans le sens réaliser des choses qui ne sont pas (ou très peu) présentes sur le marché. Ou utiliser les toutes dernières API des téléphones/navigateurs/OS.

----------


## Teocali

> Ou alors peut être que les gens qui sont dans les entreprises ont une meilleure vision que toi qui bosse dans la recherche ? 
> 
> Sans troller, je pense que t'as une vision assez biaisée du truc car tu ne vois que les étudiants/juniors (que vous "envoyez" en ESN).
> Effectivement eux vont "pisser" du code (encore qu'un stage bien foutu, tu fais pas que ça normalement), mais ça ne dure qu'un temps.
> Du coup, si la majorité des arrivants sont bien des "pisseurs de code", une bonne partie des gens plus expérimentés ne le sont plus vraiment (qu'ils soient restés en ESN ou partis chez un éditeur logiciel).
> 
> 
> Yep, c'est un point d'inquiétude.
> 
> ...


Je pense que c'est ce qu'on aura, oui, et que ce métier remplacera le taf de "programmeur", dans le sens ou on ne sortira peu, voir plus de ligne de code, par rapport a ce qu'on code maintenant. Et qui sait ensuite avec les progrès de l'IA si ce même métier ne disparaitra pas finalement assez vite ?




> 2) est-ce que le code généré peut être innovant ? Dans le sens réaliser des choses qui ne sont pas (ou très peu) présentes sur le marché. Ou utiliser les toutes dernières API des téléphones/navigateurs/OS.


Actuellement ? Non, clairement pas. Mais dans 5-10 ans ?

Comme dit, y'a eu des trucs qui sont sorti en ingenierie ou l'IA te sortait des pièces plus performantes et efficaces que ce qu'une armée d'ingé n'aurait jamais pu te sortir. Très clairement, ce sont des pièces impossible a produire à la main, et qui pour bcp, font usage de l'impression 3D, mais c'et assez impressionnant. Les ingenieurs en question n'aurait sans doute jamais imaginé que ce soit possible y'a 5-10 ans.

----------


## Athelas

Pareillement, je ne m'attendais pas à un tel niveau déjà en 2022... ce que ça laisse entrevoir c'est qu'on va bientôt remplacer google par ces assistants d'ici quelques temps...

Juste par curiosité j'ai demandé à ChatGPT de me générer en python un bout de code pour me connecter à l'API de sophos cloud (un antivirus) et un webservice en golang.

Je m'attendais à moitié à voir un truc générique (vu que les résultats sont limités à 2021) mais au final elle a pondu un truc proprement lié aux endpoints de l'API sophos. 

Certes, en l'état, impossible que ça marche (il manquait 2 étapes cruciales, notamment pour générer le token temporaire) mais c'est ni plus ni moins des trucs que tu peux utiliser tels quels pour te faire une maquette très rapidement.

Pour la partie en go, c'était directement parfait. Le gros intérêt est de pouvoir personnaliser la demande au fur et à mesure, vu qu'elle enregistre tout  (?) ce que tu demandes... "ajoute un endpoint sur /caca" et paf, pas besoin de reprendre toute l'explication précédente... (vous noterez que je demande "please" quand même, on sait jamais si c'est une personne enfermée dans un corps de robot qui me répond)

----------


## William Vaurien

Je suis content d'être dev multiclassé fonctionnaire... j'ai aussi l'impression que ça va aller assez vite vers une réduction du nombre de dev pour ne garder que des petites équipes capable de faire l'analyse des besoins et de les "donner au robot" avant de scotcher les bouts de code ensemble, et avec des micro-services il n'y aura plus vraiment besoin de scotch.

Et là, ce chatGPT, c'est une demo d'un bot orienté 'discussion', pas un spécialiste du dev. 

J'imagine bien le même genre d'IA mais spécialisé en dev directement dans l'IDE: du coup il connait ton projet (des bases de données aux API) et tu peux lui demander des trucs. "Ajoute moi une authentification Oauth", "Fais moi un point d'accès pour telles données en lecture avec filtre et tri"... La revue de code se fera en live à chaque itération et on ne codera plus vraiment, si ce n'est en donnant des instructions au bot. Pour aller avec il y aura un bot spécialisé en CI qui créera tout seul des pipelines avec toutes les étapes du wokflow, avec revue de code pré-machée, et  livraison d'une archive-image auto-déployable sur toutes les cibles possibles...
Il y aura besoin de quelques interventions humaines pour corriger quelques trucs, mais la production de code sera automatisée à 90%. Le bot sera vraisemblablement capable de faire de la retro ingénierie et à même de migrer un projet dans une version plus récente du langage, voir un autre langage, d'écrire les tests et la doc à la fois technique et utilisateur.

Finalement on retrouvera certains des problèmes lié à l'outsourcing: les devs seront là pour essayer de comprendre les besoins clients et de les formuler précisement pour que le bot le fasse correctement. Il n'y aura pas contre plus de temps de latence comme avant, ni de qualité aléatoire sur le code. Nous n'y sommes pas encore, mais c'est plus de l'anticipation que de la science fiction...

On peut imaginer aussi que le bot soit embarqué directement dans l'appli et soit capable de traiter certaines demandes directement (sorte de moteur de règle dynamique) et de générer dynamiquement du code pour des scénarios non prévu mais demandé par l'utilisateur (offrant une sorte de "WYSIWYG" pour l'utilisateur qui pourra se créer des vues sur mesure).

Autre cas d'utilisation peut être intéressant: utiliser le bot comme simulâcre d'utilisateur pour tester une appli (pentest/charge/fonctionnalités). 
Plus besoin de se faire suer avec des scénarios pénibles à écrire et maintenir...

Le dev tel que nous le connaissons aujourd'hui pourrait devenir rapidement obsolète, comme le sont devenues les cartes perforées à une certaine époque.

----------


## Teocali

> Et là, ce chatGPT, c'est une demo d'un bot orienté 'discussion', pas un spécialiste du dev.


Yep, mais il utilise les API de OpenAI. API qui donne accès a différent modèle de code.




> J'imagine bien le même genre d'IA mais spécialisé en dev directement dans l'IDE: du coup il connait ton projet (des bases de données aux API) et tu peux lui demander des trucs. "Ajoute moi une authentification Oauth", "Fais moi un point d'accès pour telles données en lecture avec filtre et tri"... La revue de code se fera en live à chaque itération et on ne codera plus vraiment, si ce n'est en donnant des instructions au bot. Pour aller avec il y aura un bot spécialisé en CI qui créera tout seul des pipelines avec toutes les étapes du wokflow, avec revue de code pré-machée, et  livraison d'une archive-image auto-déployable sur toutes les cibles possibles...


Pour moi on continuera a coder, mais de moins en moins. C'est un niveau d'abstraction supplémentaire, un peu comme les languages de haut niveau ont remplacé les languages bas niveau et l'assembleur, mais pas entierement.




> Il y aura besoin de quelques interventions humaines pour corriger quelques trucs, mais la production de code sera automatisée à 90%. Le bot sera vraisemblablement capable de faire de la retro ingénierie et à même de migrer un projet dans une version plus récente du langage, voir un autre langage, d'écrire les tests et la doc à la fois technique et utilisateur.
> 
> Finalement on retrouvera certains des problèmes lié à l'outsourcing: les devs seront là pour essayer de comprendre les besoins clients et de les formuler précisement pour que le bot le fasse correctement. Il n'y aura pas contre plus de temps de latence comme avant, ni de qualité aléatoire sur le code. Nous n'y sommes pas encore, mais c'est plus de l'anticipation que de la science fiction...


Voila




> Le dev tel que nous le connaissons aujourd'hui pourrait devenir rapidement obsolète, comme le sont devenues les cartes perforées à une certaine époque.


Voila (bis)

A noté que je considère que tout ça est fortement probable mais pas forcément inéluctable. ça va peut être rencontré un mur de brique, que ce soit technique, social ou économique.

----------


## Foksadure

> J'imagine bien le même genre d'IA mais spécialisé en dev directement dans l'IDE


Comme indiqué plus haut, c'est ce que fait déjà Copilot dans GitHub.

https://github.com/features/copilot
Cela dit, connaissant l'inertie de la fonction publique et la manière qu'on a d'y appliquer les technologies à la mode avec les pieds, ce genre d'innovation n'aura pas d'impact avant quelques dizaines d'années.  ::P:

----------


## William Vaurien

Je ne suis pas dans la fonction public à laquelle tu penses  ::ninja:: 
Après ce que tu dis n'es pas complétement faux là où je suis, et on prend vite le pli  ::siffle:: 

Mais je rajouterais que je suis témoin d'un projet uniquement géré et développé par des externes qui devaient rapidement ("tu comprends c'est des jeunes motivés") pondre un truc et qui, des millions plus tard (multiplication des effectifs par 4), sont complétement à la bourre sur le planning (mise en prod décalée de 6 mois tous les trimestres depuis 2 ans) et vont probablement se prendre un méga-mur dans la gueule. 
Pourtant ils utilisent toutes les technos à la mode du moment avec un management wanabe scrum... Par contre ils sont vachement balaise en com. Ils font même des teasers et s'auto-congratulent sur l'intranet... (et la version vieillissante de l'appli, dev par des fonctionnaires, marche toujours et avaient été développé pour beaucoup moins cher et par une équipe restreinte...)

C'est ça l'innovation McKinsey  ::P:  ?

Cela dit, c'est bien comment copilot ? Ca vaut le coup de mettre 10€ par mois ? Concrétement c'est utile pour faire quoi ? 
Est-ce qu'il comprend tout ton projet ou est juste capable de sortir un bout de code sans contexte en fonction de la doc donnée ? (l'exemple du test généré en Java IsPrimeTest fait un peu pitié...) 
(et je vois que l'intégration dans intellij n'a pas l'air sensationnel...)

----------


## gros_bidule

Je dis peut être une bêtise, mais ces IA, elles fonctionnent parce qu'elle piochent (puis malaxent) dans du code écrit par des gens qui ont déjà répondu au problème.
Si demain je veux m'interfacer avec une nouvelle API par ex, bah... il faudra attendre que des gens fassent le taff pour que des IA reprennent leur travail, non ? Et quid de la légalité du truc ? La collecte sauvage (si elle l'est) de code ne pourra durer éternellement.

Après, que l'IA puisse faire 90% du taff, ça ne me dérange pas plus que ça. Étant expert sur Spring Boot, ce dernier fait déjà 90% de mon taff afin de me laisser me concentrer sur le code métier, et cela ne m'empêche pas d'avoir une bonne situation, et l'avenir est radieux  :B): 

L'important c'est de comprendre ton outil. 
Tu ne vaux pas grand chose si tu fais du Spring sans le comprendre, et tu ne vaux pas grand chose non plus si tu ne comprends pas le code généré par IA, que ce soit ChatGPT ou Copilot. Je vois passer des cas où l'IA fait du code parfait, ou presque parfait : il est parfait parce que tu le comprends. Montre ton code Go parfait à un dev débutant, il ne va pas en faire grand chose. Du moins, il ne pourra pas prendre la décision de le passer en prod. Donc ton code parfait ne lui servira pas à grand chose. Et puis mince, l'important, le gros du taff, c'est le code métier, et ça les IA sont loin de pouvoir le faire. Les tests aussi sont importants. Si tu fais faire les tests par une IA, comment tu sais si les tests sont valides ? Tu dois avoir l'XP pour comprendre les tests. Juste pour rire, ça me fait penser aux frameworks qui testent les getters et les setters pour t'aider à atteindre 100% de couverture de code : ça sert à rien, mais bon, si on te le demande alors tu le fais et ton chef est content.
Bref, si tu as de l'XP, et si tu sais te servir de l'IA pour t'assister, alors tu n'as aucune raison d'être remplacé. Ton métier va juste évoluer, pour te soulager des trucs chiants.
Perso, j'adorerais qu'une IA écrive mes tests RobotFramework ou m'écrive la partie OAuth de mon appli  ::trollface:: 

Ce qui risque d'évoluer, c'est le parcours des jeunes devs : vont-ils faire moins de code par eux-même pour finalement analyser davantage de code généré par IA ? Comment vont-ils acquérir des compétences ? La triche durant les études (TP réalisé par IA ^^...) ? Aucune idée, et je trouve le sujet hyper intéressant. 
Se pose aussi les questions juridique et de la sécu. Juridique : Copilot, ça passe difficilement en entreprise. Juridique : ChatGPT ne pourra pas indéfiniment piller le travail des autres. Si ça devient un projet commercial, il va se faire atomiser.

----------


## William Vaurien

De la même manière que les bots de génération d'image font des vagues dans les communautés d'artistes.

GitHub Copilot under fire as dev claims it emits ‘large chunks of my copyrighted code’
https://devclass.com/2022/10/17/gith...yrighted-code/

----------


## Foksadure

> Je ne suis pas dans la fonction public à laquelle tu penses


Quand bien même ce ne serait pas la même, ta description de la gestion de projet moderne vs classique (ou héritée) ressemble fortement à ce que je connais de la mienne.  ::P:

----------


## vectra

> :
> 
> Ce qui risque d'évoluer, c'est le parcours des jeunes devs : vont-ils faire moins de code par eux-même pour finalement analyser davantage de code généré par IA ? Comment vont-ils acquérir des compétences ? La triche durant les études (TP réalisé par IA ^^...) ?


C'est un peu ce que je répète en boucle depuis quelques jours: l'IA va être super-forte pour exécuter des tâches faciles. Elle va faire office d'annales que les étudiants utilisaient déjà pour ne pas se fader les projets ou les révisions d'exams. Impossible de faire comprendre à ces gens que l'exercice n'a aucun intérêt en soi, n'impressionne aucun employeur et n'a pour autre but que d'exercer et de faire gagner en level l'étudiant ou l'ingé débutant.

Ils ne se rendent même pas compte qu'ils sont remplacés par une IA plus douée, c'est dire.

Y'a pas 10 jours, je lisais un article qui racontait qu'un étudiant d'une fac US se vantait de rédiger ses essais (des mini-mémoires) avec ChatGPT. 
Qui faisait d'ailleurs du super-boulot, en automatisant l'étudiant con (d'autant plus con qu'il s'endette sur la durée pour que la fac prescrive des exercices qu'il ne fait pas).

----------


## Orhin

> Je pense que c'est ce qu'on aura, oui, et que ce métier remplacera le taf de "programmeur", dans le sens ou on ne sortira peu, voir plus de ligne de code, par rapport a ce qu'on code maintenant. Et qui sait ensuite avec les progrès de l'IA si ce même métier ne disparaitra pas finalement assez vite ?


La compréhension du besoin de client, c'est quand même beaucoup d'échanges et d'aller retour avec lui (avec des phases de protos/tests/maquettes/etc), pas sur qu'une IA pourrait intervenir correctement là dessus.
Par contre ça peut en effet à moyen terme considérablement accélérer les tâches "techniques".




> Actuellement ? Non, clairement pas. Mais dans 5-10 ans ?


En fait actuellement ce ne serait pas forcément impossible, mais ça nécessite que toutes les nouvelles API/fonctionnalités soient documentés d'une certaines façon compréhensibles par les IA et intégrable dans leur entrainement.




> Comme dit, y'a eu des trucs qui sont sorti en ingenierie ou l'IA te sortait des pièces plus performantes et efficaces que ce qu'une armée d'ingé n'aurait jamais pu te sortir. Très clairement, ce sont des pièces impossible a produire à la main, et qui pour bcp, font usage de l'impression 3D, mais c'et assez impressionnant. Les ingenieurs en question n'aurait sans doute jamais imaginé que ce soit possible y'a 5-10 ans.


Ben pour les pièces "physiques" c'est différent, le résultat était certes très impressionnant mais au final ça n'utilisait rien de "nouveau" (les matériaux et techniques de fabrications étaient déjà disponibles).

----------


## Teocali

> Ben pour les pièces "physiques" c'est différent, le résultat était certes très impressionnant mais au final ça n'utilisait rien de "nouveau" (les matériaux et techniques de fabrications étaient déjà disponibles).


Ben, en quoi ça serait différent d’une IA qui te sortirait une solution à laquelle tu n’as pas pensé mais qui utilise le langage et les outils que tu as demandé.

----------


## Orhin

> Ben, en quoi ça serait différent d’une IA qui te sortirait une solution à laquelle tu n’as pas pensé mais qui utilise le langage et les outils que tu as demandé.


Je parlais justement d'utiliser d'autres outils que ceux utilisés habituellement (nouvelle API par exemple).  :;):

----------


## Teocali

> Je parlais justement d'utiliser d'autres outils que ceux utilisés habituellement (nouvelle API par exemple).


Good point.

Après, je me dis que si tu lui donnes à manger la documentation et les différents tutoriaux de l'API en question, y'a moyen que ça moyenne.

----------


## Dross

Surtout que c'est de notoriété publique que les petites API exotiques sont documentées avec moult détails, soin et qualité.  ::ninja:: 

Personnellement je pense que ce genre d'utilisation de l'IA modifiera notre manière de rechercher de l'information plutôt que de changer notre travail (avec possibilité d'intégration en autocomplete dans certains cas, certes). 

Les patterns de projets déjà prêt, ça existe déjà : GitHub regorge de patrons déjà cuits pour bootstrapper un projet avec intégration de 2-3 techno + CICD + patron de soumission des bugs + café. Pas besoin d'un truc mal cuit pompé maladroitement par une IA. (d'ailleurs c'est probablement ces même ressources qui sont la source de ces résultats impressionnants) 

Par contre, que cette IA aille me pointer vers une ressource de ce type quand je lui demande, voir même une combinaisons de ressources, ça, ça a déjà plus de gueule et c'est surtout les moteurs de recherche qui deviendrons has been.

----------


## Nilsou

> Personnellement je pense que ce genre d'utilisation de l'IA modifiera notre manière de rechercher de l'information plutôt que de changer notre travail (avec possibilité d'intégration en autocomplete dans certains cas, certes).


C'est ce que disait aussi les traducteurs et les graphistes  ::ninja::  

Plus sérieusement, c'est tout une gamme de petit projets qui vont sauter car faisable juste en donnant les specs à une IA et en faisant relire le code vite fait par un senior, de mon point de vue.

Et pour les API moderne, l'IA sera vite plus à jour que le programmeur, elle dort pas, elle.  ::P: 




> Par contre, que cette IA aille me pointer vers une ressource de ce type quand je lui demande, voir même une combinaisons de ressources, ça, ça a déjà plus de gueule et c'est surtout les moteurs de recherche qui deviendrons has been.


Ce sont déjà ces même moteur de recherche qui sont les premiers à intégrer ce type de tech.

- - - Mise à jour - - -




> Je dis peut être une bêtise, mais ces IA, elles fonctionnent parce qu'elle piochent (puis malaxent) dans du code écrit par des gens qui ont déjà répondu au problème.
> Si demain je veux m'interfacer avec une nouvelle API par ex, bah... il faudra attendre que des gens fassent le taff pour que des IA reprennent leur travail, non ? Et quid de la légalité du truc ? La collecte sauvage (si elle l'est) de code ne pourra durer éternellement.
> 
> Après, que l'IA puisse faire 90% du taff, ça ne me dérange pas plus que ça. Étant expert sur Spring Boot, ce dernier fait déjà 90% de mon taff afin de me laisser me concentrer sur le code métier, et cela ne m'empêche pas d'avoir une bonne situation, et l'avenir est radieux


Bien sur, mais par rapport à un monde ou Spring Boot n'existe pas, automatiquement, le nombre de personne bossant sur un projet à diminué pour le même taf, c'est automatique. Si tu fais plus avec moins, pourquoi embaucher plus pour ce projet ? 
C'est ça que change un nouvel outil performant, il faut en avoir conscience.

C'est pas forcément un problème, mais les gens qui disent que ça ne va pas changer la gueule de leur métier sont complétement dans l'erreur à mon sens.
Quand je vois comment les IDE bien foutu ont déjà pas mal changé la gueule du métier ... je vous laisse imaginer si il suffit d'écrire la demande dans l'IDE, ou mieux, de le dire à l'oral, pour que ça ponde juste un bout de code à relire, c'est plus du tout, mais alors vraiment plus du tout le même métier. (sans compter qu'on pourra appliquer l'IA au debuggage et avoir une seconde IA qui passe par dessus pour dénoncer les mauvaises pratiques de la première, simplifiant aisément la relecture).

----------


## gros_bidule

> Ce sont déjà ces même moteur de recherche qui sont les premiers à intégrer ce type de tech.


J'espère pour eux  :^_^: . Dans un autre registre, quand je compare DeepL et GoogleTrad, bah j'ai complètement laissé tomber le second (ça doit faire 2 ans déjà... grosso modo), en faveur du premier, tant les résultats sont meilleurs. GoogleTrad s'est peut être amélioré depuis, mais pourquoi revenir vers lui ?
Bon après il y a les performances, et la notoriété. J'imagine que GoogeTrad reste bien plus populaire que DeepL, juste parce que Google, sa force de frappe, ses abus de positions dominantes...

----------


## Nilsou

C'est un peu un statut temporaire, ce genre de petite société finissent très souvent par être racheté, tu verra que dans peu de temps DeepL sera racheté par google ou meta, c'est juste une question de tune. Et la tune, c'est eux. 

Oui le monde c'est de la merde. Mais je veux bien parier un billet sur le fait que c'est ce qui se passera  ::P:

----------


## gros_bidule

> C'est pas forcément un problème, mais les gens qui disent que ça ne va pas changer la gueule de leur métier sont complétement dans l'erreur à mon sens.
> Quand je vois comment les IDE bien foutu ont déjà pas mal changé la gueule du métier ... je vous laisse imaginer si il suffit d'écrire la demande dans l'IDE, ou mieux, de le dire à l'oral, pour que ça ponde juste un bout de code à relire, c'est plus du tout, mais alors vraiment plus du tout le même métier. (sans compter qu'on pourra appliquer l'IA au debuggage et avoir une seconde IA qui passe par dessus pour dénoncer les mauvaises pratiques de la première, simplifiant aisément la relecture).


Pour avoir vu passer nombre d'outils basés sur des IA dans IntelliJ (via des plugins), ce sont tous des échecs. Peut être que cette fois ci on y est, on passe un gap, ça va changer. Mais hum, perso j'attends de voir ce que ça donnera pour de vrai. Ce n'est pas la première fois qu'on nous annonce soit la mort du métier de dev, soit une mutation. Pourtant, il n'a toujours pas changé.
Les devs freelance sous-payés qui pondent des petits sites PHP ou des intégrations prestashop, ok, peut-être auront-ils du soucis à se faire. Mais même ça c'est pas sûr. J'attends de voir la qualité concrète de l'intégration de ces IA.

----------


## William Vaurien

Il y aura probablement un frein au moment de la monétisation aussi. Quand chaque requête coûtera un peu de thune et qu'il en faut un gros paquet pour faire avancer un petit projet...
Pour le moment je vois que chatGPT a du mal avec la volumétrie :si tu lui files un service Spring un peu gros il n'arrive pas à l'analyser. Donc ça marche en compagnon pour faire des squelettes de méthodes, mais ça n'a pas l'air prêt pour faire des applications complètes par Roger de la compta...
Mais à force de petits pas dans cette direction on va bien y arriver un jour...

Quelqu'un à un retour sur l'IA GitHub de Microsoft ? Je serais curieux d'en savoir plus.

----------


## Kamikaze

Ce n'est pas nouveau mais il y a l'air d'avoir un biais très fort lorsqu'on parle de quelque chose mal défini, qui pousse à une extrapolation exagérée. Ca ressemble aux discussions autour de la physique quantique vulgarisée, qui dans le cas le plus sombre donne lieu aux arnaques comme les gadgets de médecine quantique.

Il semble important d'établir clairement qu'actuellement niveau résultats concrets c'est 0, indéniablement. Teocali soumettait l'exemple de Github copilot qui est vraiment l'exemple parfait d'outil aux promesses vagues et d'ores et déjà un échec total en termes de résultats concrets.

Pour commencer on peut mettre en avant l'adoption extrêmement faible de l'outil. Malheureusement aussi faible qu'elle soit cette adoption demeure néanmoins un fait, et c'est surtout un constat triste de médiocrité (quant à la programmation) de certains utilisateurs. Github copilot c'est du code boilerplate de mauvaise qualité inutile, c'est un gadget dont on se lasse vite, mais on oublie de résilier l'abonnement. Si on s'intéresse ensuite aux exemples concrets de ce qui est produit par Github copilot, c'est tout simplement mauvais, sortez moi un seul exemple qui vous parait viable et je suis sûr que y'aura 10 pages de critique à écrire, je me porte volontaire, j'passe déjà une partie de mes journées à faire des code review lol.

Si on reprend les exemples des canards, on a vraiment parfois des discours qui sont en plein dans les mauvaises pratiques de développement. Des discours qui vous ferait échouer en entretien pour une entreprise sérieuse travaillant avec du software.

Teocali faisait de la génération de code via l'IA, alors que depuis facilement 20 ans y'a déjà des outils de génération de code qui produisent un code de meilleur qualité avec moins d'input. Donc on est sur un échec absolument total:
1) Quantité d'input nécessaire et formalité de l'input pour générer le code, mauvais
2) Reproductibilité et exactitude, documentation, mauvais avec l'IA, genre chacun va utiliser une prompt à sa sauce? C'est quoi le formalisme "Wesh l'IA, du me fait un DAO steup?", ça donne le même résultat ou pas?
3) En terme de culture informatique ça signal vraiment un problème d'attaquer ça avec le mauvais outil, faire du boilerplate est systématiquement une mauvaise pratique, généralement y'a bien évidemment un outil pour résoudre un problème couramment recontré, c'est la première chose à vérifier, le premier effort de recherche à faire. Et si l'outil n'existe pas car vous êtes sur un truc avant garde (très rare) il faut bien évidemment considérer faire l'outil vous même.
4) Capacité d'évaluation du code généré, en terme de performance, de lisibilité du code? C'est 0. Aussi où sont les spécifications en terme de contraintes de perfs, etc. en premier lieu?
5) Code formatting, conventions de nommage, maintenance du code, gestion des dépendances, convention de répartition en plusieurs fichier ou un seul/organisation du projet, possibilité de refactoring, etc. c'est 0?

On est plus ou moins au même niveau, voire pire, qu'une recherche google suivi d'un copier/coller d'une réponse stackoverflow. Et encore, la majorité du temps la réponse stackoverflow aurait pointé vers le framework de génération de code approprié. Le boilerplate c'est plus pour les questions de grands débutants qui cherche à découvrir le langage via des exemples.

Donc c'est comme le comic strip qui avait été posté plus haut grosso modo. C'est pas cette """IA""", encore une fois même pas définie en premier lieu, qui va venir combler les trous d'un désir mal formulé. On est sur La Patte de singe (Monkey Paw) là.

C'est aussi fou d'oublier que "le code" c'est une combinaison de multiples domaines. Bizarrement vous vous concentrez énormément sur de l'applicatif soit disant rébarbatif, toujours des exemples très vagues. Vous reconnaissez les limitations de l'IA à cette forte contrainte ("applicatif facile")? Ou c'est juste un exemple parmi d'autre?

Puis Dross c'est dommage que dans le même post, d'une part tu fais une critique intelligente "Les patterns de projets déjà prêt, ça existe déjà", mais ensuite tu proposes à l'IA de s'occuper de "me pointer vers une ressource", alors que le delta avec des outils existants est extrêmement mineur. On comprend pas la valeur ajoutée. Si on sous entend que l'IA va combler la documentation d'un projet mal documenté, bah s'pas une solution car il faudrait simplement que le projet soit mieux documenté en premier lieu sinon ça pose énormément de question quant à la qualité du code et du projet. Et si tu sous entend que ça va pointer vers de bonnes ressources, bah tout bon projet qui se respecte, met ça en première page et suffit d'un moteur de recherche/d'un algo de page ranking.

Donc les mecs qui programment des appareils médicaux, genre des scanners MRI, on les remplace avec une IA qui magiquement va connaître ce domaine médical? Les programmeurs réseaux, l'IA elle va connaître les protocoles réseaux? Je veux faire un moteur 2D basique, l'IA elle connaît Newton aussi (bon ça serait pas bien dur)? Elle va me faire mes sprites et mes textures pour mes jeux aussi. Puis elle va apprendre à contrôler des servos moteurs, elle va apprendre à faire un pricing engine pour du trading haute fréquence. Elle va nous faire du repliement de molécule, EDA (electronic design automation), de la musique, elle va tout faire quoi. Au delà du code, elle va littéralement tout faire. Pourquoi ne pas enlever la partie prompt du coup? Elle est vachement balaise votre IA, je suis pas sûr qu'elle ait besoin d'un pingouin pour lui dicter des prompts digne d'un collégien.

S'comme depuis la nuit des temps, y'aura bien sûr des applications "AI" pour des domaines donné, y'aura des spécialisations. Mais ce délire d'AI généralisé, qui fonctionne via du texte pour faire du code... et cette hype exagérée (qui aide bien à lever des fonds, #Elizabeth Holmes, #Juicero, #FTX)

Déjà c'est même pas l'outil approprié en premier lieu, c'est un délire, tu vas pas décrire un design tel qu'un site Web ou un Shader, ou autre, avec du putain de texte, il faut un outil graphique bien évidemment. Ce qui existe déjà bien sûr, pour chaque domaine, Unreal Engine, produits Adobe, SnapEDA, Ableton, Sketchfab, Blender et j'en passe, à chaque domaine son outil.

Le pire c'est que même si on reste dans votre cadre hypothétique de soit disant: code rébarbatif pour de l'applicatif fait par des sous traitant qui "pissent du code". Ca marche même pas.
Aussi mauvais que sont effectivement certains projets genre pour téléphone etc. Dans vos prompts, il manque 99% du contenu quoi, contrainte de taille, contrainte de perf, traductions, cross plateforme, projet maintenable à plusieurs, forme de délivrable, déploiement, assets graphiques, gestion des dépendances, licences, gestion des coûts, ...

Bref, au final je pense que ça serait beaucoup plus productif de rester sur des *exemples concrets* de ce qui est produit par les *outils actuels*, et d'en faire la critique.
On n'a toujours pas vu 2 lignes de code avec une quelconque valeur ajoutée quoi. Tout ce qu'on voit c'est du gadget.

Ca me rappelle des entretiens récemment où les candidats utilisent énormément de termes très en vogue, mais une fois que je leur demande de produire quelque chose de concret ça s'écroule. Y'a une médiocrité masquée par un vernis de connaissance c'est malsain, pour la personne concernée avant tout, ça crée un stress permanent.

----------


## Nilsou

> Pour avoir vu passer nombre d'outils basés sur des IA dans IntelliJ (via des plugins), ce sont tous des échecs. Peut être que cette fois ci on y est, on passe un gap, ça va changer. Mais hum, perso j'attends de voir ce que ça donnera pour de vrai. Ce n'est pas la première fois qu'on nous annonce soit la mort du métier de dev, soit une mutation. Pourtant, il n'a toujours pas changé.


Heuuu ... entre le dev sous Clion avec de l'auto-complétion intelligente à tout va, de la détection de variable et cie, et du vieux devs sous éditeurs de texte + vieux gcc d'il y a 15 ans, on est vraiment plus sur la même chose, déjà.
Que JetBrains tente des trucs de son coté et que ça foire, c'est une chose, mais ce ne sont pas des spécialistes. Face à OpenAi c'est juste pas la même catégorie. 




> Les devs freelance sous-payés qui pondent des petits sites PHP ou des intégrations prestashop, ok, peut-être auront-ils du soucis à se faire. Mais même ça c'est pas sûr. J'attends de voir la qualité concrète de l'intégration de ces IA.


Ce qui doit constituer le plus gros du métier hein  ::P:  . Le métier de devs en France c'est une armée de stagiaire, de freelance, de petites mains, et des devs plus ou moins confirmé/senior qui taf sur des gros projets.
Donc c'est le plus gros du métier qui change de tête en définitive ...

C'est comme quand un mec qui vends des tableaux d'artistes me dit que les générateurs d'image ça va rien changer aux gens qui font du dessin. Sauf que les gens qui font du dessin, c'est avant tout une masse anonyme de mec qui pondent des logos pour des entreprises pour trois francs six sous, font des illustrations pour des jeux, font un peu d'animation par ci par là pour tel ou tel projet. Et c'est eux qui ont du soucis à se faire : quand au lieu de payer 500€ pour ton logo d'entreprise tu pourra payer 2€ auprès d'une usine à requête d'IA, personne reviendra vers l'humain qui faisait le taf à la main.
Alors ouais, du coup tu aura des mecs dont le taf ce sera de formuler les requêtes clients aux algos d'IA, de les mettre en forme, de faire de la veille sur les algos existants, de retoucher un peu le produit fini. Mais ils feront 27 fois plus de taf qu'aujourd'hui (pour des tarifs bien moins chers) et c'est un tout autre boulot.

Je vois se profiler la même chose dans le code. Tu aura un traducteur qui interprétera la requête client, se dira que finalement pour aboutir faudra mettre ça + ça + ça en brique logiciels, puis qui au lieu de coder lui même pendant deux semaines le bouzin, ou faire appels à X stagiaires ou petites mains, il filera le taf à une IA qui lui pondra le truc en 5 minutes puis filera le taf à debugger à une autre IA et enfin viendra regarder le résultat final en relecture et en test unitaire. Ce qui ne sera pas du tout le même métier.

----------


## Nilsou

> Il semble important d'établir clairement qu'actuellement niveau résultats concret c'est 0, indéniablement. Teocali soumettait l'exemple de Github copilot qui est vraiment l'exemple parfait d'outil aux promesses vagues et d'ores et déjà un échec total en termes de résultats concret.


Qu'est ce qu'il ne faut pas lire. Niveau résultat concret, la moitié des algos de recherche tourne avec différents algos d'IA au dessus aujourd'hui, sans parler de la recherche par image. Les algos d'IA sont en train d'apparaitre dans la moitié des outils de traitement d'image standard (genre photoshop qui en intègre plein en sous main) et ça fait aujourd'hui parti du métier. La génération automatique d'image est en train de tuer les petites mains du graphisme à échelle grand V (et je le dis en connaissance de cause, ma sœur est une de ces petites mains du graphismes, son nombre de contrat s’écroule depuis la disponibilité des algos qui ponde des images sur demande : pourquoi recruter un illustrateur pour un logo d'entreprise ou un jeu de carte alors qu'on peut obtenir un résultat acceptable presque gratos... surtout quand on est une petite entreprise). Idem dans le domaine du son où ça bouge énormément.

Au niveau de la traduction c'est en train de tout tuer, littéralement, les traducteurs n'étant plus que des relecteurs assistés. 

Et tout ça, c'est une gamme d'algo précise qui est exactement la même que ce qu'est en train d'appliquer OpenAI sur le code. Parier sur le fait que ça ne va rien changer à rien c'est quand même spécial ... 





> Donc les mecs qui programment des appareils médicaux, genre des scanners MRI, on les remplace avec une IA qui magiquement va connaître ce domaine médical?


C'est plutôt en train ouais, et je peux là aussi te le dire en connaissance de cause puisqu'on bosse dans ce domaine avec monn labo. Des IAs qui viennent remplacer la plupart des taches des ingés médicaux peu à peu.



> Les programmeurs réseaux, l'IA elle va connaître les protocoles réseaux? Je veux faire un moteur 2D basique, l'IA elle connaît Newton aussi (bon ça serait pas bien dur)?


Une IA qui fait de la génération de code va évidemment apprendre sur des protocoles réseaux, c'est l'enfance de l'art, rien de plus simple, idem pour newton. 



> Puis elle va apprendre à contrôler des servos moteurs,


Ouais on fait totalement ça aussi, c'est le domaine le plus fonctionnel en robotique actuellement et c'est ma spécialité à vrai dire, haha. 
On déploie actuellement des apprentissage automatisé sur le contrôle moteur dans plusieurs boites françaises. Bien plus efficace que les asservissements précédents. Déso. 




> elle va apprendre à faire un pricing engine pour du trading haute fréquence.


Ben ... c'est l'une des premières applications ... c'est peut être le domaine ou l'IA est le plus employé actuellement... 




> Elle va nous faire du repliement de molécule [...]


Tu fait exprès du coup de citer tout les domaines où elle réussit bien mieux que les résultats antérieur ?  ::unsure::  




> Déjà c'est même pas l'outil approprié en premier lieu, c'est un délire, tu vas pas décrire un design tel qu'un site Web ou un Shader, ou autre, avec du putain de texte, il faut un outil graphique bien évidemment. Ce qui existe déjà bien sûr, pour chaque domaine, Unreal Engine, produits Adobe, SnapEDA, Ableton, Sketchfab, Blender et j'en passe, à chaque domaine son outil.


Je vois pas trop le problème, à partir du moment ou tu peux faire des IAs qui genere des tableaux d'artiste acceptable, je vois pas bien le problème à avoir un design de site web acceptable (problème bien plus rationnel et disposant d'une base énorme).

Enfin, j'entends ta défiance global sur l'IA, mais il faut vraiment mettre d'un coté la com qu'on a depuis 15 ans sur « l'IA », la « DATA » et cie. qui frise le ridicule, et les résultats concrets et explosifs qu'on a depuis quelques années à peine et qui changent la face de bien des métiers. Ce sont deux choses qui n'ont rien à voir.

En plus honnêtement, c'est bien à contre-coeur que je dis tout ça, j'aime pas l'IA générative, je trouve que c'est bourrin, inélégant, et que ça bouffe mes crédits pour faire de l'IA intéressante ailleurs  ::P:  . J'aime pas ces pseudo-matheux avec leurs bibliothèque python qui ont jamais pris un cours de neuroscience et disent qu'ils font de l'IA en faisant de vague lien entrée-sortie même pas rebouclant ou n'ayant aucune action sur le monde extérieur ou simulé. 
Tout ça me sort par les trous de nez.  ::(: 
Surtout que je reste convaincu que pour un pouilleme de la puissance de calcul on pourrait avoir des choses bien plus intéressante via des approches plus malignes. 

Mais voila, on leur a donné masse de thune, notamment via GAFAM + Musk (OpenAI) et ils sont en train de réussir à pousser la discipline dans ses retranchements à coup de milliards, même si leurs outils équivalent à raser une foret pour trouver un chemin au milieu. Et dores et déjà ce qu'ils ont sortis a fait exploser tout les résultats antérieurs ... et donnent des trucs assez foufou ... 
Il faut admettre l'évidence au bout d'un moment, même quand on est un vieux ***  ::ninja::

----------


## Awake

Kamikaze, tu as l'air de dire que l'IA n'est pas assez rigoureuse pour pondre du code de qualité. En l'état c'est peut-être le cas, mais on a vu avec les différentes IA de deepmind sur le go ou les échecs que c'est possibles de faire des réseaux de neurones qui sont non seulement capables de s'adapter, mais qui ne font aussi pas d'erreurs dans des situation à contraintes extrêmes. Certes, ce sont des environnements plus simples que d'ecrire du code, mais c'est possible.

----------


## Nilsou

Franchement la complexité ici ce n'est même pas de générer du code de qualité. C'est plutôt de générer le lien entre compréhension grammaticale (apprise par ailleurs) et génération de code.
Le fait de générer du code qui fonctionne, c'est presque un faux problème. C'est l'identification des liens et conséquence dans la grammaire verbale le soucis. Et c'est là dessus qu'ils sont devenus super super fort, d'abord avec les chatbot, puis petit à petit avec la génération d'histoire, et enfin ils ont coupé leur truc en deux pour employer la compréhension grammaticale apprise pour générer des images, et maintenant qu'ils ont bien fortifié cette première partie ils changent la sortie et mettent du code, mais c'est presque un faux problème en fait. 

C'est la première partie qui est un exploit technique, la seconde c'est juste une extension sur le même outil en changeant la sortie. Ce qui relativement « facile » en IA. L'apprentissage et la construction de la base d'apprentissage est presque plus galère que l'algo dans ce cadre.

Je dirais même que c'est plus facile que pour le reste de ce qu'ils ont fait car le compilateur donne déjà un premier retour de si la chose est complétement foireuse ou non (ce qu'on a plus difficilement pour un dessin ou un texte en français, il faut forcément faire intervenir des humains), ce qui permets de fortifier l'apprentissage de l'IA. À mon avis en interne elle doit générer plusieurs variantes et tu as une autre IA critiques qui passe par dessus pour virer ce qui est non pertinent, puis le compilateur qui vient checker les derniers codes générés (du moins c'est comme ça que je ferais à leur place) et les erreurs viennent nourrir la chose, qui en fait moins la fois d'après etc.

----------


## gros_bidule

> Heuuu ... entre le dev sous Clion avec de l'auto-complétion intelligente à tout va, de la détection de variable et cie, et du vieux devs sous éditeurs de texte + vieux gcc d'il y a 15 ans, on est vraiment plus sur la même chose, déjà.
> Que JetBrains tente des trucs de son coté et que ça foire, c'est une chose, mais ce ne sont pas des spécialistes. Face à OpenAi c'est juste pas la même catégorie.


Je n'ai pas été assez clair, désolé ^^. Je parlais des plugins tiers, et non des fonctions développées par JetBrains. On n'a pas attendu les GPT etc pour se faire assister par des IA, et pour l'instant rien n'a percé, rien, nada, la tête à toto.
Peut être que les nouvelles générations d'IA vont enfin servir à quelque chose, je le souhaite sincèrement. Mais on nous l'a promis tant de fois que, une fois de plus, bah je préfère voir si ça prend avant de m'emballer.

----------


## Teocali

> Je n'ai pas été assez clair, désolé ^^. Je parlais des plugins tiers, et non des fonctions développées par JetBrains. On n'a pas attendu les GPT etc pour se faire assister par des IA, et pour l'instant rien n'a percé, rien, nada, la tête à toto.
> Peut être que les nouvelles générations d'IA vont enfin servir à quelque chose, je le souhaite sincèrement. Mais on nous l'a promis tant de fois que, une fois de plus, bah je préfère voir si ça prend avant de m'emballer.


Y’a un plugin Copilot pour Idea. Copilot qui utilise OpenAI au passage. Je le teste demain et je vous fais un retour.

----------


## gros_bidule

> Ce qui doit constituer le plus gros du métier hein  . Le métier de devs en France c'est une armée de stagiaire, de freelance, de petites mains, et des devs plus ou moins confirmé/senior qui taf sur des gros projets.
> Donc c'est le plus gros du métier qui change de tête en définitive ...


Je serais moins affirmatif. On a tous notre expérience et notre vision de ce qu'est le dev actuellement. Il est tentant de considérer les projets que l'on voit de près ou de loin comme des trucs bateau, mais mêmes ces trucs là sont hors de portée des IA. Je pense aux projets étatiques gérés par les ESN par ex. Je ne suis pas sûr que le freelance PHP constructeur de boutiques en ligne pour petit artisan soit majoritaire, du moins en France. Les ESN sont là, et peu importe le bien ou le mal qu'on en pense, ils font des trucs un minimum évolués.

- - - Updated - - -




> Y’a un plugin Copilot pour Idea. Copilot qui utilise OpenAI au passage. Je le teste demain et je vous fais un retour.


Copilot ne sert à rien en entreprise si ton proxy corpo le bloque, ou si les politiques de sécurité interdisent purement et simplement ce genre d'outil  :^_^: .
C'est ballot, je sais bien... Mais sur des projets perso, ouaip, c'est parfois cool.

----------


## vectra

> Heuuu ... entre le dev sous Clion avec de l'auto-complétion intelligente à tout va, de la détection de variable et cie, et du vieux devs sous éditeurs de texte + vieux gcc d'il y a 15 ans, on est vraiment plus sur la même chose, déjà.
> Que JetBrains tente des trucs de son coté et que ça foire, c'est une chose, mais ce ne sont pas des spécialistes. Face à OpenAi c'est juste pas la même catégorie.


C'est de l'analyse syntaxique pure et dure, pas de l'intelligence.
Et tous les IDE le font, même si Jetbrains mieux que beaucoup.

----------


## Tramb

How do I compute a sha1 with linux C code ?
>dépendance sur OpenSSL

puis
Without openSSL
>If you want to compute a SHA1 hash without using the openssl library, you can use the sha1 function from the <stdlib.h> library.

puis
There's no sha1 function in stdlib.h
> You are correct, there is no sha1 function in the <stdlib.h> library. il reboucle sur OpenSSL

Même pas foutu de proposer la solution correcte de la socket AF_ALG du kernel.

Bref, chaque fois que j'essaie un exemple, ça sort n'importe quoi, les exemples abondent sur ce thread d'ailleurs, et sans forcer, hein.
Si je lui dis Use ALF_ALG il va écrire le truc. Mais j'ai gagné quoi ? Du code de snippet sans checks de valeur de retour, que j'ai dû lui indiquer, de la merde en barre, quoi.

Franchement le jour où elle devient trop forte, tout le monde va arrêter de contribuer à l'open source et au code "data-minable", les licences vont se durcir, et cette approche de LLM sur un gros corpus de code sera morte.

Par contre je suis d'accord que les décideurs n'en auront probablement rien à foutre et que le niveau de dev va encore s'appauvrir, la sécurité va en pâtir (parce que par contre il y a des choses à faire en fuzzing avec le ML :D) et les pros continueront à bien vivre.
En tout cas je préfère stack overflow.

----------


## Orhin

> Bien sur, mais par rapport à un monde ou Spring Boot n'existe pas, automatiquement, le nombre de personne bossant sur un projet à diminué pour le même taf, c'est automatique. Si tu fais plus avec moins, pourquoi embaucher plus pour ce projet ?


On embauche pas plus pour ce projet, par contre on embauche plus pour faire *beaucoup* plus de projets.
Et la marge bénéficiaire des projets a pas mal augmentée aussi.

Le monde du dev c'est un exemple typique d'effet rebond.




> Ce qui doit constituer le plus gros du métier hein . Le métier de devs en France c'est une armée de stagiaire, de freelance, de petites mains, et des devs plus ou moins confirmé/senior qui taf sur des gros projets.
> Donc c'est le plus gros du métier qui change de tête en définitive ...


Source ?
Car ça fait 2 fois que tu balances ça et ça rentre en contradiction avec l'expérience de pas mal de canards.
Les "petits" sites et applications, ça a déjà été pas mal bouffé par les solutions clés en mains dispos sur le marché.

Et puis faut voir comment on compte.
Le nombre de personnes ayant fait du dev professionnellement une fois ? (dans ce cas les juniors ont un impact bien trop important à cause du turnover)
La quantité d'année passées à dev ?
Le chiffre d'affaire généré ?




> Franchement la complexité ici ce n'est même pas de générer du code de qualité.


Certes mais on en est encore loin.




> C'est plutôt de générer le lien entre compréhension grammaticale (apprise par ailleurs) et génération de code.


Le problème c'est que la majorité des clients sont incapables d'exprimer leur besoin clairement.
Du coup ton IA peut comprendre le langage humain tant qu'il veut, si la personne en face ne sait pas ce qu'elle veut...

Ou alors faut une IA pour écrire les specs, désigner les maquettes et faire les tests UX, le tout avec de multiples itérations/échanges avec le client.

----------


## Teocali

> Copilot ne sert à rien en entreprise si ton proxy corpo le bloque, ou si les politiques de sécurité interdisent purement et simplement ce genre d'outil .
> C'est ballot, je sais bien... Mais sur des projets perso, ouaip, c'est parfois cool.


Ce qui est une contrainte completement différente des capacités de l'IA, sujet de la conversation, si j'ai bien tout compris  ::P:

----------


## Dross

> C'est pas forcément un problème, mais les gens qui disent que ça ne va pas changer la gueule de leur métier sont complétement dans l'erreur à mon sens.


Je pense surtout que tu te goure dans la vision de notre métier. Contrairement à ce qu'on imagine, le métier d'un développeur ce n'est pas d'écrire du code, c'est de comprendre un besoin humain peu voir mal défini et le traduire dans un langage compréhensible par la machine. Et sachant que c'est la partie la plus dure du métier (un junior développant en général littéralement ce qu'il pense comprendre du besoin et finissant 98% du temps dans le mur à la fin) ça n'est pas prêt de changer. Et ton IA ne sera que plus littérale encore dans son application, donc pas vraiment de quoi avoir peur. 

Ecrire du code c'est facile, mais ça ne fait pas de toi un développeur. Tout comme savoir écrire du Français ne fait pas de toi un écrivain. C'est juste la maîtrise du support, pas l'essence du métier lui même.





> Puis Dross c'est dommage que dans le même post, d'une part tu fais une critique intelligente "Les patterns de projets déjà prêt, ça existe déjà", mais ensuite tu proposes à l'IA de s'occuper de "me pointer vers une ressource", alors que le delta avec des outils existants est extrêmement mineur. On comprend pas la valeur ajoutée. Si on sous entend que l'IA va combler la documentation d'un projet mal documenté, bah s'pas une solution car il faudrait simplement que le projet soit mieux documenté en premier lieu sinon ça pose énormément de question quant à la qualité du code et du projet. Et si tu sous entend que ça va pointer vers de bonnes ressources, bah tout bon projet qui se respecte, met ça en première page et suffit d'un moteur de recherche/d'un algo de page ranking.


C'est l'aspect "intelligence de communication" de l'IA que je trouve intéressante. Oui on peux arriver au même résultat avec 36 recherches et convergence avec réécriture de la même requête pour chacune des ressources (vu que le ranking se fera par ressource). Ou alors via l'IA et sa capacité d'intelligence du langage qui me permettrait d'avoir un échange avec de multiples réponses / corrections / ajout de détails et de subtilité ; pour que le résultat ne soit plus seulement dans les premiers résultats de la requête finale, mais lié aux différents aspects abordés durant l'échange avec l'IA. 

En gros, parler à la machine comme on parlerai à un humain pour lui faire passer les nuances et détails pour affiner une recherche, plutôt que de chercher à penser comme une machine en ordonnant et pondérant les différents termes pour arriver à nos fins.

Mais je suis biaisé, je bosse dans la recherche, et proposer des outils plus adaptés aux humains pour trouver des trucs qu'ils ne trouvent pas (ou très difficilement) actuellement avec les requêtes classique c'est littéralement mon métier depuis 10 ans (et spécialisé dans la recherche de pièces 3D). C'est forcément un des aspects de l'IA qui me fait lever un sourcil avec intérêt.



ps: vouloir développer un produit fini directement avec une IA, ça risque de ressembler un peu à ça :

----------


## Nilsou

> Je n'ai pas été assez clair, désolé ^^. Je parlais des plugins tiers, et non des fonctions développées par JetBrains. On n'a pas attendu les GPT etc pour se faire assister par des IA, et pour l'instant rien n'a percé, rien, nada, la tête à toto.
> Peut être que les nouvelles générations d'IA vont enfin servir à quelque chose, je le souhaite sincèrement. Mais on nous l'a promis tant de fois que, une fois de plus, bah je préfère voir si ça prend avant de m'emballer.


Pour l'instant aucune grosse boite ne s'y était collé justement. Sur le code.
Sur le reste ça a complétement percé un peu partout, voir mes multiples exemples.

- - - Mise à jour - - -




> Je pense surtout que tu te goure dans la vision de notre métier. Contrairement à ce qu'on imagine, le métier d'un développeur ce n'est pas d'écrire du code, c'est de comprendre un besoin humain peu voir mal défini et le traduire dans un langage compréhensible par la machine. Et sachant que c'est la partie la plus dure du métier (un junior développant en général littéralement ce qu'il pense comprendre du besoin et finissant 98% du temps dans le mur à la fin) ça n'est pas prêt de changer. Et ton IA ne sera que plus littérale encore dans son application, donc pas vraiment de quoi avoir peur. 
> 
> Ecrire du code c'est facile, mais ça ne fait pas de toi un développeur. Tout comme savoir écrire du Français ne fait pas de toi un écrivain. C'est juste la maîtrise du support, pas l'essence du métier lui même.


T'a tout dis, mais cette opération de traduction vers le code, la seconde phase du métier, c'est justement là que ça va changer. Toi de ton coté il te restera à faire la mise en forme du besoin client puis tu balancera ça en quelques phrases à une IA qui te pondra des blocs de code.
Perso je trouve que ça change tout de même la phase du métier.

Idem pour l'écrivain. Entre l'écrivain qui faisait son manuscrit à la main, l'écrivain actuel qui dicte son manuscrit et le fait relire par un tier, et l'écrivain potentiellement futur qui dira :  "mettre là une description de la scène dans laquelle il se passera ça, à une IA qui aura un peu appris son style antérieur d'écriture. Oui, un point de vue est de dire qu'au fond, son travail le plus évolué, celui d'arranger l'action, d'inventer l'histoire, oui ça reste là, mais tout le reste à changé.

- - - Mise à jour - - -




> Source ?
> Car ça fait 2 fois que tu balances ça et ça rentre en contradiction avec l'expérience de pas mal de canards.
> Les "petits" sites et applications, ça a déjà été pas mal bouffé par les solutions clés en mains dispos sur le marché.
> 
> Et puis faut voir comment on compte.
> Le nombre de personnes ayant fait du dev professionnellement une fois ? (dans ce cas les juniors ont un impact bien trop important à cause du turnover)
> La quantité d'année passées à dev ?
> Le chiffre d'affaire généré ?


Le pourcentage de ligne de code dans toutes les applis confondues tapée par un pisseur de code qui suit des instructions relativement simples ? 

Perso je visite très régulièrement de la grosse boite comme thales, sopra sterria et cie, bah ça tourne qu'au pisseur de code : des centaines de juniors, de stagiaires, d'alternants, d'apprentis, ou de la presta extérieure, et par dessus tout ça des seniors qui passent consigne et cie. 
Et c'est pas vraiment des petites boites de devs ...
Bah à mon sens ça va changer complétement leur anatomie.

Alors peut être que les canards ici, déjà bien expérimentées, ne fréquentent plus que de loin cet univers, qu'en sais-je, mais ça me parait quand même être l'éléphant au milieu du couloir.

----------


## Dross

> T'a tout dis, mais cette opération de traduction vers le code, la seconde phase du métier, c'est justement là que ça va changer. Toi de ton coté il te restera à faire la mise en forme du besoin client puis tu balancera ça en quelques phrases à une IA qui te pondra des blocs de code.


La mise en forme du besoin client assez claire pour générer une application c'est le code.

Je sais que je l'ai déjà posté, mais je te la remet car tu l'a visiblement loupée :




Que ce code soit de plus en plus simple à écrire et le sera encore plus à l'avenir, c'est vrai, mais on n'a pas attendu les IA pour ajouter de l'abstraction et diminuer les tâches répétitives : t'en a marre d'écrire des CRUD idiots ? utilise un ORM. Ça sert à rien de taper tout le code ? Utilise de l'autocomplétion / des templates. Tu veux pas écrire de l'UI en travaillant avec des pixels ? Utilise un framework qui le fera pour toi. Etc.

Aujourd'hui je ne tape pas 5% de mon code produit. Un ensemble d'outils le fait pour moi. L'IA le fera ptet passer à 4%. C'est possible. Mais ça changera bien peu à mon métier.

----------


## William Vaurien

J'ai l'impression que nous allons franchir une frontière: le code tel que nous le connaissons maintenant ne sera bientôt plus qu'une sorte d'assembleur manipulé par l'IA et quelques experts. 
L'intervention humaine pour coder se limitera aux portions de code très complexes, qui seront probablement remaniées et intégrées aussi par l'IA dans le référentiel.
Le style, la lisibilité ne sont plus vraiment important dans ce cas, et on peut imaginer que l'IA du future sera capable de sortir une portion du code avec un style adaptée à la lecture humaine, en fonction de settings (comme pour un IDE) pour faire de la revue de code.


"Wesh l'IA, du me fait un DAO steup?", oui clairement pour moi c'est un avenir possible. Ca parait dingue comme ça, mais finalement c'est un peu comme avoir un compilo qui transforme du pseudo anglais en binaire. Alors ça veut dire que l'IA est capable de transformer des specs en code sans erreur et de retransformer le code dans un langage formel (pseudo-code) facilement compréhensible par tous.
Alors ça ne marchera pas enun coup pour faire une appli: il y aura des itérations, exactement comme aujourd'hui, sauf que les petites touches permettant d'obtenir le code final se feront via un dialogue avec l'IA afin d'ajouter les conditions et fonctionnalités manquantes. 

Le code pourrait devenir un agglomérat rassemblant une API, de la documentation dynamique (en langage naturel et en pseudo code) toujours à jour, une aide interactive, des diagrammes, des tests présentés en langage naturel (genre cucumber), et un outil de debug interactif intégrés. L'IA peut très facilement faire de l'instrumentation très avancés sur le code qu'elle génère, et ce sera d'ailleurs peut être la même IA qui fera office de VM et qui executera le code. 
En cas de problème, plus de debug et de breakpooint, il sera naturel de demander pourquoi quand on donne 'x' et 'y' on obtient 'a' au lieu de 'z', l'IA permetant au passage de récupérer facilement une empreinte de l'appli au moment du problème afin de reproduire le problème. ChatGPT donne déjà une idée de ce que ça pourrait être: un dialogue avec l'IA qui permet de cerner l'origine du problème et de lui demander de corriger son code. Pareil pour ajouter une fonction au code.

Alors ça ressemble à de la science fiction, ça fait des années qu'on nous annonce la fin du dev "classique", mais pour avoir jouer avec chatGPT j'ai bien l'impression que ça va réellement arriver et plus vite que prévu...


Aujourd'hui, c'est plus terre à terre, j'utilise chatGPT pour m'aider dans des tâches simples: il remplace Google dans des cas très pratique: je veux faire un truc en powershell mais je n'y connais rien ?
Et là j'ai une aide sur mesure. Avec toutes les explications nécessaire pour cette opération précise, alors qu'avec Google je vais tomber sur différentes pages d'aides qui vont me donner une réponse partielle (parfois une réponse complète pour des choses simples) et je vais devoir faire un effort pour trier et comprendre les info et ensuite les utiliser pour avoir ma solution qui ne marchera peut être pas tout de suite, etntraînant une autre recherche pour comprendre l'erreur et une perte de temps pour essayer de trouver une solution.

Maintenant avec l'IA:




> En powershell, comment retrouver les processus ouvert avec un nom donné et tué ceux qui consomment trop de mémoire ?





> En PowerShell, vous pouvez utiliser la commande Get-Process pour obtenir une liste de tous les processus en cours d'exécution sur votre ordinateur. Vous pouvez utiliser l'option -Name pour filtrer cette liste pour n'afficher que les processus dont le nom correspond à celui que vous recherchez. Par exemple, pour afficher tous les processus dont le nom est "notepad", vous pouvez utiliser la commande suivante:
> 
> 
> Get-Process -Name notepad
> 
> Pour afficher les processus qui consomment une quantité excessive de mémoire, vous pouvez utiliser l'option -WorkingSet pour trier les processus en fonction de leur utilisation de la mémoire. Par exemple, pour afficher tous les processus qui consomment plus de 1 000 000 de kilo-octets de mémoire, vous pouvez utiliser la commande suivante:
> 
> Get-Process | Sort-Object -Property WS -Descending | Where-Object {$_.WS -gt 1000000}
> 
> ...



(bon là chatGPT se croûte, network error, il y a trop de monde sur la bête, mais ça reste une demo)

Ca reste de la projection de comptoir, peut être que tout ça n'aura jamais lieu et que l'IA est une fraude, ou que la hype va redescendre pour les prochaines années. 
Mais là il y a quand même une accumulation assez fascinante (et aussi inquiétante) de prouesses.

----------


## gros_bidule

Quand on cause de ces IA et de leurs prouesses, je vois un bébé qui apprend à marcher, ou un robot Boston Dynamics qui fait une pirouette. C'est une grande étape, mais il reste du chemin à parcourir avant qu'il nous vole not' travail, ou qu'il puisse nous assister de façon efficace.
Quand on s'intéresse à l'IA et, j'imagine, encore plus quand on bosse dans ce domaine, les avancées doivent être fascinantes. Mais d'un point de vue utilisateur, qui s'intéresse uniquement au résultat final et pratique, mouais, il reste énormément de boulot.
Les exemples de requêtes qu'on voit passer dernièrement, on trouve la même chose en même pas 5min sur Stackoverflow ou sur un blog spécialisé sur la techno qui t'intéresse. Dans ce dernier cas, le résultat sera même plus quali que ce que pond une IA. Exemple : tu fais du Spring, tu vas sur Baeldung pour avoir de vrais tutos avec explications et exemples, et là tu es certain d'avoir des infos fiables. Et là, le débutant va apprendre des choses. Il ne voudra pas être l'exécutant d'une IA, ça serait inintéressant, et il se tirerait une balle dans le pied.
Et demain, Baeldung ou Stackoverflow demanderont à ne pas être scrappés par ces IA. Parce que le pillage ça va 5min.

----------


## gros_bidule

La page de ChatGPT a aussi le mérite d'être claire. https://openai.com/blog/chatgpt/
Parmis les limitations, on a : 



> ChatGPT sometimes writes plausible-sounding but incorrect or nonsensical answers. Fixing this issue is challenging, as: (1) during RL training, there’s currently no source of truth; (2) training the model to be more cautious causes it to decline questions that it can answer correctly; and (3) supervised training misleads the model because the ideal answer depends on what the model knows, rather than what the human demonstrator knows.


"there’s currently no source of truth;"
-> hélas, ça risque de n'être jamais résolu. Nan ? C'est pourtant un énorme soucis.

----------


## William Vaurien

Je vois pas trop la différence entre aller sur Baeldung et suivre un tuto ou avoir un tuto généré dynamiquement par une IA. 
Si cette dernière est fiable (donc là c'est pas encore totalement le cas...) ce sera même mieux: typiquement Baeldung ne fait généralement que gratter la surface. Alors c'est très bien pour un grand débuttant, mais dès que je cherche un truc un peu pointu, Google me renvoi quasi systématiquement vers Baeldung, qui est très bien référencé, où je ne trouve pas ce je cherche car le point qui m'intéresse n'est pas couvert. 
Généralement je termine sur la doc de Spring (via Google), qui est très complète, mais parfois un peu indigeste et ou je ne vais pas forcément trouver d'exemple... Et là je repars sur Google, avec de nouveaux mots clés et j'essaie de trouver un truc sur stackoverflow ou au pire un autre tuto ou un exemple sur un site qui aggrege du code... Et sur SO je dois de nouveau chercher, voir si la question corresond à la mienne, si la réponse me convient, sinon j'essaie d'en trouver une autre... 
A la fin je suis devenu fort en recherche Google et SO, mais j'ai aussi "perdu" du temps et accumuler une certaine frustration... Et j'ai vu pas mal de collègues s'arrêter au tuto Baeldung et faire du Spring/JPA sans comprendre ce que va faire le code ou l'annotation copié/collé...

Si une IA me permet d'avoir un "moteur de recherche" capable de comprendre différentes sources et de me présenter une synthèse sous forme de réponse type StackOverflow personnalisée, je suis intéressé.
Par contre ça remet complétement en cause les sites comme SO justement avec le côté pillage des ressources...

Autre exemple: je fais rarement de la ligne de commande, et j'ai généralement oublié les options de commandes un peu exotique (genre paramétrer un grep ou un find aux petits oignons, une copie entre deux server, sed + awk) quand je dois m'en servir. Donc je me retrouve à maintenir une page perso avec des exemples des trucs que j'utilise le plus fréquements et je me retrouve souvent sur google pour retrouver quelle option il faut utiliser... 

Pourquoi je n'aurais pas shell interactif boosté à l'IA a qui je dirais: "wesh trouve moi les logs de plus d'un mois, filtre le contenu pour faire disparaître les lignes avec DEBUG dedans et fais moi une archive targz avec Envoi tout ça sur le server de backup. Et steuplé fait un cron qui tourne toutes les nuits pour faire cette action"
Alors c'est plus long que la ligne de commande, mais c'est aussi plus rapide que d'aller chercher son callepin de notes, de demander à Google ou de faire chier le collègue balèze en ligne de commande...

----------


## Dross

> "there’s currently no source of truth;"
> -> hélas, ça risque de n'être jamais résolu. Nan ? C'est pourtant un énorme soucis.



C'est un des risques de l'IA : c'est très bon pour "donner l'illusion de" et "montrer des avancées majeures", mais corriger les derniers problèmes (lié à la techno) semblent très difficile. Peut-être même impossible dans certains cas. Hors personne n'en voudra dans des applications concrètes s'il y a des bugs incorrigibles et parfois incompréhensibles. 

Alors ça peux être géré avec des systèmes déterministes qu'on met en palliatif tout autour (comme sur les voitures autonomes) ou en reléguant l'IA à un rôle de conseiller sous la supervision d'un humain (qui fera l’analyse critique) mais à cause de la nature même de la bête (informatique non déterministique) on ne peux pas corriger "les derniers bugs" comme on le fait dans l'informatique classique, et ça ne sera pas toujours possible techniquement parlant.

----------


## Garrluk

> C'est un des risques de l'IA : c'est très bon pour "donner l'illusion de" et "montrer des avancées majeures", mais corriger les derniers problèmes (lié à la techno) semblent très difficile. Peut-être même impossible dans certains cas. Hors personne n'en voudra dans des applications concrètes s'il y a des bugs incorrigibles et parfois incompréhensibles. 
> 
> Alors ça peux être géré avec des systèmes déterministes qu'on met en palliatif tout autour (comme sur les voitures autonomes) ou en reléguant l'IA à un rôle de conseiller sous la supervision d'un humain (qui fera l’analyse critique) mais à cause de la nature même de la bête (informatique non déterministique) on ne peux pas corriger "les derniers bugs" comme on le fait dans l'informatique classique, et ça ne sera pas toujours possible techniquement parlant.


Ça pourrait aussi être fait sans bout de code déterministes : une IA écrit du code/une réponse à une question, qui sera relus par d'autres IA utilisant des modèles différents, un peu comme une revue de code.

----------


## Dross

Le risque c'est que l'IA relectrice pourrai autant insérer des corrections que des régressions.

----------


## Garrluk

Si les IA se contentent de réécrire le code chacun leur tour c'est ce qu'il risque de se passer oui.
Je pensais plus à un espèce de système de consensus où les IA se mettraient d'accords sur une version finale qui leur plairait à toutes (peut-être juste en taggant les trucs qui leur plaisent pas pour pousser la 1ère IA à réécrire ces portions là jusqu'à ce que tout passe).
Mais bon, pour le coup c'est encore plus de la SF  ::): .

----------


## Kamikaze

Mouais, je vois pas Nilsou. La recherche d'image c'est encore une fois, le pire exemple. Ca existe depuis des années et ça repose absolument pas de manière prépondérante sur l'IA: https://en.wikipedia.org/wiki/Revers...rch#Algorithms

M'enfin, t'façon par posts interposé j'ai bien vu que c'était toujours difficile de faire passer des idées complexes.

Pour faire simple, on va prendre les paris. Je mets mes 2 bras à couper que vous avez totalement tort concernant l'impact de l'IA sur les emplois. Y'aura 0 remplacement de quelque poste que ce soit, lié à l'IA. Les lacunes de l'IA, qui fondamentalement est plus souvent une machine statistique qu'autre chose, vont finir apparaitre simplement à l'usage, donc même les gens qui pigent rien en verront les limites et s'en lasseront. 

Genre le truc que j'espère, que j'ose espérer, que vous reconnaîtrez quand même. C'est que l'implémentation de quelconque IA que ce soit, se repose quand même en très grande partie sur des algos puissants, genre tu fais de la computer vision, on parle de la transformée de Hough à un moment, c'est pas de l'IA c'est de l'algorithmique.

Open CV ça existe depuis 1999, donc pourquoi on efface complètement quelque chose qui était hype et est véritablement élitiste et apporte une vraie valeur qu'on a plus à prouver: la recherche en maths/algo. Et on replace ça avec un vague "l'IA va le remplacer".

Pour moi c'est simplement une preuve manifeste de manque de connaissance. Z'êtes au courant que y'a des programmes, pour continuer dans la diversité des programmes, qui font des maths (https://en.wikipedia.org/wiki/Automated_theorem_proving), donc pour simplifier le message, quand vous dites l'IA va remplacer les programmeurs, vous dites l'IA va remplacer tous les métiers.

Le code n'est qu'une modalité d'expression pour une action. Donc une recette de cuisine, c'est du code, y'a même un fameux langage exotique qui s'écrit comme des recettes de cuisine (https://esolangs.org/wiki/Chef). Un manuel d'utilisation de machine à laver, c'est du code. Un prompt c'est du code, pas besoin d'un mec pour donner la prompt à l'IA comme je le disais plus haut.

Donc bref, mon argument est simple, je trouve que vous racontez n'importe quoi, simplement parce que votre discours se généralise à tout. Et vous êtes clairement parti dans un discours sur le code, parce qu'actuellement l'application en vogue touche à ça. Et pourquoi elle touche à ça? Parce que y'a un énorme corpus gratos (github) pour générer du blabla. Donc par pur fortuité vous êtes parti dans un délire sur le code. Mais ce que vous dites c'est un délire de science fiction ou l'IA remplace tout.

Déjà on va être clair sur le fait que l'IA est par définition, a été historiquement définie comme, quelque chose qui s'inspire des structures neuronales. Donc des humains quoi. Et quand je vois les branquignolles qu'on se tape en tant que stagiaire, et vous êtes là à me dire qu'on aura une IA qui fera mieux que l'IA qu'il y a dans le cerveau de mes stagiaires? Vous racontez n'imp.

Ca sera (et c'est déjà) au mieux un outil d'analyse statistique efficace pour décanter dans certains domaines complexes avec un très haut degré de liberté, point barre.

Genre vous passez sous silence le fait que vos prompts sont simplement un langage plus haut niveau finalement, donc pourquoi on a besoin d'un générateur de code, mais pas d'un générateur de prompt?
Qui va piloter ces fameuses IA? Ca se mord la queue, vous justifier en rien l'existence du prompteur dans vos trucs futuristes.

Ultimement la réussite véritable d'une IA dans un domaine donné, c'est de comprendre le modèle implicite généré pour écrire l'algo correspondant de manière opti. L'IA telle qu'elle est actuellement est fondamentalement un outil d'analyse et non pas de création structurée. La génération c'est bruité et du pur gadget pour le moment.

En gros on vient de réinventer le Kaleidoscope et le spirograph à l'échelle informatique. Oui c'est beau, oui ça génère des trucs. Mais faut reconnaître les limitations de l'outil

Y'aura plus besoin de mathématiciens parce qu'on a des calculettes, j'pense qu'on en est là au niveau du discours actuel à vrai dire.
En vrai pour prouver votre délire de manière formelle, il faut que vous expliquiez clairement quel paramètre on peut suivre et mesurer, qui dicte quand la génération de code supplante le mec qui écrit le code qui génère du code.
Parce que pour atteindre vos espérances va falloir coder non? Donc quand est ce qu'on atteint la limite qui rend le codeur de l'IA obsolète.
C'est quand un matin il se réveille et que son écran de PC lui dit "Hé mon con, c'est bon plus besoin d'écrire, je prends la suite"

----------


## Tramb

Ouais assez d'accord et puis faire croire que ML = IA, c'est un peu une escroquerie des gens qui ont des billes dedans, ton exemple de computer vision est juste.
(et j'ai bien golri sur l'analogie spirographe :D )

----------


## Awake

> Je mets mes 2 bras à couper que vous avez totalement tort concernant l'impact de l'IA sur les emplois. Y'aura 0 remplacement de quelque poste que ce soit, lié à l'IA. Les lacunes de l'IA, qui fondamentalement est plus souvent une machine statistique qu'autre chose


Oui enfin en sur-simplifiant comme ça, on peut dire que c'est le cas du cerveau humain aussi.

En réalité, impossible de prédire le futur des IA. J'espère simplement que tu te plante.

----------


## vectra

>Kaze: ce ne sera pas la première fois que l'IA se crashe en beauté.
Ca commence par une enfilade de promesses intenables que certains commencent à faire au grand public.

Pourtant, je suis loin d'être obtus au truc: je joue un peu avec Stable Diffusion, j'ai aussi envie de tester ChatGPT pour faciliter les recherches de snippets de code. Mais ce que je vois pour le moment ne vend pas du rêve, et les projections des futurologues sont un peu trop souvent vouées au mur hélas.

Le futur attendra: y'a pas de serveur local de ChatGPT comme pour StableDiff. Super.

----------


## William Vaurien

Attendez que les 3 singes survivant équipés en neuralink reçoivent leur upgrade chatGPT !

----------


## Teocali

> Pour faire simple, on va prendre les paris. Je mets mes 2 bras à couper que vous avez totalement tort concernant l'impact de l'IA sur les emplois. Y'aura 0 remplacement de quelque poste que ce soit, lié à l'IA.


A court et moyen terme, weh, clairement : le secteur est toujours en croissance forte (relativement à l'économie de manière générale). En terme de jobs, la demande reste plus importante que l'offre et donc tout apport de productivité de l'IA, à court et moyen terme, sera utilisé pour augmenter la production, et non pour _downsizer_ les moyens de productions. Et ce même si l'IA devenait tout a coup 100 fois plus performante.

Mais dans 5-10-15 ans ? Qui peut le dire ? Qui peut dire avec certitude que l'IA ne va pas devenir tellement performante qu'elle va effectivement remplacer les techs ? Qui peut dire que le secteur du software ne va pas ralentir, au point que les gains de productivité de l'IA vont, mécaniquement, amener à une réduction des postes ? 
Certainement pas moi, et ce n'est pas ce que je disais, de toute façon. Ce que je disais, c'est que ce que je qualifierais d'aspect "pure tech" de notre taf (l'implémentation sous forme de code de la solution technique telle qu'elle a été conçue par le dev) va se réduire drastiquement, au point, je le pense, de ne se concentrer que sur les aspects vraiment pointues de la dîte solution technique. Et je ne pense que ce soit un mal.

----------


## Foksadure

Un des domaines dans lequel on nous disait (et pas que Laurent Alexandre) que, potentiellement, l'IA provoquerait la disparition à terme des emplois d'analyste image : la radiologie.

https://www.inria.fr/fr/intelligence...ogie-benefices




> Ce qui pose une autre question à laquelle l’équipe du projet a cherché à répondre : comment ces outils interagissent-ils avec l’humain dans un environnement donné ? Ou en d’autres termes, *comment l’humain prend-il en compte l’information produite par une machine qui peut faire des erreurs ?*

----------


## William Vaurien

ChatGPT, bon élève en droit. 

https://www.linkedin.com/posts/alexa...member_desktop



> IA Vs juriste 11,75/20
> 
> L'IA du chat GPT développé par OpenAI vient de venir à bout d'un examen de droit sans aucune difficulté. Cet examen concluait 24h de cours sur le droit de la PI, le RGPD, l'espace extra-atmosphérique et aérien enseigné à des étudiants du M2 CSA (des ingés spécialisés en codage pour l'aérospatial) à Paul Sabatier.
> 
> L'examen était composé de 21 questions juridiques assez techniques et précises, parfois morales (regardez la question 9 c'est vraiment troublant) suivant un narratif auquel l'IA a répondu directement sans avoir eu accès à mes notes de cours (80/90p.).
> 
> Le résultat est déconcertant. L'IA a répondu à toutes les questions. Les réponses sont parfois juridiquement approximatives mais correspondent largement à ce que j'attendais d'étudiants ingénieurs sans formation juridique. L'IA ne cite pas de jurisprudence, et abuse du conditionnel (on le comprendra elle répond quand même à des questions juridiques que je pense très techniques), mais est presque capable de répondre pertinemment à chaque question (elle ne commet que 3 erreurs).
> En définitive c'est l'imprécision des réponses qui fait perdre ses points à l'IA, mais à chaque fois elle est capable de proposer une réponse cohérente citant même parfois les formules jurisprudentielles ou légales.
> 
> ...


Et les commentaires sont plutôt intéressant car ils soulèvent pas mal de questions, notament sur le biais du correcteur: la copie de l'IA n'était pas anonyme et glissée parmi les autres copies d'élèves.
Le correcteur savait donc qu'il corrigeait une IA...

Autre point amusant mais inquiétant: un doctorant qui pensait avoir trouver des nouveaux ouvrages pour sa thèse avant de se rendre compte que c'était une pure invention de l'IA  ::wacko:: 

L'IA au service des complotistes ça nous promet un avenir radieux !

----------


## Nilsou

> Si les IA se contentent de réécrire le code chacun leur tour c'est ce qu'il risque de se passer oui.
> Je pensais plus à un espèce de système de consensus où les IA se mettraient d'accords sur une version finale qui leur plairait à toutes (peut-être juste en taggant les trucs qui leur plaisent pas pour pousser la 1ère IA à réécrire ces portions là jusqu'à ce que tout passe).
> Mais bon, pour le coup c'est encore plus de la SF .


Nan c'est déjà ce qui est déployé dans les systèmes actuels (acteur-critique ou basé sur deux IA concurrentes), ça fonctionne très bien pour plein de domaine (choix d'action, imagerie etc.). Donc c'est déjà l'état de l'art si tu veut.

----------


## Nilsou

> Mouais, je vois pas Nilsou. La recherche d'image c'est encore une fois, le pire exemple. Ca existe depuis des années et ça repose absolument pas de manière prépondérante sur l'IA: https://en.wikipedia.org/wiki/Revers...rch#Algorithms


Ben : 



> Yandex
> Yandex Images offers a global reverse image and photo search. The site uses standard Content Based Image Retrieval (CBIR) technology used by many other sites, but additionally uses artificial intelligence-based technology to locate further results based on query


(et notons que CBIR, ça veut tout et rien dire, il y a plein d'algo employant des technologies qu'on classe comme « IA » en CBIR, notamment de la catégorisation). 



> Google Image : 
> [...]
> In 2022 the feature was replaced by *Google Lens* as the default visual search method on Google, and the old Search by Image function remains available within Google Lens.[7]


_(Google Lens is an image recognition technology developed by Google, designed to bring up relevant information related to objects it identifies using visual analysis based on a neural network.[2] )_



> SK Planet
> 
> SK Planet uses reverse image search to find related fashion items on its e-commerce website. It developed the vision encoder network based on the TensorFlow inception-v3, with speed of convergence and generalization for production usage. *A recurrent neural network* is used for multi-class classification, and fashion-product region-of interest detection is based on Faster R-CNN. SK Planet's reverse image search system is built in less than 100 man-months.[16]





> Alibaba
> 
> Alibaba released the Pailitao application during 2014. Pailitao (Chinese: 拍立淘, literally means shopping through a camera) allows users to search for items on Alibaba's E-commercial platform by taking a photo of the query object. The Pailitao application uses a *deep CNN model with branches for joint detection and feature learning* to discover the detection mask and exact discriminative feature without background disturbance. GoogLeNet V1 is employed as the base model for category prediction and feature learning.[17][18]


Et je m’arrête là (en ajoutant à cette liste qu'on a bossé pour Qwant et que c'est pas mal de réseaux de neurones à l'intérieur. ) mais en gros 2/3 des exemples de ta page wikipedia c'est des réseaux de neurones ou assimilés, donc tu voulais me montrer quoi  ::rolleyes::  ? 




> Je mets mes 2 bras à couper que vous avez totalement tort concernant l'impact de l'IA sur les emplois. Y'aura 0 remplacement de quelque poste que ce soit, lié à l'IA. Les lacunes de l'IA, qui fondamentalement est plus souvent une machine statistique qu'autre chose, vont finir apparaitre simplement à l'usage, donc même les gens qui pigent rien en verront les limites et s'en lasseront.


Il n'y a pas forcément besoin intelligence pour bouleverser toute une chaine de métier. Les « IAs » dont on parle ici sont des réseaux génératifs qu'on peut vaguement assimiler à des *interpolateurs ultimes*, ce sont des abaques multidimensionnels, c'est tout.
Sauf que c'est bien suffisant. Tu n'attends pas d'un générateur de code qui prend une instruction ou une demande et la convertie qu'il y ait de la créativité qui sorte de l'univers parcouru par l'IA, tu attends d'elle qu'elle te propose une réponse qui soit l'interpolation de toutes les solutions très proches qu'elle a déjà vécue. 

Oui c'est statistique, mais j'ai envie de dire : et alors ? Ça ne change rien à tous les avantages qui ont été cités précédemment. 




> Genre le truc que j'espère, que j'ose espérer, que vous reconnaîtrez quand même. C'est que l'implémentation de quelconque IA que ce soit, se repose quand même en très grande partie sur des algos puissants, genre tu fais de la computer vision, on parle de la transformée de Hough à un moment, c'est pas de l'IA c'est de l'algorithmique.


Et l'humain repose sur des neurones qui ne sont que de vagues bulles de fluides qui ont 0 intelligence en elle.
Et alors ?  ::unsure:: 
Je ne vois pas trop où tu veux en venir ... 




> Open CV ça existe depuis 1999, donc pourquoi on efface complètement quelque chose qui était hype et est véritablement élitiste et apporte une vraie valeur qu'on a plus à prouver: la recherche en maths/algo. Et on replace ça avec un vague "l'IA va le remplacer".


Déjà, personne n'efface OpenCV, qui continue à être très utilisé (pour faire de l'IA d'ailleurs  ::trollface::  ), et c'est la recherche en math/algo qui a pondu la gamme d'IA qui est dans le vent de la hype actuelle ... 




> donc pour simplifier le message, quand vous dites l'IA va remplacer les programmeurs, vous dites l'IA va remplacer tous les métiers.


Tu veut dire automatiser tout métier ?  ::unsure:: 
La plupart des métiers sont déja plus ou moins automatisé ou automatisable, du boulanger au facteur. (tient on vient d'aller vers un contrat pour déployer des IAs dans les robots qui font les milliers de baguette en France, mais c'est de toute manière déjà automatisé avec du code simple, IA ou non, les métiers sont déjà remplaçable, et quand ils ne le sont pas, ce n'est que pour une question de cout matériel (homme moins cher que le corps de la machine)). 




> Déjà on va être clair sur le fait que l'IA est par définition, a été historiquement définie comme, quelque chose qui s'inspire des structures neuronales. Donc des humains quoi. Et quand je vois les branquignolles qu'on se tape en tant que stagiaire, et vous êtes là à me dire qu'on aura une IA qui fera mieux que l'IA qu'il y a dans le cerveau de mes stagiaires? Vous racontez n'imp.


Ton post est contradictoire, il y a des gens qui font mieux que tes stagiaires et qui sont également constitués de neurones. 




> Genre vous passez sous silence le fait que vos prompts sont simplement un langage plus haut niveau finalement, donc pourquoi on a besoin d'un générateur de code, mais pas d'un générateur de prompt?
> Qui va piloter ces fameuses IA? Ca se mord la queue, vous justifier en rien l'existence du prompteur dans vos trucs futuristes.


Ça se mort pas la queue. Quand on a remplacé une vaste partie du taf de secrétariat par de l'informatique, les petites mains du secrétariat ont massivement disparue pour laisser la place à des méga-secretaires à tout faire doublé d'un diplôme en Microsoft Office. 
À chaque fois que tu automatises, tu génère des métiers de gens plus spécialisés qui sont formés pour parler à la strates que tu viens d'automatiser. Rien de choquant, que de l'évolution technique très conventionnelles. 
Donc là tu aura des mecs qui seront des experts pour sortir les bons tags à Midjourney et autres GPT pour pondre l'image, le texte ou le code qui va bien, et ensuite ils feront des retouches. Ils prendront 27 fois plus de clients qu’auparavant et même si leur métier demandera certaines compétences « d'autrefois » (faut bien retoucher de temps en temps) ce sera à la marge. 
C'est déjà ce qui est en train de se passer très rapidement dans le domaine de l'illustration, par ailleurs.

Il n'y a aucune boucle dans l'affaire, tant qu'on ne sait pas automatiser la couche du dessus, ben on l'automatise pas c'est tout. Et le jour on ou sait créer une couche supplémentaire, bah on le fait... 

Je n'adoube pas cette évolution technico-sociale, mais dire qu'elle pose un problème de logique est complétement fumeux, tu tiens des raisonnement illogique, ça n'a rien d'un problème qui se mort la queue en définitive.

Donc là ton prompt, ben au départ ce seront des gens qui seront expert dans le sujet, puis il y aura peut être plus besoin (soit parce qu'on aura amélioré la chose jusqu’à ce que les erreurs soient bénignes, soit parce qu'on aura pondu une IA spécialisé pour virer les erreurs, des IAs concurrente qui se juge les unes les autres c'est très courant aujourd'hui). Puis après on pourra le dire à l'oral et il n'y aura plus besoin de prompt, juste d'exprimer un besoin de manière naturelle (et l'IA reviendra éventuellement avec des questions, pourquoi pas ...).
Et à cette dernière strate il n'y aura plus vraiment besoin d'aller au dessus : le but de l'automatisation étant de répondre à un besoin, à l'origine. 

On en est loin de cette situation. Mais on est pas loin de la situation avec juste une strate de plus et un mec bi-classé programmeur/gestionnaire de prompt IA.




> Ultimement la réussite véritable d'une IA dans un domaine donné, c'est de comprendre le modèle implicite généré pour écrire l'algo correspondant de manière opti. L'IA telle qu'elle est actuellement est fondamentalement un outil d'analyse et non pas de création structurée. La génération c'est bruité et du pur gadget pour le moment.


Tu comprendra jamais le modèle derrière la génération d'image, par exemple, c'est trop gros, l'équation n'a aucun sens.
Au bout d'un moment faut admettre hein ... tout le domaine a abandonné, pour info...
Par contre on sait pourquoi ça marche, mais dans le référentiel des réseaux de neurones, c'est une autre manière de penser, très similaire à la neurobiologie : on sait que telle partie va se lier à telle autre et qu'en moyenne, modulo la dynamique d’apprentissage et l'environnement extérieur moyen, ça va converger vers ça à la fin, mais le détail exact neurone par neurone est indecryptable, n'a potentiellement que peu de sens localement, et n'a de toute manière absolument aucun intérêt. 

Quand on assimile ce mode de pensé on peut améliorer le réseau, mettre telle couche plutôt que telle autre, c'est pas du pifomètre la création d'un réseau comme Gpt, c'est le fruit d'une suite de raisonnement logique, dans leur référentiel, référentiel qui nécessite d'abandonner l'espoir d'avoir une équation du tout qui te donnerait le modèle mathématique compréhensible pour l'humain de comment générer un van gogh.

Quant à la génération c'est « bruité et du pur gadget ».
franchement quoi -> https://discord.com/invite/midjourney

...





> En vrai pour prouver votre délire de manière formelle, il faut que vous expliquiez clairement quel paramètre on peut suivre et mesurer, qui dicte quand la génération de code supplante le mec qui écrit le code qui génère du code.
> Parce que pour atteindre vos espérances va falloir coder non? Donc quand est ce qu'on atteint la limite qui rend le codeur de l'IA obsolète.
> C'est quand un matin il se réveille et que son écran de PC lui dit "Hé mon con, c'est bon plus besoin d'écrire, je prends la suite


Quand ça rapporte plus de thune et qu'une industrie préférera générer son code sur une IA plutôt que d'embaucher des petites mains.
Je vois pas trop le problème, c'est arrivé à des tonnes de professions au cours du temps et de l'évolution technique. Pourquoi ton métier devrait être sanctuarisé ? Hormis le fait que ça te révolte, je ne vois guère d'argument logique...




> Un des domaines dans lequel on nous disait (et pas que Laurent Alexandre) que, potentiellement, l'IA provoquerait la disparition à terme des emplois d'analyste image : la radiologie.
> 
> https://www.inria.fr/fr/intelligence...ogie-benefices


Pour la radiologie, c'est en train d'être intégré partout actuellement. C'est un des cas les plus simple pour une IA : une gamme restreinte de problèmes dans des images simplistes d'un point de vue information. Le tout assorti d'une énorme base d'apprentissage.
Actuellement il est déployé un peu partout des aides au diagnostic chez les radiologues, dans les logiciels d'IRM et chez les cardiologues pour l'analyse.
À la base c'est vendu pour _« aider le cardiologue »_ mais c'est évidemment cynique, le but est de remplacer peu à peu les experts couteux par des techniciens manipulateurs de logiciels de détections qui encapsule le savoir, avec un unique expert qui gère l'équipe. C'est en train de bien prendre chez les anglo-saxon et ça prends peu à peu ici aussi.

Pour info, et je n'approuve pas du tout, j'ai eu des infos fraiches ce matin comme quoi ils viennent de déployer les apprentissages sur les bases nationales liées aux hôpitaux, et même qu'ils cherchent des gens pour labelliser et qu'ils ... exploiteraient des autistes ... -> en gros, personne veut faire le taf de labelliser les choses en boucles, et ils n’ont pas envie de payer des étudiants, alors ils ont trouvé l'astuce infiniment crade de proposer ça comme « activité » à des autistes avec le partenariat d'association, on m'a rapporté ça ce matin, et le mec très sur de lui (qui fait la négo avec les assoc du coté de l'organisme qui gère les données des hopitaux) était tout content parce que _« les autistes, ça peut se concentrer 12h par jours sur la même tache et ça leur fait du bien »_  :Gerbe: 

Oui, j'ai  :Gerbe: , et je n'invente rien.

----------


## vectra

Je rebondis sur les autistes.
C'est profondément choquant de faire labelliser par des gens qui n'ont pas de connaissance médicale précise de ce qu'ils labellisent ni de l'imagerie en question. Et je tiens ça de gens qui le font alors que ça les fait chier, mais qui n'ont pas le choix.

Sinon, midjourney, ça a l'air bien, mais ça ajoute quoi par rapport à stable-diffusion?
Qui est intéressant certes, mais qui fait ce qu'il veut, et a du mal à extrapoler ce qui visiblement n'est pas dans son ensemble d'apprentissage?

----------


## Nilsou

Je n'ai pas le détail sur cette histoire d'autiste.
Pour moi c'est de l'exploitation pure et simple d'handicapé, point à la ligne, c'est révoltant. 

Le fait qu'il soit capable ou non de labelliser de manière qualitative n'est vraiment pas le sujet amha.

----------


## vectra

Et pourtant...

----------


## Nilsou

Nan mais on en sait rien du détail, peut être qu'ils ont trouvé une manière simple de présenter le problème. Qu'en sais-je. Peut être que ce sont des tonnes de données à labelliser mais avec des critères discriminant très simplistes. 
Mais au final il n'y a vraiment pas besoin d'arriver là pour dire que c'est de la merde. Exploiter des handicapé parce que _« ils peuvent se concentrer 12h par jours sur la même taches »_, c'est de la barbarie. Point. Le faire en présentant ça à des assocs comme si ça allaient aider les autistes ou que sais-je, c'est de la malhonnêteté et du cynisme.

Et notez que ce n'est pas du tout la première fois que je suis confronté à l'exploitation indécente d'autistes dans la recherche française, mais je ne vais pas m'étendre là dessus, ça sort un peu du sujet.




> Sinon, midjourney, ça a l'air bien, mais ça ajoute quoi par rapport à stable-diffusion?
> Qui est intéressant certes, mais qui fait ce qu'il veut, et a du mal à extrapoler ce qui visiblement n'est pas dans son ensemble d'apprentissage?
> 
> https://media.discordapp.net/attachm...828&height=855


C'est le même principe. À vrai dire il y a un mouvement de fond vers Stable Diffusion parce que le code est public, contrairement à Midjourney. Midjourney c'est juste pratique parce qu'on peut le tester jour et nuit en une phrase sur Discord. 

Sinon oui, comme MiidJourney ça génère des erreurs très régulières. Mais en gros il te génère 10 images, et sur ces 10 t'en à 3 ou 4 bonne à jeter (ou rigolotes), 5 qui font le job, et à minima une qui est vraiment excellente. C'est bien suffisant. Là ils t'ont sortie les exemples des 3 ou 4 du dessous, mais sans te mettre le reste. 
En général sur Midjourney les résultats sont très exploitables.

edit, pour le fun, quelques canard pc ou cyborg : 


Spoiler Alert!

----------


## William Vaurien

Dans un billet de blog récent, l'éditeur américain Chaosium vient de faire une annonce officielle à propos de l'utilisation des ia: https://www.chaosium.com/blogai-art-...m-16-dec-2022/
Pour info c'est un des plus gros éditeur us de jeux de rôle papier.

La conclusion est :



> So, in short – if you are doing art for us, don’t use AI.
> 
> The next time you pick up a Chaosium game, you can be confident that all of the art there is the product of a human artist who is passionate about our games and the worlds we create, rather than a set of computer algorithms and prompts.


Donc en gros la mise en place d'un label 'sans IA' comme le maïs sans OGM.
C'est plutôt bien pour les artistes qui sont touchés par ce phénomène de l'IA. Et ça montre aussi aux sceptiques qu'il y a un réel impact dans la société.

Et puis je me suis dit que les artistes sont peut être les premières victimes des IA modernes mais qu'il y aurait d'autres mouvements de protestation de ce type. Et peut être même des procès comme l'auteur du billet le voit venir.
Mais par contre je suis aussi convaincu qu'il y aura beaucoup moins de monde à s'émouvoir des développeurs qui se font piquer leurs jobs par des machines qu'ils ont eux mêmes créés...

----------


## Nilsou

Le problème c'est qu'il sera très difficile, voir impossible, de traquer les truand. Des artistes vont vite faire semblant de jouer le jeu en s'épargnant un effort en faisant appel à une IA. Pour distinguer faudra être fortiche ...

----------


## Awake

ArtStation vient de rajouter une option "No AI" pour les artistes, qui indiquera via une balise HTML aux crawlers que les oeuvres ne peuvent être utilisées dans les corpus d'apprentissage.

----------


## Nilsou

Idem, une fois appris, pour prouver que la base a été utilisé comme apprentissage, c'est impossible ou presque.

Je faisais cette prédiction pas plus tard que ce matin à un collègue : on se dirige vers la mort des publications artistiques sur le web, du moins pour les artistes qui veulent vivre de leur œuvre. Très vite, le style de chacun va être une ressource précieuse, un secret industriel, qui, si il est dévoilé, devient facilement copiable. Il ne restera que les purs amateurs sur ArtStation, DeviantArt et autres ... tout les autres vont planquer leur portfolio.

C'est une transition très triste qu'on va observer.

Je rajouterais qu'a long terme, l’ascenseur qui existait dans le milieu artistique entre petites mains et artistes confirmés qui sont payés « pour leur nom et réputation » va très probablement complétement s'écrouler. Les petites mains ne pourront jamais être embauché car trop cher face à une IA générative et si les artistes confirmés/déja installés ont peu de soucis à se faire, le renouvellement des générations d'artistes par cet ancien ascenseur social ne se fera plus.
Il ne restera plus qu'une ségrégation, très classique dans d'autres domaine, mais qui était encore timoré de méritocratie dans le milieu artistique, entre les plus aisés qui pourront se payer des prestigieuses écoles d'art qui en feront des « Artistes humains +++ » qu'on recrute pour le prestige et quand on a tellement les moyens que « OSEF des sous, un humain ça fait bien », et les moins aisés qui ne pourront qu'être artistes amateurs sans jamais en vivre car plus de véritables petits boulot lié.

Mark my sad words.

Et je dis « artistes » a dessein. Mais en gros le phénomène va surement apparaitre sur tout boulot de « composition », de la musique à l'image en passant par le bruitage, l'animation, l'infographie, le design. À plus ou moins longues échéances à chaque fois.
Et programmation, donc, peut être ...

Je vois également bien des IAs venir relire un texte d'un écrivain pourrave pour le transformer en bon texte sur la forme, en copiant le style d'untel ou untel. C'est un boulot à la portée des machines.

----------


## vectra

Moi je vois au contraire des artefacts et des défauts un peu partout.
Je vois un rapport résultat/effort quasi-infini, mais dans le même temps il faut accepter que le résultat soit une des images pas trop pourries que l'IA ait réussi à sortir un peu par hasard, sous réserve que les éléments demandés soient bien renseignés dans la base d'apprentissage.

Et merci le temps et les watts consommés par les différents essais de prompts: pour peu qu'on monte en résolution, il faut savoir être patient. Encore une fois, pour quelqu'un qui n'a pas fait les beaux-arts, le résultat sur prompt est inespéré. Mais grâce aux artistes dont on a volé l'IP.

Et pour le cartoon en particulier, l'IA peut juste aller se rhabiller. Le trait au service d'une idée, et pas le trait comme une moyenne de tags contenus dans une base.

----------


## deathdigger

> Je vois pas trop la différence entre aller sur Baeldung et suivre un tuto ou avoir un tuto généré dynamiquement par une IA. …


Tu as l’impression de perdre du temps quand tu recherches des infos, mais e n’est pas le cas. Tu vas avoir des infos parcellaires à droite à gauche que tu assembleras petit à petit pour trouver ta solution. Dans le lot, tu vas rencontrer des trucs que tu ne connais pas et dont tu n’auras pas besoin à l’instant T. Mais demain, si tu en as besoin, tu sais que t’as déjà entendu parler de ça et que tu peux l’utiliser pour développer.
Si l’IA te pond un code tout fait, tu ne progresses pas. Je le vois avec tous les devs qui malgré 5, 10, 20 ans sont toujours nuls : les mecs ont juste appris à faire des copiés-collés, jamais à rechercher, réfléchir, adapter. Et tu comptes sur ces gens pour faire de la revue de code ?

----------


## William Vaurien

Bah honnêtement je préférerais une bonne ia ... Mais ce serait probablement un signe qu'elle est meilleur que moi...

Après j'ai fais mes études à un moment de bascule, avec les débuts d'internet 'grand public'. Pour certains profs c'était une hérésie de mettre des tutos sur internet. Pour eux il fallait utiliser des livres, des classeurs de référence ou le 'man'...

----------


## Nilsou

> mais dans le même temps il faut accepter que le résultat soit une des images pas trop pourries que l'IA ait réussi à sortir un peu par hasard, sous réserve que les éléments demandés soient bien renseignés dans la base d'apprentissage.


En fait, comme avec midjourney, tu peux demander des variations d'une image. Itérativement, tu peux te rapprocher assez bien de ce que tu désire. Mais oui il y a toujours une part de hasard. Mais quand tu embauche un artiste, le résultat n’est pas non plus exactement ce que tu  avais en tête. Dans une certaine mesure, ça ne posera pas de problème aux acheteurs je pense.




> Et merci le temps et les watts consommés par les différents essais de prompts: pour peu qu'on monte en résolution, il faut savoir être patient.


La consommation énergétique est en effet le point noir notable, mais le prix de cette consommation face à un salaire reste ridicule. Je ne vois pas ça être un frein socialement. 




> Encore une fois, pour quelqu'un qui n'a pas fait les beaux-arts, le résultat sur prompt est inespéré. Mais grâce aux artistes dont on a volé l'IP.


Très clairement. Mais moralement je suis d'accord avec toi hein, c'est juste que personne ne pourra rien y faire. Si demain je prends toute la base, de, disons, un canard dessinateur, ce sera improuvable. 




> Et pour le cartoon en particulier, l'IA peut juste aller se rhabiller. Le trait au service d'une idée, et pas le trait comme une moyenne de tags contenus dans une base.


Pourtant elle est forte là aussii. Ses résultats sur le style animé, par exemple, sont souvent bons c'est là où elle offre de très beaux résultats en fonction des tags. 
Alors oui, le soucis c'est que pour le moment elle aura du mal à garder une cohérence dans la même scène sous le format actuel. Mais c'est du détail de conception de l'IA amha. Lui donner les entrées des scenes précédentes pour qu'elle garde une cohérence interne, c'est l'enfance de l'art. Avec suffisamment de bon mots clé sur l'angle, ce qu'on souhaite voir dans la scène etc... 
Il y a déjà des gens sur le net qui publie des manga juste avec les résultats de Midjourney, qui n'est pourtant pas vraiment fait pour ça. Bien sur c'est très experimental pour le moment mais voila ^^.

----------


## rOut

> ArtStation vient de rajouter une option "No AI" pour les artistes, qui indiquera via une balise HTML aux crawlers que les oeuvres ne peuvent être utilisées dans les corpus d'apprentissage.


Vu qu'ils ne respectent pas les licences, aucune raison que ça fasse une différence.

----------


## Nilsou

D'ailleurs ça c'est abusé. Un réseau de neurone, son taf c'est de reproduire sa base d'apprentissage et d'interpoler, mais du coup son taf le plus simple c'est ... de reproduire. Ce sont de gigantesque machine à plagiat en somme.
Le fait que les réseaux de neurone ne soient pas soumis au règle du plagiat est ... bien nul, donc.

J’espère que ce sera sévèrement réglementé.

----------


## Dross

Ils sont bien évidemment soumis aux règles du plagiat. C'est juste que dans le domaine de l'art, le plagiat c'est pas ce que les gens imaginent : une inspiration ne tombe pas dans le domaine du plagiat, hors les résultats des IA tiens plus de l'inspiration que du plagiat pur : réutiliser un style, une palette ou un sujet n'est pas plagier.

----------


## Nilsou

Le truc c'est que l'outil permet la copie de plus qu'un style... on peut éventuellement retomber sur le même tableau que l'entrée. 

De manière générale ça va poser de vrai soucis de législation ensuite je pense, la législation sur le plagiat actuelle, en effet, ne prends pas en compte tout ce qui est copie de style etc. Et c'est normal. Mais elle se base sur un monde où un artiste voulant s'approprier le style de quelqu'un devra bosser et en gros, c'est d'une certaine manière également le fruit de son effort. J’imagine que c'est de cet équilibre que née, dans nos sociétés, l'acceptation de l'appropriation du style de quelqu'un d'autre. C'est mal vu, mais comme t'a bossé, c'est quand même ton taf.

Cet équilibre est pas mal brisé avec les IAs puisqu'on pourra copier le style de quelqu'un en un clic ou presque...

----------


## Dross

De la façon dont ces IA fonctionnent c'est très peu probable (dans le langage courant on dirait "impossible"). Et c'est seulement dans ce cas précis qu'on pourrai parler de plagiat et que l'artiste d'origine pourrai attaquer et faire retirer ladite image, autant dire que ça n'arrivera jamais.

Sinon oui, cette facilité d'accès à la création va amener le même soucis que l'arrivée des appareils photos argentique dans le monde du portrait, ou du numérique sur téléphone avec instagram. Dès que tu as une barrière d'entrée qui s'effondre, tu a une explosion des contenus et c'est plus difficile de sortir la tête de la nuée.

L'arrivée de l'IA pose un problème de curation et de sélection/navigation des contenus, c'est vrai. C'est d'ailleurs amplifié par les réseaux sociaux où on est plus dans une logique qui fait que c'est celui qui fait le plus de bruit qui est le plus visible ; qui allait probablement bien à ceux qui en profitaient actuellement, et qui se retrouvent pris à leur propre jeu avec la concurrence des contenus IA. Personnellement je trouve ça bien, ça va obliger à revoir notre manière de naviguer ces contenus et sortir de la dynamique actuelle.

----------


## Nilsou

Bon, j'ai passé mon Noël avec ma sœur et son conjoint, tout deux bossant à divers étages des métiers du graphismes (illustratrices enchainant les petits boulots pour ma sœur et animateur/illustrateur bossant pour les plus grosses boites françaises pour son conjoint) et ce que j'avais prévu est tristement en train de se réaliser, à une vitesse extrêmement rapide.

La plupart des contrats de ma sœur ont sauté du jour au lendemain parce que les boites qui autrefois embauchait pour illustrer un jeu de carte ou de réaliser un logo d'entreprise sont en train de migrer vers l'usage sporadique de Midjourney gratuitement plutôt que d'embaucher des illustrateurs ou graphistes.
C'est tout le domaine qui est en train de s'écrouler en quelques semaines et ma sœur parle déjà de se réorienter ... 

Les seuls domaines qui tiennent sont les endroits où il faut de la cohérences entre scènes (manga, animation, JV, BD) mais tout ce qui est petites illustrations individuels est en train de sombrer et on peut se demander combien de temps ça prendra de pondre une IA qui a de la cohérence entre scène... probablement quelques mois, tout au plus, juste une question d'apprentissage. 

Dans le domaines des grosses entreprises, la migration est plus lentes, mais dors et déjà ça a des impacts très visibles avec des projets abandonnés en interne, des devs qui sautent sur ça pour générer des textures etc. (Dall-E et cie peuvent générer aisément des textures) ce qui entraine un ensemble de métier qui sautent également ...

Même au niveau de l'architecture, des outils pour la génération 3D par IA semble être en train de s'imposer, même si pour le moment ça reste au niveau d'outil. Mais par contre les modélisateur 3D tout cours, dans les autres domaines, ont de gros soucis à se faire... 

Bref, c'est encore plus la débandade que ce que je pensais ...  :Sweat:  Certains collègues de ma sœur, qui sont illustrateurs depuis des années, sont en train de se reconvertir et elle aussi l'envisage, c'est vraiment la grosse cata ...
La génération sonore, le bruitage etc... vont également en prendre un gros coups dans la gueule ... même si pour l'instant ça n'est pas encore fait, on imagine bien que les IAs qui ont été appliqués à la génération de symphonie pourront aisément être raccorder aux IAs de compréhension textuelles comme l'ont été les IAs de génération d'image (dont le principe était assez vieux, c'est le raccordement qui est récent). 

Je pense que je ferais peut être un point sur tout ça sur le topic de l'IA. Mais ça évolue à vitesse grand V, non vers des IA « intelligente » mais vers des outils de générations qui vont changer grandement plein de métier du numérique.

----------


## Kamikaze

Vivement qu'on fasse de la crypto et du guidage de missile avec les IA

----------


## Kamikaze



----------


## Awake

Vivement que l'IA nous pique tous nos métiers surtout, qu'on arrête de bosser comme des débiles et qu'on puisse se concentrer juste sur ce qu'on aime, pour soi  :Bave:

----------


## acdctabs

C'est déjà ce qui commence à se passer dans le graphisme.

----------


## Kamikaze

Mais si l'IA se concentre sur ce que tu aimes et le fait mieux  :Emo: 

(nan j'ai juste fait mumuse avec le chat robot 2 min, mais je suis bloqué j'ai dépassé le quota  :tired: )

J'étais en train d'essayer de créer un automate via le chat lol, vu que tu peux faire référence aux réponses d'avant et faire des chaines d'actions ("answer that, then), je voulais faire genre une boucle ou un truc rigolo

----------


## Nilsou

> https://i.ibb.co/5Wxxr7D/image.png
> 
> Vivement qu'on fasse de la crypto et du guidage de missile avec les IA


Alors on fait déjà du guidage de missile avec des IAs, ça je peux te l'assurer puisque diverses équipes de ma connaissance bossent dessus  ::P:  On fait notamment de la reconnaissance visuelle en temps réels avec des IAs de reconnaissances utilisant des réseaux de neurones déployés sur FPGA, entre autre. 
Peu d’intérêt pour la crypto, mais on fait de la compression avec pertes, de plus en plus.

Sinon, oui, bien sur que ChatGPT n'a pas de notion très approfondie, ce n'est qu'une base de donnée gigantesque statistiques, elle n'a pas de connaissance interne sur elle même ou même sur ses réponses passées (ce pourquoi quand tu lui demande une réponse en 3 mot elle n'y arrive pas), ce n'est pas un véritable robot qui aurait appris en tentant des trucs par essais erreur, ce qui sépare nettement ce type d'algorithme de type « une entrée une sortie » d'algorithmes bouclés qui agissent sur le monde, observe le résultat de leur action et réagissent/corrigent en conséquences.

Les personnes de mon domaine disent que de véritables IAs ne peuvent exister qu'a partir du moment où on fait la boucle complète action sur le monde -> observation -> réflexion -> réaction agissant sur le monde etc. 
ChatGPT et toutes les IAs génératrices ne sont donc, dans cette définition que j'approuve, que des outils statistiques, de gigantesques abaques. Mais poussées tellement à l’extrême que si tu leur demande de générer quelques choses de généralistes, genre une histoire ou une dissertation, c'est bluffant, alors même qu'elle n'a aucune connaissance sur elle même.

Et c'est déjà bien suffisant pour : 

- Foutre en l'air pas mal de personnes bossant dans le graphismes.
- Foutre en l'air pas mal de personnes bossant dans le son.
- Foutre en l'air pas mal de personnes bossant dans la trad.

Et éventuellement causer bien du soucis à de gros moteur de recherche comme google. (Écouter à ce propos le début du podcast Soft Power, sur France Culture, diffusé aujourd'hui, qui revient sur la panique qui sévit chez Google actuellement).

2023 va être chahuté ...

Et on ne parle que de la face IA génératrice de la pièce, je ne mentionne pas la face IA de détection/reconnaissances, qui dépasse maintenant les performances humaines dans bien des domaines et qui est en train de fournir des outils rêvés pour toutes les dictatures en herbes et les républiques qui aimeraient serrer un peu la vis. (tient d'ailleurs, rappelons qu'Open AI, les mecs derrières chat GPT et Dall-E est financée à la base par Elon Musk, certes, mais aussi par Palentir, spécialistes de la fournitures d'armes/drones/logiciels de traques basés sur l'IA à pas de services armées/renseignements et autres groupements divers peu rigolo de par le monde ).

----------


## rOut

> https://i.ibb.co/5Wxxr7D/image.png
> 
> Vivement qu'on fasse de la crypto et du guidage de missile avec les IA


Oui mais 3⁴×7×11²×13×17 = 15162147, donc c'est 99.7% vrai. C'est largement suffisant.

----------


## Teocali

> Oui mais 3⁴×7×11²×13×17 = 15162147, donc c'est 99.7% vrai. C'est largement suffisant.


pour un missile ? Yep, généralement. C’est comme les fuites memoires,  c’est pas forcément le plus grave sur un missile…

----------


## Kamikaze

C'tait pour la blague, c'tait pour la blague



Sinon pour info en s'inscrivant sur openai vous avez un accès (limité j'imagine) à tous leurs autres trucs, y'a aussi de la génération d'image, etc.

- - - Mise à jour - - -

Le défi de la semaine, trouver comment faire dire des gros mots à cette gentille AI



- - - Mise à jour - - -



J'pense que les AI vont remplacer les humoristes

- - - Mise à jour - - -

Interdit -18



Spoiler Alert! 






- - - Mise à jour - - -

C'est pas moi qui l'ait dit!

----------


## William Vaurien

J'ai vu un échange du genre avec des questions du type "ma sœur avait la moitié de mon age quand j'avais 6 ans. J'ai 49 ans, quel âge etc... "  Et l'IA concluait très sérieusement que la soeur grandissait plus vite avec une belle démonstration...

----------


## Orhin

C'est donc au dessus du niveau moyen des réponses à ce genre d'énigme sur Facebook ou Reddit.  ::ninja::

----------


## vectra

Tout comme on voit stable-diffusion immerger youtube d'illustrations plus ou moins claquées mais à 0€ et libres de droit, ChatGPT commence à infuser diverses sphères d'activité.
Et notamment la production de devoirs à la maison.

Il y a quelques semaines, un article de Vice pourri jusqu'à l'os mentionnait un étudiant américain plus con que son clavier qui se vantait d'écrire ses dissertations avec ChatGPT sans se faire gauler. J'ai pas relayé tellement c'était infantile: le mec se met un gros emprunt sur le dos pour suivre un cursus, et une fois sur place n'en profite pas.

Mais le phénomène prend assez d'ampleur pour qu'on arrive à le détecter en France. Pour la peine, un excellent article de Checknews sur le sujet.
https://www.liberation.fr/checknews/...IDGDJEQOPGUSE/

Donc oui, l'IA se détecte, elle a ses limite et ses failles, et y'aura de plus en plus de moyens de discerner un travail humain d'un travail IA. De manière plus générale, ce sont les activités répétitives de l'apprentissage qui se retrouvent menacées, alors même qu'elles sont nécessaires pour forcer les verrous de notre système cognitif.

----------


## Teocali

Tiens, je me demande : est=ce que ChatGPT est capable de detecter les textes produit par ChatGPT ?

----------


## Orhin

Non.
Par contre on doit pouvoir entrainer un modèle pour reconnaitre les textes produits par ChatGPT.
Mais c'est une "bataille" sans fin.

Le plus simple reste encore de modifier les cursus pour privilégier au maximum les travaux/examens/évaluations en présentiel (ou à minima des séances de questions-réponses et d'explication des devoirs fait en autonomie).

----------


## vectra

Apparemment les auteurs de ChatGPT vont diffuser des watermarks textuels pour permettre d'identifier "leurs" textes. Ce qui risque de ne "servir à rien" si les filous utilisent des logiciels de reformulation.
M'est avis que rajouter de la moulinette sur la moulinette va finir par rendre les textes directement identifiables comme des gros tas de merde. Alors que dans l'exemple de l'article, c'est parce que le prof a lu plusieurs devoirs en série qu'il a fini par repérer la filouterie.

----------


## Foudge

> Non.
> Par contre on doit pouvoir entrainer un modèle pour reconnaitre les textes produits par ChatGPT.
> Mais c'est une "bataille" sans fin.
> 
> Le plus simple reste encore de modifier les cursus pour privilégier au maximum les travaux/examens/évaluations en présentiel (ou à minima des séances de questions-réponses et d'explication des devoirs fait en autonomie).


Et ça existe déjà : GPTZero

News qui m'a fait découvrir cet outil :



> Stéphane Bonvallet, enseignant en handicapologie à la faculté de Lyon, avait demandé à ses étudiants de plancher sur «l’approche médicale du handicap en Europe». Au moment de corriger les copies, un doute l’assaille. «Il ne s’agissait pas de copier-coller. Mais les copies étaient construites exactement de la même manière», relate-t-il dans le Progrès. «On y retrouvait les mêmes constructions grammaticales. Le raisonnement était mené dans le même ordre, avec les mêmes qualités et les mêmes défauts. Enfin, elles étaient toutes illustrées par un exemple personnel, relatif à une grand-mère ou un grand-père…» Si ces copies n’étaient donc «pas normales», l’enseignant «n’a pas tout de suite compris de quoi il s’agissait. A l’évidence, il ne s’agissait pas d’un plagiat [de site web]». L’une des élèves avoue : la moitié des quatorze étudiants de master suivant le cours «s’étaient servi de l’intelligence artificielle ChatGPT».


Suite ici : https://www.liberation.fr/checknews/...IDGDJEQOPGUSE/

Comme tu le dis, ça va être le jeu du chat et de la souris.

----------

